blob: 82fd8d548126d42ed1af249895169cca2fc1f1c2 [file] [log] [blame]
ollie6a600992005-11-26 21:55:36 +00001/*
uweb25f1ea2007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
ollie6a600992005-11-26 21:55:36 +00003 *
uwe555dd972007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
stepan0ac57fd2008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
hailfingerf60abdb2009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
snelson63133f92010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
uweb25f1ea2007-08-29 17:52:32 +00009 *
stepan7cd945e2007-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.
ollie6a600992005-11-26 21:55:36 +000014 *
stepan7cd945e2007-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.
ollie6a600992005-11-26 21:55:36 +000019 *
stepan7cd945e2007-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
uweb25f1ea2007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
ollie6a600992005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
hailfinger66966da2009-06-15 14:14:48 +000026#include "flashchips.h"
snelson8913d082010-02-26 05:48:29 +000027#include "chipdrivers.h"
David Hendricks23cd7782010-08-25 12:42:38 -070028#include "writeprotect.h"
ollie6a600992005-11-26 21:55:36 +000029
uwec93fbdb2008-03-16 02:06:25 +000030/**
uwe3cfe8a52009-05-21 15:55:46 +000031 * List of supported flash chips.
uwec93fbdb2008-03-16 02:06:25 +000032 *
33 * Please keep the list sorted by vendor name and chip name, so that
34 * the output of 'flashrom -L' is alphabetically sorted.
35 */
hailfinger48ed3e22011-05-04 00:39:50 +000036const struct flashchip flashchips[] = {
uwec93fbdb2008-03-16 02:06:25 +000037
hailfinger3000b1f2009-07-23 12:42:01 +000038 /*
39 * .vendor = Vendor name
40 * .name = Chip name
41 * .bustype = Supported flash bus types (Parallel, LPC...)
42 * .manufacture_id = Manufacturer chip ID
43 * .model_id = Model chip ID
44 * .total_size = Total size in (binary) kbytes
45 * .page_size = Page or eraseblock(?) size in bytes
46 * .tested = Test status
47 * .probe = Probe function
48 * .probe_timing = Probe function delay
hailfinger91cf1032009-10-01 13:15:01 +000049 * .block_erasers[] = Array of erase layouts and erase functions
50 * {
51 * .eraseblocks[] = Array of { blocksize, blockcount }
52 * .block_erase = Block erase function
53 * }
snelson1ee293c2010-02-19 00:52:10 +000054 * .printlock = Chip lock status function
55 * .unlock = Chip unlock function
hailfinger3000b1f2009-07-23 12:42:01 +000056 * .write = Chip write function
57 * .read = Chip read function
stefanct7e00e222011-06-03 07:26:31 +000058 * .voltage = Voltage range in millivolt
stepanaa1b6a22008-12-08 18:15:10 +000059 */
60
hailfinger286829b2009-01-08 03:40:17 +000061 {
62 .vendor = "AMD",
uwe82741f22009-06-19 15:54:39 +000063 .name = "Am29F010A/B",
64 .bustype = CHIP_BUSTYPE_PARALLEL,
65 .manufacture_id = AMD_ID,
mhmd3c80cd2010-09-15 23:31:03 +000066 .model_id = AMD_AM29F010B, /* Same as Am29F010A */
uwe82741f22009-06-19 15:54:39 +000067 .total_size = 128,
68 .page_size = 16 * 1024,
snelsonc6855342010-01-28 23:55:12 +000069 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +000070 .tested = TEST_OK_PRE,
snelsonc6855342010-01-28 23:55:12 +000071 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +000072 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +000073 .block_erasers =
74 {
75 {
76 .eraseblocks = { {16 * 1024, 8} },
snelsonc6855342010-01-28 23:55:12 +000077 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +000078 }, {
79 .eraseblocks = { {128 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +000080 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +000081 },
82 },
snelsonc6855342010-01-28 23:55:12 +000083 .write = write_jedec_1,
uwe82741f22009-06-19 15:54:39 +000084 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +000085 .voltage = {4500, 5500},
uwe82741f22009-06-19 15:54:39 +000086 },
87
88 {
89 .vendor = "AMD",
hailfinger286829b2009-01-08 03:40:17 +000090 .name = "Am29F002(N)BB",
hailfingera5245512009-06-28 19:19:25 +000091 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +000092 .manufacture_id = AMD_ID,
mhmd3c80cd2010-09-15 23:31:03 +000093 .model_id = AMD_AM29F002BB,
hailfinger286829b2009-01-08 03:40:17 +000094 .total_size = 256,
95 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +000096 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
hailfinger286829b2009-01-08 03:40:17 +000097 .tested = TEST_UNTESTED,
98 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +000099 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000100 .block_erasers =
101 {
102 {
103 .eraseblocks = {
104 {16 * 1024, 1},
105 {8 * 1024, 2},
106 {32 * 1024, 1},
107 {64 * 1024, 3},
108 },
109 .block_erase = erase_sector_jedec,
110 }, {
111 .eraseblocks = { {256 * 1024, 1} },
112 .block_erase = erase_chip_block_jedec,
113 },
114 },
hailfingerfff99532009-11-27 17:49:42 +0000115 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000116 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000117 .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
stepanaa1b6a22008-12-08 18:15:10 +0000118 },
119
hailfinger286829b2009-01-08 03:40:17 +0000120 {
121 .vendor = "AMD",
122 .name = "Am29F002(N)BT",
hailfingera5245512009-06-28 19:19:25 +0000123 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +0000124 .manufacture_id = AMD_ID,
mhmd3c80cd2010-09-15 23:31:03 +0000125 .model_id = AMD_AM29F002BT,
hailfinger286829b2009-01-08 03:40:17 +0000126 .total_size = 256,
127 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +0000128 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
129 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +0000130 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +0000131 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000132 .block_erasers =
133 {
134 {
135 .eraseblocks = {
136 {64 * 1024, 3},
137 {32 * 1024, 1},
138 {8 * 1024, 2},
139 {16 * 1024, 1},
140 },
141 .block_erase = erase_sector_jedec,
142 }, {
143 .eraseblocks = { {256 * 1024, 1} },
144 .block_erase = erase_chip_block_jedec,
145 },
146 },
hailfingerfff99532009-11-27 17:49:42 +0000147 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000148 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000149 .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
stepanaa1b6a22008-12-08 18:15:10 +0000150 },
151
hailfinger286829b2009-01-08 03:40:17 +0000152 {
153 .vendor = "AMD",
154 .name = "Am29F016D",
hailfingera5245512009-06-28 19:19:25 +0000155 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +0000156 .manufacture_id = AMD_ID,
mhmd3c80cd2010-09-15 23:31:03 +0000157 .model_id = AMD_AM29F016D,
hailfingerc43afc92009-12-22 22:15:33 +0000158 .total_size = 2 * 1024,
hailfinger286829b2009-01-08 03:40:17 +0000159 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +0000160 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
hailfinger286829b2009-01-08 03:40:17 +0000161 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +0000162 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +0000163 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000164 .block_erasers =
165 {
166 {
167 .eraseblocks = { {64 * 1024, 32} },
snelsonc6855342010-01-28 23:55:12 +0000168 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000169 }, {
170 .eraseblocks = { {2048 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +0000171 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000172 },
173 },
snelsonc6855342010-01-28 23:55:12 +0000174 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000175 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +0000176 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +0000177 },
178
hailfinger286829b2009-01-08 03:40:17 +0000179 {
180 .vendor = "AMD",
181 .name = "Am29F040B",
hailfingera5245512009-06-28 19:19:25 +0000182 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +0000183 .manufacture_id = AMD_ID,
mhmd3c80cd2010-09-15 23:31:03 +0000184 .model_id = AMD_AM29F040B,
hailfinger286829b2009-01-08 03:40:17 +0000185 .total_size = 512,
186 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +0000187 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
188 .tested = TEST_UNTESTED,
189 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +0000190 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000191 .block_erasers =
192 {
193 {
194 .eraseblocks = { {64 * 1024, 8} },
snelsonc6855342010-01-28 23:55:12 +0000195 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000196 }, {
197 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +0000198 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000199 },
200 },
snelsonc6855342010-01-28 23:55:12 +0000201 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000202 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +0000203 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +0000204 },
205
hailfinger286829b2009-01-08 03:40:17 +0000206 {
207 .vendor = "AMD",
stuged9f66152009-01-25 23:55:12 +0000208 .name = "Am29F080B",
hailfingera5245512009-06-28 19:19:25 +0000209 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingeradd36042009-06-02 00:38:14 +0000210 .manufacture_id = AMD_ID,
mhmd3c80cd2010-09-15 23:31:03 +0000211 .model_id = AMD_AM29F080B,
stuged9f66152009-01-25 23:55:12 +0000212 .total_size = 1024,
213 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +0000214 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
stuged9f66152009-01-25 23:55:12 +0000215 .tested = TEST_UNTESTED,
216 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +0000217 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000218 .block_erasers =
219 {
220 {
221 .eraseblocks = { {64 * 1024, 16} },
snelsonc6855342010-01-28 23:55:12 +0000222 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000223 }, {
224 .eraseblocks = { {1024 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +0000225 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000226 },
227 },
snelsonc6855342010-01-28 23:55:12 +0000228 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000229 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +0000230 .voltage = {4500, 5500},
stuged9f66152009-01-25 23:55:12 +0000231 },
232
233 {
234 .vendor = "AMD",
hailfinger5a8bd5a2011-02-05 12:11:17 +0000235 .name = "Am29LV001BB",
236 .bustype = CHIP_BUSTYPE_PARALLEL,
237 .manufacture_id = AMD_ID,
238 .model_id = AMD_AM29LV001BB,
239 .total_size = 128,
240 .page_size = 64 * 1024, /* unused */
241 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
242 .tested = TEST_OK_PREW,
243 .probe = probe_jedec,
244 .probe_timing = TIMING_ZERO,
245 .block_erasers =
246 {
247 {
248 .eraseblocks = {
249 {8 * 1024, 1},
250 {4 * 1024, 2},
251 {16 * 1024, 7},
252 },
253 .block_erase = erase_sector_jedec,
254 }, {
255 .eraseblocks = { {128 * 1024, 1} },
256 .block_erase = erase_chip_block_jedec,
257 },
258 },
259 .write = write_jedec_1,
260 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000261 .voltage = {3000, 3600}, /* 3.0-3.6V for type -45R, others 2.7-3.6V */
hailfinger5a8bd5a2011-02-05 12:11:17 +0000262 },
263
264 {
265 .vendor = "AMD",
266 .name = "Am29LV001BT",
267 .bustype = CHIP_BUSTYPE_PARALLEL,
268 .manufacture_id = AMD_ID,
269 .model_id = AMD_AM29LV001BT,
270 .total_size = 128,
271 .page_size = 64 * 1024, /* unused */
272 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
273 .tested = TEST_UNTESTED,
274 .probe = probe_jedec,
275 .probe_timing = TIMING_ZERO,
276 .block_erasers =
277 {
278 {
279 .eraseblocks = {
280 {16 * 1024, 7},
281 {4 * 1024, 2},
282 {8 * 1024, 1},
283 },
284 .block_erase = erase_sector_jedec,
285 }, {
286 .eraseblocks = { {128 * 1024, 1} },
287 .block_erase = erase_chip_block_jedec,
288 },
289 },
290 .write = write_jedec_1,
291 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000292 .voltage = {3000, 3600}, /* 3.0-3.6V for type -45R, others 2.7-3.6V */
hailfinger5a8bd5a2011-02-05 12:11:17 +0000293 },
294
295 {
296 .vendor = "AMD",
297 .name = "Am29LV002BB",
298 .bustype = CHIP_BUSTYPE_PARALLEL,
299 .manufacture_id = AMD_ID,
300 .model_id = AMD_AM29LV002BB,
301 .total_size = 256,
302 .page_size = 64 * 1024, /* unused */
303 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
304 .tested = TEST_UNTESTED,
305 .probe = probe_jedec,
306 .probe_timing = TIMING_ZERO,
307 .block_erasers =
308 {
309 {
310 .eraseblocks = {
311 {16 * 1024, 1},
312 {8 * 1024, 2},
313 {32 * 1024, 1},
314 {64 * 1024, 3},
315 },
316 .block_erase = erase_sector_jedec,
317 }, {
318 .eraseblocks = { {256 * 1024, 1} },
319 .block_erase = erase_chip_block_jedec,
320 },
321 },
322 .write = write_jedec_1,
323 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000324 .voltage = {3000, 3600}, /* 3.0-3.6V for type -55, others 2.7-3.6V */
hailfinger5a8bd5a2011-02-05 12:11:17 +0000325 },
326
327 {
328 .vendor = "AMD",
329 .name = "Am29LV002BT",
330 .bustype = CHIP_BUSTYPE_PARALLEL,
331 .manufacture_id = AMD_ID,
332 .model_id = AMD_AM29LV002BT,
333 .total_size = 256,
334 .page_size = 64 * 1024, /* unused */
335 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
336 .tested = TEST_UNTESTED,
337 .probe = probe_jedec,
338 .probe_timing = TIMING_ZERO,
339 .block_erasers =
340 {
341 {
342 .eraseblocks = {
343 {64 * 1024, 3},
344 {32 * 1024, 1},
345 {8 * 1024, 2},
346 {16 * 1024, 1},
347 },
348 .block_erase = erase_sector_jedec,
349 }, {
350 .eraseblocks = { {256 * 1024, 1} },
351 .block_erase = erase_chip_block_jedec,
352 },
353 },
354 .write = write_jedec_1,
355 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000356 .voltage = {3000, 3600}, /* 3.0-3.6V for type -55, others 2.7-3.6V */
hailfinger5a8bd5a2011-02-05 12:11:17 +0000357 },
358
359 {
360 .vendor = "AMD",
361 .name = "Am29LV004BB",
362 .bustype = CHIP_BUSTYPE_PARALLEL,
363 .manufacture_id = AMD_ID,
364 .model_id = AMD_AM29LV004BB,
365 .total_size = 512,
366 .page_size = 64 * 1024, /* unused */
367 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
368 .tested = TEST_UNTESTED,
369 .probe = probe_jedec,
370 .probe_timing = TIMING_ZERO,
371 .block_erasers =
372 {
373 {
374 .eraseblocks = {
375 {16 * 1024, 1},
376 {8 * 1024, 2},
377 {32 * 1024, 1},
378 {64 * 1024, 7},
379 },
380 .block_erase = erase_sector_jedec,
381 }, {
382 .eraseblocks = { {512 * 1024, 1} },
383 .block_erase = erase_chip_block_jedec,
384 },
385 },
386 .write = write_jedec_1,
387 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000388 .voltage = {2700, 3600},
hailfinger5a8bd5a2011-02-05 12:11:17 +0000389 },
390
391 {
392 .vendor = "AMD",
393 .name = "Am29LV004BT",
394 .bustype = CHIP_BUSTYPE_PARALLEL,
395 .manufacture_id = AMD_ID,
396 .model_id = AMD_AM29LV004BT,
397 .total_size = 512,
398 .page_size = 64 * 1024, /* unused */
399 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
400 .tested = TEST_UNTESTED,
401 .probe = probe_jedec,
402 .probe_timing = TIMING_ZERO,
403 .block_erasers =
404 {
405 {
406 .eraseblocks = {
407 {64 * 1024, 7},
408 {32 * 1024, 1},
409 {8 * 1024, 2},
410 {16 * 1024, 1},
411 },
412 .block_erase = erase_sector_jedec,
413 }, {
414 .eraseblocks = { {512 * 1024, 1} },
415 .block_erase = erase_chip_block_jedec,
416 },
417 },
418 .write = write_jedec_1,
419 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000420 .voltage = {2700, 3600},
hailfinger5a8bd5a2011-02-05 12:11:17 +0000421 },
422
423 {
424 .vendor = "AMD",
425 .name = "Am29LV008BB",
426 .bustype = CHIP_BUSTYPE_PARALLEL,
427 .manufacture_id = AMD_ID,
428 .model_id = AMD_AM29LV008BB,
429 .total_size = 1024,
430 .page_size = 64 * 1024, /* unused */
431 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
432 .tested = TEST_UNTESTED,
433 .probe = probe_jedec,
434 .probe_timing = TIMING_ZERO,
435 .block_erasers =
436 {
437 {
438 .eraseblocks = {
439 {16 * 1024, 1},
440 {8 * 1024, 2},
441 {32 * 1024, 1},
442 {64 * 1024, 15},
443 },
444 .block_erase = erase_sector_jedec,
445 }, {
446 .eraseblocks = { {1024 * 1024, 1} },
447 .block_erase = erase_chip_block_jedec,
448 },
449 },
450 .write = write_jedec_1,
451 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000452 .voltage = {3000, 3600} /* 3.0-3.6V for type -70R, others 2.7-3.6V */
hailfinger5a8bd5a2011-02-05 12:11:17 +0000453 },
454
455 {
456 .vendor = "AMD",
457 .name = "Am29LV008BT",
458 .bustype = CHIP_BUSTYPE_PARALLEL,
459 .manufacture_id = AMD_ID,
460 .model_id = AMD_AM29LV008BT,
461 .total_size = 1024,
462 .page_size = 64 * 1024, /* unused */
463 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
464 .tested = TEST_UNTESTED,
465 .probe = probe_jedec,
466 .probe_timing = TIMING_ZERO,
467 .block_erasers =
468 {
469 {
470 .eraseblocks = {
471 {64 * 1024, 15},
472 {32 * 1024, 1},
473 {8 * 1024, 2},
474 {16 * 1024, 1},
475 },
476 .block_erase = erase_sector_jedec,
477 }, {
478 .eraseblocks = { {1024 * 1024, 1} },
479 .block_erase = erase_chip_block_jedec,
480 },
481 },
482 .write = write_jedec_1,
483 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000484 .voltage = {3000, 3600} /* 3.0-3.6V for type -70R, others 2.7-3.6V */
hailfinger5a8bd5a2011-02-05 12:11:17 +0000485 },
486
487 {
488 .vendor = "AMD",
hailfinger286829b2009-01-08 03:40:17 +0000489 .name = "Am29LV040B",
hailfingera5245512009-06-28 19:19:25 +0000490 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +0000491 .manufacture_id = AMD_ID,
mhmd3c80cd2010-09-15 23:31:03 +0000492 .model_id = AMD_AM29LV040B,
hailfinger286829b2009-01-08 03:40:17 +0000493 .total_size = 512,
494 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +0000495 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
hailfingerd217d122010-10-08 18:52:29 +0000496 .tested = TEST_OK_PRE,
snelsonc6855342010-01-28 23:55:12 +0000497 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +0000498 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000499 .block_erasers =
500 {
501 {
502 .eraseblocks = { {64 * 1024, 8} },
snelsonc6855342010-01-28 23:55:12 +0000503 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000504 }, {
505 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +0000506 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000507 },
508 },
snelsonc6855342010-01-28 23:55:12 +0000509 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000510 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000511 .voltage = {3000, 3600}, /* 3.0-3.6V for type -60R, others 2.7-3.6V*/
stepanaa1b6a22008-12-08 18:15:10 +0000512 },
513
hailfinger286829b2009-01-08 03:40:17 +0000514 {
stuged9f66152009-01-25 23:55:12 +0000515 .vendor = "AMD",
516 .name = "Am29LV081B",
hailfingera5245512009-06-28 19:19:25 +0000517 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingeradd36042009-06-02 00:38:14 +0000518 .manufacture_id = AMD_ID,
mhmd3c80cd2010-09-15 23:31:03 +0000519 .model_id = AMD_AM29LV080B,
stuged9f66152009-01-25 23:55:12 +0000520 .total_size = 1024,
521 .page_size = 64 * 1024,
hailfinger8ddaff32010-12-04 03:26:40 +0000522 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, /* datasheet specifies address as don't care */
stuged9f66152009-01-25 23:55:12 +0000523 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +0000524 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +0000525 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000526 .block_erasers =
527 {
528 {
529 .eraseblocks = { {64 * 1024, 16} },
snelsonc6855342010-01-28 23:55:12 +0000530 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000531 }, {
532 .eraseblocks = { {1024 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +0000533 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000534 },
535 },
snelsonc6855342010-01-28 23:55:12 +0000536 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000537 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +0000538 .voltage = {3000, 3600}, /* 3.0-3.6V for type -70R, others 2.7-3.6V */
stuged9f66152009-01-25 23:55:12 +0000539 },
540
541 {
hailfinger61958912010-07-28 22:20:20 +0000542 .vendor = "AMIC",
543 .name = "A25L05PT",
544 .bustype = CHIP_BUSTYPE_SPI,
545 .manufacture_id = AMIC_ID,
546 .model_id = AMIC_A25L05PT,
547 .total_size = 64,
548 .page_size = 256,
549 .tested = TEST_UNTESTED,
550 .probe = probe_spi_rdid4,
551 .probe_timing = TIMING_ZERO,
552 .block_erasers =
553 {
554 {
555 .eraseblocks = {
556 {32 * 1024, 1},
557 {16 * 1024, 1},
558 {8 * 1024, 1},
559 {4 * 1024, 2},
560 },
561 .block_erase = spi_block_erase_d8,
562 }, {
563 .eraseblocks = { {64 * 1024, 1} },
564 .block_erase = spi_block_erase_c7,
565 }
566 },
hailfinger7533bc82011-05-19 00:06:06 +0000567 .printlock = spi_prettyprint_status_register_amic_a25l05p,
hailfinger61958912010-07-28 22:20:20 +0000568 .unlock = spi_disable_blockprotect,
569 .write = spi_chip_write_256,
570 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000571 .voltage = {2700, 3600},
hailfinger61958912010-07-28 22:20:20 +0000572 },
573
574 {
575 .vendor = "AMIC",
576 .name = "A25L05PU",
577 .bustype = CHIP_BUSTYPE_SPI,
578 .manufacture_id = AMIC_ID,
579 .model_id = AMIC_A25L05PU,
580 .total_size = 64,
581 .page_size = 256,
582 .tested = TEST_UNTESTED,
583 .probe = probe_spi_rdid4,
584 .probe_timing = TIMING_ZERO,
585 .block_erasers =
586 {
587 {
588 .eraseblocks = {
589 {4 * 1024, 2},
590 {8 * 1024, 1},
591 {16 * 1024, 1},
592 {32 * 1024, 1},
593 },
594 .block_erase = spi_block_erase_d8,
595 }, {
596 .eraseblocks = { {64 * 1024, 1} },
597 .block_erase = spi_block_erase_c7,
598 }
599 },
hailfinger7533bc82011-05-19 00:06:06 +0000600 .printlock = spi_prettyprint_status_register_amic_a25l05p,
hailfinger61958912010-07-28 22:20:20 +0000601 .unlock = spi_disable_blockprotect,
602 .write = spi_chip_write_256,
603 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +0000604 .voltage = {2700, 3600},
hailfinger61958912010-07-28 22:20:20 +0000605 },
606
607 {
608 .vendor = "AMIC",
609 .name = "A25L10PT",
610 .bustype = CHIP_BUSTYPE_SPI,
611 .manufacture_id = AMIC_ID,
612 .model_id = AMIC_A25L10PT,
613 .total_size = 128,
614 .page_size = 256,
615 .tested = TEST_UNTESTED,
616 .probe = probe_spi_rdid4,
617 .probe_timing = TIMING_ZERO,
618 .block_erasers =
619 {
620 {
621 .eraseblocks = {
622 {64 * 1024, 1},
623 {32 * 1024, 1},
624 {16 * 1024, 1},
625 {8 * 1024, 1},
626 {4 * 1024, 2},
627 },
628 .block_erase = spi_block_erase_d8,
629 }, {
630 .eraseblocks = { {128 * 1024, 1} },
631 .block_erase = spi_block_erase_c7,
632 }
633 },
hailfinger7533bc82011-05-19 00:06:06 +0000634 .printlock = spi_prettyprint_status_register_amic_a25l05p,
hailfinger61958912010-07-28 22:20:20 +0000635 .unlock = spi_disable_blockprotect,
636 .write = spi_chip_write_256,
637 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000638 .voltage = {2700, 3600},
hailfinger61958912010-07-28 22:20:20 +0000639 },
640
641 {
642 .vendor = "AMIC",
643 .name = "A25L10PU",
644 .bustype = CHIP_BUSTYPE_SPI,
645 .manufacture_id = AMIC_ID,
646 .model_id = AMIC_A25L10PU,
647 .total_size = 128,
648 .page_size = 256,
649 .tested = TEST_UNTESTED,
650 .probe = probe_spi_rdid4,
651 .probe_timing = TIMING_ZERO,
652 .block_erasers =
653 {
654 {
655 .eraseblocks = {
656 {4 * 1024, 2},
657 {8 * 1024, 1},
658 {16 * 1024, 1},
659 {32 * 1024, 1},
660 {64 * 1024, 1},
661 },
662 .block_erase = spi_block_erase_d8,
663 }, {
664 .eraseblocks = { {128 * 1024, 1} },
665 .block_erase = spi_block_erase_c7,
666 }
667 },
hailfinger7533bc82011-05-19 00:06:06 +0000668 .printlock = spi_prettyprint_status_register_amic_a25l05p,
hailfinger61958912010-07-28 22:20:20 +0000669 .unlock = spi_disable_blockprotect,
670 .write = spi_chip_write_256,
671 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000672 .voltage = {2700, 3600},
hailfinger61958912010-07-28 22:20:20 +0000673 },
674
675 {
676 .vendor = "AMIC",
677 .name = "A25L20PT",
678 .bustype = CHIP_BUSTYPE_SPI,
679 .manufacture_id = AMIC_ID,
680 .model_id = AMIC_A25L20PT,
681 .total_size = 256,
682 .page_size = 256,
683 .tested = TEST_UNTESTED,
684 .probe = probe_spi_rdid4,
685 .probe_timing = TIMING_ZERO,
686 .block_erasers =
687 {
688 {
689 .eraseblocks = {
690 {64 * 1024, 3},
691 {32 * 1024, 1},
692 {16 * 1024, 1},
693 {8 * 1024, 1},
694 {4 * 1024, 2},
695 },
696 .block_erase = spi_block_erase_d8,
697 }, {
698 .eraseblocks = { {256 * 1024, 1} },
699 .block_erase = spi_block_erase_c7,
700 }
701 },
hailfinger7533bc82011-05-19 00:06:06 +0000702 .printlock = spi_prettyprint_status_register_amic_a25l05p,
hailfinger61958912010-07-28 22:20:20 +0000703 .unlock = spi_disable_blockprotect,
704 .write = spi_chip_write_256,
705 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000706 .voltage = {2700, 3600},
hailfinger61958912010-07-28 22:20:20 +0000707 },
708
709 {
710 .vendor = "AMIC",
711 .name = "A25L20PU",
712 .bustype = CHIP_BUSTYPE_SPI,
713 .manufacture_id = AMIC_ID,
714 .model_id = AMIC_A25L20PU,
715 .total_size = 256,
716 .page_size = 256,
717 .tested = TEST_UNTESTED,
718 .probe = probe_spi_rdid4,
719 .probe_timing = TIMING_ZERO,
720 .block_erasers =
721 {
722 {
723 .eraseblocks = {
724 {4 * 1024, 2},
725 {8 * 1024, 1},
726 {16 * 1024, 1},
727 {32 * 1024, 1},
728 {64 * 1024, 3},
729 },
730 .block_erase = spi_block_erase_d8,
731 }, {
732 .eraseblocks = { {256 * 1024, 1} },
733 .block_erase = spi_block_erase_c7,
734 }
735 },
hailfinger7533bc82011-05-19 00:06:06 +0000736 .printlock = spi_prettyprint_status_register_amic_a25l05p,
hailfinger61958912010-07-28 22:20:20 +0000737 .unlock = spi_disable_blockprotect,
738 .write = spi_chip_write_256,
739 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000740 .voltage = {2700, 3600},
hailfinger61958912010-07-28 22:20:20 +0000741 },
742
743 /* The A25L40P{T,U} chips are distinguished by their
744 * erase block layouts, but without any distinction in RDID.
745 * This inexplicable quirk was verified by Rudolf Marek
746 * and discussed on the flashrom mailing list on 2010-07-12.
747 */
748 {
749 .vendor = "AMIC",
750 .name = "A25L40PT",
751 .bustype = CHIP_BUSTYPE_SPI,
752 .manufacture_id = AMIC_ID,
753 .model_id = AMIC_A25L40PT,
754 .total_size = 512,
755 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +0000756 .tested = TEST_OK_PR,
hailfinger61958912010-07-28 22:20:20 +0000757 .probe = probe_spi_rdid4,
758 .probe_timing = TIMING_ZERO,
759 .block_erasers =
760 {
761 {
762 .eraseblocks = {
763 {64 * 1024, 7},
764 {32 * 1024, 1},
765 {16 * 1024, 1},
766 {8 * 1024, 1},
767 {4 * 1024, 2},
768 },
769 .block_erase = spi_block_erase_d8,
770 }, {
771 .eraseblocks = { {512 * 1024, 1} },
772 .block_erase = spi_block_erase_c7,
773 }
774 },
hailfinger7533bc82011-05-19 00:06:06 +0000775 .printlock = spi_prettyprint_status_register_amic_a25l40p,
hailfinger61958912010-07-28 22:20:20 +0000776 .unlock = spi_disable_blockprotect,
777 .write = spi_chip_write_256,
778 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000779 .voltage = {2700, 3600},
hailfinger61958912010-07-28 22:20:20 +0000780 },
781
782 {
783 .vendor = "AMIC",
784 .name = "A25L40PU",
785 .bustype = CHIP_BUSTYPE_SPI,
786 .manufacture_id = AMIC_ID,
787 .model_id = AMIC_A25L40PU,
788 .total_size = 512,
789 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +0000790 .tested = TEST_OK_PR,
hailfinger61958912010-07-28 22:20:20 +0000791 .probe = probe_spi_rdid4,
792 .probe_timing = TIMING_ZERO,
793 .block_erasers =
794 {
795 {
796 .eraseblocks = {
797 {4 * 1024, 2},
798 {8 * 1024, 1},
799 {16 * 1024, 1},
800 {32 * 1024, 1},
801 {64 * 1024, 7},
802 },
803 .block_erase = spi_block_erase_d8,
804 }, {
805 .eraseblocks = { {512 * 1024, 1} },
806 .block_erase = spi_block_erase_c7,
807 }
808 },
hailfinger7533bc82011-05-19 00:06:06 +0000809 .printlock = spi_prettyprint_status_register_amic_a25l40p,
hailfinger61958912010-07-28 22:20:20 +0000810 .unlock = spi_disable_blockprotect,
811 .write = spi_chip_write_256,
812 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000813 .voltage = {2700, 3600},
hailfinger61958912010-07-28 22:20:20 +0000814 },
815
816 {
817 .vendor = "AMIC",
818 .name = "A25L80P",
819 .bustype = CHIP_BUSTYPE_SPI,
820 .manufacture_id = AMIC_ID,
821 .model_id = AMIC_A25L80P,
822 .total_size = 1024,
823 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +0000824 .tested = TEST_OK_PRE,
hailfinger61958912010-07-28 22:20:20 +0000825 .probe = probe_spi_rdid4,
826 .probe_timing = TIMING_ZERO,
827 .block_erasers =
828 {
829 {
830 .eraseblocks = {
831 {4 * 1024, 2},
832 {8 * 1024, 1},
833 {16 * 1024, 1},
834 {32 * 1024, 1},
835 {64 * 1024, 15},
836 },
837 .block_erase = spi_block_erase_d8,
838 }, {
839 .eraseblocks = { {1024 * 1024, 1} },
840 .block_erase = spi_block_erase_c7,
841 }
842 },
hailfinger7533bc82011-05-19 00:06:06 +0000843 .printlock = spi_prettyprint_status_register_amic_a25l40p,
hailfinger61958912010-07-28 22:20:20 +0000844 .unlock = spi_disable_blockprotect,
845 .write = spi_chip_write_256,
846 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000847 .voltage = {2700, 3600},
hailfinger61958912010-07-28 22:20:20 +0000848 },
849
850 {
851 .vendor = "AMIC",
852 .name = "A25L16PT",
853 .bustype = CHIP_BUSTYPE_SPI,
854 .manufacture_id = AMIC_ID,
855 .model_id = AMIC_A25L16PT,
856 .total_size = 2048,
857 .page_size = 256,
858 .tested = TEST_UNTESTED,
859 .probe = probe_spi_rdid4,
860 .probe_timing = TIMING_ZERO,
861 .block_erasers =
862 {
863 {
864 .eraseblocks = {
865 {64 * 1024, 31},
866 {32 * 1024, 1},
867 {16 * 1024, 1},
868 {8 * 1024, 1},
869 {4 * 1024, 2},
870 },
871 .block_erase = spi_block_erase_d8,
872 }, {
873 .eraseblocks = { {2048 * 1024, 1} },
874 .block_erase = spi_block_erase_60,
875 }, {
876 .eraseblocks = { {2048 * 1024, 1} },
877 .block_erase = spi_block_erase_c7,
878 }
879 },
hailfinger7533bc82011-05-19 00:06:06 +0000880 .printlock = spi_prettyprint_status_register_amic_a25l40p,
hailfinger61958912010-07-28 22:20:20 +0000881 .unlock = spi_disable_blockprotect,
882 .write = spi_chip_write_256,
883 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000884 .voltage = {2700, 3600},
hailfinger61958912010-07-28 22:20:20 +0000885 },
886
887 {
888 .vendor = "AMIC",
889 .name = "A25L16PU",
890 .bustype = CHIP_BUSTYPE_SPI,
891 .manufacture_id = AMIC_ID,
892 .model_id = AMIC_A25L16PU,
893 .total_size = 2048,
894 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +0000895 .tested = TEST_OK_PR,
hailfinger61958912010-07-28 22:20:20 +0000896 .probe = probe_spi_rdid4,
897 .probe_timing = TIMING_ZERO,
898 .block_erasers =
899 {
900 {
901 .eraseblocks = {
902 {4 * 1024, 2},
903 {8 * 1024, 1},
904 {16 * 1024, 1},
905 {32 * 1024, 1},
906 {64 * 1024, 31},
907 },
908 .block_erase = spi_block_erase_d8,
909 }, {
910 .eraseblocks = { {2048 * 1024, 1} },
911 .block_erase = spi_block_erase_60,
912 }, {
913 .eraseblocks = { {2048 * 1024, 1} },
914 .block_erase = spi_block_erase_c7,
915 }
916 },
hailfinger7533bc82011-05-19 00:06:06 +0000917 .printlock = spi_prettyprint_status_register_amic_a25l40p,
hailfinger61958912010-07-28 22:20:20 +0000918 .unlock = spi_disable_blockprotect,
919 .write = spi_chip_write_256,
920 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000921 .voltage = {2700, 3600},
hailfinger61958912010-07-28 22:20:20 +0000922 },
923
924 {
925 .vendor = "AMIC",
hailfinger6eb433a2010-07-29 15:00:40 +0000926 .name = "A25L512",
927 .bustype = CHIP_BUSTYPE_SPI,
928 .manufacture_id = AMIC_ID_NOPREFIX,
929 .model_id = AMIC_A25L512,
930 .total_size = 64,
931 .page_size = 256,
hailfingerdcdadcd2010-09-03 03:32:22 +0000932 .feature_bits = FEATURE_WRSR_WREN,
hailfinger6eb433a2010-07-29 15:00:40 +0000933 .tested = TEST_UNTESTED,
934 .probe = probe_spi_rdid,
935 .probe_timing = TIMING_ZERO,
936 .block_erasers =
937 {
938 {
939 .eraseblocks = { { 4 * 1024, 16 } },
940 .block_erase = spi_block_erase_20,
941 }, {
942 .eraseblocks = { { 64 * 1024, 1 } },
943 .block_erase = spi_block_erase_d8,
944 }, {
945 .eraseblocks = { { 64 * 1024, 1 } },
946 .block_erase = spi_block_erase_c7,
947 }
948 },
hailfinger7533bc82011-05-19 00:06:06 +0000949 .printlock = spi_prettyprint_status_register_amic_a25l40p,
hailfinger6eb433a2010-07-29 15:00:40 +0000950 .unlock = spi_disable_blockprotect,
951 .write = spi_chip_write_256,
952 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000953 .voltage = {2700, 3600},
hailfinger6eb433a2010-07-29 15:00:40 +0000954 },
955
956 {
957 .vendor = "AMIC",
958 .name = "A25L010",
959 .bustype = CHIP_BUSTYPE_SPI,
960 .manufacture_id = AMIC_ID_NOPREFIX,
961 .model_id = AMIC_A25L010,
962 .total_size = 128,
963 .page_size = 256,
hailfingerdcdadcd2010-09-03 03:32:22 +0000964 .feature_bits = FEATURE_WRSR_WREN,
hailfinger6eb433a2010-07-29 15:00:40 +0000965 .tested = TEST_UNTESTED,
966 .probe = probe_spi_rdid,
967 .probe_timing = TIMING_ZERO,
968 .block_erasers =
969 {
970 {
971 .eraseblocks = { { 4 * 1024, 32 } },
972 .block_erase = spi_block_erase_20,
973 }, {
974 .eraseblocks = { { 64 * 1024, 2 } },
975 .block_erase = spi_block_erase_d8,
976 }, {
977 .eraseblocks = { { 128 * 1024, 1 } },
978 .block_erase = spi_block_erase_c7,
979 }
980 },
hailfinger7533bc82011-05-19 00:06:06 +0000981 .printlock = spi_prettyprint_status_register_amic_a25l40p,
hailfinger6eb433a2010-07-29 15:00:40 +0000982 .unlock = spi_disable_blockprotect,
983 .write = spi_chip_write_256,
984 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +0000985 .voltage = {2700, 3600},
hailfinger6eb433a2010-07-29 15:00:40 +0000986 },
987
988 {
989 .vendor = "AMIC",
990 .name = "A25L020",
991 .bustype = CHIP_BUSTYPE_SPI,
992 .manufacture_id = AMIC_ID_NOPREFIX,
993 .model_id = AMIC_A25L020,
994 .total_size = 256,
995 .page_size = 256,
hailfingerdcdadcd2010-09-03 03:32:22 +0000996 .feature_bits = FEATURE_WRSR_WREN,
hailfinger6eb433a2010-07-29 15:00:40 +0000997 .tested = TEST_UNTESTED,
998 .probe = probe_spi_rdid,
999 .probe_timing = TIMING_ZERO,
1000 .block_erasers =
1001 {
1002 {
1003 .eraseblocks = { { 4 * 1024, 64 } },
1004 .block_erase = spi_block_erase_20,
1005 }, {
1006 .eraseblocks = { { 64 * 1024, 4 } },
1007 .block_erase = spi_block_erase_d8,
1008 }, {
1009 .eraseblocks = { { 256 * 1024, 1 } },
1010 .block_erase = spi_block_erase_c7,
1011 }
1012 },
hailfinger7533bc82011-05-19 00:06:06 +00001013 .printlock = spi_prettyprint_status_register_amic_a25l40p,
hailfinger6eb433a2010-07-29 15:00:40 +00001014 .unlock = spi_disable_blockprotect,
1015 .write = spi_chip_write_256,
1016 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001017 .voltage = {2700, 3600},
hailfinger6eb433a2010-07-29 15:00:40 +00001018 },
1019
1020 {
1021 .vendor = "AMIC",
1022 .name = "A25L040",
1023 .bustype = CHIP_BUSTYPE_SPI,
1024 .manufacture_id = AMIC_ID_NOPREFIX,
1025 .model_id = AMIC_A25L040,
1026 .total_size = 512,
1027 .page_size = 256,
hailfingerdcdadcd2010-09-03 03:32:22 +00001028 .feature_bits = FEATURE_WRSR_WREN,
hailfinger6eb433a2010-07-29 15:00:40 +00001029 .tested = TEST_UNTESTED,
1030 .probe = probe_spi_rdid,
1031 .probe_timing = TIMING_ZERO,
1032 .block_erasers =
1033 {
1034 {
1035 .eraseblocks = { { 4 * 1024, 128 } },
1036 .block_erase = spi_block_erase_20,
1037 }, {
1038 .eraseblocks = { { 64 * 1024, 8 } },
1039 .block_erase = spi_block_erase_d8,
1040 }, {
1041 .eraseblocks = { { 512 * 1024, 1 } },
1042 .block_erase = spi_block_erase_c7,
1043 }
1044 },
hailfinger7533bc82011-05-19 00:06:06 +00001045 .printlock = spi_prettyprint_status_register_amic_a25l40p,
hailfinger6eb433a2010-07-29 15:00:40 +00001046 .unlock = spi_disable_blockprotect,
1047 .write = spi_chip_write_256,
1048 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001049 .voltage = {2700, 3600},
hailfinger6eb433a2010-07-29 15:00:40 +00001050 },
1051
1052 {
1053 .vendor = "AMIC",
1054 .name = "A25L080",
1055 .bustype = CHIP_BUSTYPE_SPI,
1056 .manufacture_id = AMIC_ID_NOPREFIX,
1057 .model_id = AMIC_A25L080,
1058 .total_size = 1024,
1059 .page_size = 256,
hailfingerdcdadcd2010-09-03 03:32:22 +00001060 .feature_bits = FEATURE_WRSR_WREN,
hailfinger6eb433a2010-07-29 15:00:40 +00001061 .tested = TEST_UNTESTED,
1062 .probe = probe_spi_rdid,
1063 .probe_timing = TIMING_ZERO,
1064 .block_erasers =
1065 {
1066 {
1067 .eraseblocks = { { 4 * 1024, 256 } },
1068 .block_erase = spi_block_erase_20,
1069 }, {
1070 .eraseblocks = { { 64 * 1024, 16 } },
1071 .block_erase = spi_block_erase_d8,
1072 }, {
1073 .eraseblocks = { { 1024 * 1024, 1 } },
1074 .block_erase = spi_block_erase_c7,
1075 }
1076 },
hailfinger7533bc82011-05-19 00:06:06 +00001077 .printlock = spi_prettyprint_status_register_amic_a25l40p,
hailfinger6eb433a2010-07-29 15:00:40 +00001078 .unlock = spi_disable_blockprotect,
1079 .write = spi_chip_write_256,
1080 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001081 .voltage = {2700, 3600},
hailfinger6eb433a2010-07-29 15:00:40 +00001082 },
1083
1084 {
1085 .vendor = "AMIC",
1086 .name = "A25L016",
1087 .bustype = CHIP_BUSTYPE_SPI,
1088 .manufacture_id = AMIC_ID_NOPREFIX,
1089 .model_id = AMIC_A25L016,
1090 .total_size = 2048,
1091 .page_size = 256,
hailfingerdcdadcd2010-09-03 03:32:22 +00001092 .feature_bits = FEATURE_WRSR_WREN,
hailfinger6eb433a2010-07-29 15:00:40 +00001093 .tested = TEST_UNTESTED,
1094 .probe = probe_spi_rdid,
1095 .probe_timing = TIMING_ZERO,
1096 .block_erasers =
1097 {
1098 {
1099 .eraseblocks = { { 4 * 1024, 512 } },
1100 .block_erase = spi_block_erase_20,
1101 }, {
1102 .eraseblocks = { { 64 * 1024, 32 } },
1103 .block_erase = spi_block_erase_d8,
1104 }, {
1105 .eraseblocks = { { 2048 * 1024, 1 } },
1106 .block_erase = spi_block_erase_c7,
1107 }
1108 },
hailfinger7533bc82011-05-19 00:06:06 +00001109 .printlock = spi_prettyprint_status_register_amic_a25l40p,
hailfinger6eb433a2010-07-29 15:00:40 +00001110 .unlock = spi_disable_blockprotect,
1111 .write = spi_chip_write_256,
1112 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001113 .voltage = {2700, 3600},
hailfinger6eb433a2010-07-29 15:00:40 +00001114 },
1115
1116 {
1117 .vendor = "AMIC",
1118 .name = "A25L032",
1119 .bustype = CHIP_BUSTYPE_SPI,
1120 .manufacture_id = AMIC_ID_NOPREFIX,
1121 .model_id = AMIC_A25L032,
1122 .total_size = 4096,
1123 .page_size = 256,
hailfingerdcdadcd2010-09-03 03:32:22 +00001124 .feature_bits = FEATURE_WRSR_WREN,
hailfinger6eb433a2010-07-29 15:00:40 +00001125 .tested = TEST_UNTESTED,
1126 .probe = probe_spi_rdid,
1127 .probe_timing = TIMING_ZERO,
1128 .block_erasers =
1129 {
1130 {
1131 .eraseblocks = { { 4 * 1024, 1024 } },
1132 .block_erase = spi_block_erase_20,
1133 }, {
1134 .eraseblocks = { { 64 * 1024, 64 } },
1135 .block_erase = spi_block_erase_52,
1136 }, {
1137 .eraseblocks = { { 64 * 1024, 64 } },
1138 .block_erase = spi_block_erase_d8,
1139 }, {
1140 .eraseblocks = { { 4096 * 1024, 1 } },
1141 .block_erase = spi_block_erase_60,
1142 }, {
1143 .eraseblocks = { { 4096 * 1024, 1 } },
1144 .block_erase = spi_block_erase_c7,
1145 }
1146 },
hailfinger7533bc82011-05-19 00:06:06 +00001147 .printlock = spi_prettyprint_status_register_amic_a25l032,
hailfinger6eb433a2010-07-29 15:00:40 +00001148 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
1149 .write = spi_chip_write_256,
1150 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001151 .voltage = {2700, 3600},
hailfinger6eb433a2010-07-29 15:00:40 +00001152 },
1153
1154 {
1155 .vendor = "AMIC",
1156 .name = "A25LQ032",
1157 .bustype = CHIP_BUSTYPE_SPI,
1158 .manufacture_id = AMIC_ID_NOPREFIX,
1159 .model_id = AMIC_A25LQ032,
1160 .total_size = 4096,
1161 .page_size = 256,
hailfingerdcdadcd2010-09-03 03:32:22 +00001162 .feature_bits = FEATURE_WRSR_WREN,
hailfinger6eb433a2010-07-29 15:00:40 +00001163 .tested = TEST_UNTESTED,
1164 .probe = probe_spi_rdid,
1165 .probe_timing = TIMING_ZERO,
1166 .block_erasers =
1167 {
1168 {
1169 .eraseblocks = { { 4 * 1024, 1024 } },
1170 .block_erase = spi_block_erase_20,
1171 }, {
1172 .eraseblocks = { { 64 * 1024, 64 } },
1173 .block_erase = spi_block_erase_52,
1174 }, {
1175 .eraseblocks = { { 64 * 1024, 64 } },
1176 .block_erase = spi_block_erase_d8,
1177 }, {
1178 .eraseblocks = { { 4096 * 1024, 1 } },
1179 .block_erase = spi_block_erase_60,
1180 }, {
1181 .eraseblocks = { { 4096 * 1024, 1 } },
1182 .block_erase = spi_block_erase_c7,
1183 }
1184 },
hailfinger7533bc82011-05-19 00:06:06 +00001185 .printlock = spi_prettyprint_status_register_amic_a25lq032,
hailfinger6eb433a2010-07-29 15:00:40 +00001186 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
1187 .write = spi_chip_write_256,
1188 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001189 .voltage = {2700, 3600},
hailfinger6eb433a2010-07-29 15:00:40 +00001190 },
1191
1192 {
1193 .vendor = "AMIC",
hailfinger61958912010-07-28 22:20:20 +00001194 .name = "A29002B",
1195 .bustype = CHIP_BUSTYPE_PARALLEL,
1196 .manufacture_id = AMIC_ID_NOPREFIX,
1197 .model_id = AMIC_A29002B,
1198 .total_size = 256,
1199 .page_size = 64 * 1024,
1200 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1201 .tested = TEST_UNTESTED,
1202 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +00001203 .probe_timing = TIMING_ZERO,
hailfinger61958912010-07-28 22:20:20 +00001204 .block_erasers =
1205 {
1206 {
1207 .eraseblocks = {
1208 {16 * 1024, 1},
1209 {8 * 1024, 2},
1210 {32 * 1024, 1},
1211 {64 * 1024, 3},
1212 },
1213 .block_erase = erase_sector_jedec,
1214 }, {
1215 .eraseblocks = { {256 * 1024, 1} },
1216 .block_erase = erase_chip_block_jedec,
1217 },
1218 },
1219 .write = write_jedec_1,
1220 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00001221 .voltage = {4500, 5500},
hailfinger61958912010-07-28 22:20:20 +00001222 },
1223
1224 {
1225 .vendor = "AMIC",
1226 .name = "A29002T",
1227 .bustype = CHIP_BUSTYPE_PARALLEL,
1228 .manufacture_id = AMIC_ID_NOPREFIX,
1229 .model_id = AMIC_A29002T,
1230 .total_size = 256,
1231 .page_size = 64 * 1024,
1232 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
hailfingerd217d122010-10-08 18:52:29 +00001233 .tested = TEST_OK_PR,
hailfinger61958912010-07-28 22:20:20 +00001234 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +00001235 .probe_timing = TIMING_ZERO,
hailfinger61958912010-07-28 22:20:20 +00001236 .block_erasers =
1237 {
1238 {
1239 .eraseblocks = {
1240 {64 * 1024, 3},
1241 {32 * 1024, 1},
1242 {8 * 1024, 2},
1243 {16 * 1024, 1},
1244 },
1245 .block_erase = erase_sector_jedec,
1246 }, {
1247 .eraseblocks = { {256 * 1024, 1} },
1248 .block_erase = erase_chip_block_jedec,
1249 },
1250 },
1251 .write = write_jedec_1,
1252 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00001253 .voltage = {4500, 5500},
hailfinger61958912010-07-28 22:20:20 +00001254 },
1255
1256 {
1257 .vendor = "AMIC",
1258 .name = "A29040B",
1259 .bustype = CHIP_BUSTYPE_PARALLEL,
1260 .manufacture_id = AMIC_ID_NOPREFIX,
1261 .model_id = AMIC_A29040B,
1262 .total_size = 512,
1263 .page_size = 64 * 1024,
1264 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1265 .tested = TEST_UNTESTED,
1266 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +00001267 .probe_timing = TIMING_ZERO,
hailfinger61958912010-07-28 22:20:20 +00001268 .block_erasers =
1269 {
1270 {
1271 .eraseblocks = { {64 * 1024, 8} },
1272 .block_erase = erase_sector_jedec,
1273 }, {
1274 .eraseblocks = { {512 * 1024, 1} },
1275 .block_erase = erase_chip_block_jedec,
1276 },
1277 },
1278 .write = write_jedec_1,
1279 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00001280 .voltage = {4500, 5500},
hailfinger61958912010-07-28 22:20:20 +00001281 },
1282
1283 {
1284 .vendor = "AMIC",
1285 .name = "A49LF040A",
1286 .bustype = CHIP_BUSTYPE_LPC,
1287 .manufacture_id = AMIC_ID_NOPREFIX,
1288 .model_id = AMIC_A49LF040A,
1289 .total_size = 512,
1290 .page_size = 64 * 1024,
1291 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00001292 .tested = TEST_OK_PRE,
hailfinger61958912010-07-28 22:20:20 +00001293 .probe = probe_jedec,
1294 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
1295 .block_erasers =
1296 {
1297 {
1298 .eraseblocks = { {64 * 1024, 8} },
1299 .block_erase = erase_block_jedec,
1300 }, {
1301 .eraseblocks = { {512 * 1024, 1} },
1302 .block_erase = erase_chip_block_jedec,
1303 }
1304 },
1305 .unlock = unlock_49fl00x,
1306 .write = write_jedec_1,
1307 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00001308 .voltage = {3000, 3600},
hailfinger61958912010-07-28 22:20:20 +00001309 },
1310
1311 {
hailfinger286829b2009-01-08 03:40:17 +00001312 .vendor = "Atmel",
1313 .name = "AT25DF021",
hailfinger40167462009-05-31 17:57:34 +00001314 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001315 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001316 .model_id = ATMEL_AT25DF021,
hailfinger286829b2009-01-08 03:40:17 +00001317 .total_size = 256,
1318 .page_size = 256,
hailfingerc33d4732010-07-29 13:09:18 +00001319 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001320 .tested = TEST_UNTESTED,
1321 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001322 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001323 .block_erasers =
1324 {
1325 {
1326 .eraseblocks = { {4 * 1024, 64} },
1327 .block_erase = spi_block_erase_20,
1328 }, {
1329 .eraseblocks = { {32 * 1024, 8} },
1330 .block_erase = spi_block_erase_52,
1331 }, {
1332 .eraseblocks = { {64 * 1024, 4} },
1333 .block_erase = spi_block_erase_d8,
1334 }, {
1335 .eraseblocks = { {256 * 1024, 1} },
1336 .block_erase = spi_block_erase_60,
1337 }, {
1338 .eraseblocks = { {256 * 1024, 1} },
1339 .block_erase = spi_block_erase_c7,
1340 }
1341 },
hailfingerc33d4732010-07-29 13:09:18 +00001342 .printlock = spi_prettyprint_status_register_at25df,
1343 .unlock = spi_disable_blockprotect_at25df,
hailfinger87c05482009-05-09 02:34:18 +00001344 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001345 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00001346 .voltage = {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */
stepanaa1b6a22008-12-08 18:15:10 +00001347 },
1348
hailfinger286829b2009-01-08 03:40:17 +00001349 {
1350 .vendor = "Atmel",
1351 .name = "AT25DF041A",
hailfinger40167462009-05-31 17:57:34 +00001352 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001353 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001354 .model_id = ATMEL_AT25DF041A,
hailfinger286829b2009-01-08 03:40:17 +00001355 .total_size = 512,
1356 .page_size = 256,
hailfingerc33d4732010-07-29 13:09:18 +00001357 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001358 .tested = TEST_UNTESTED,
1359 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001360 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001361 .block_erasers =
1362 {
1363 {
1364 .eraseblocks = { {4 * 1024, 128} },
1365 .block_erase = spi_block_erase_20,
1366 }, {
1367 .eraseblocks = { {32 * 1024, 16} },
1368 .block_erase = spi_block_erase_52,
1369 }, {
1370 .eraseblocks = { {64 * 1024, 8} },
1371 .block_erase = spi_block_erase_d8,
1372 }, {
1373 .eraseblocks = { {512 * 1024, 1} },
1374 .block_erase = spi_block_erase_60,
1375 }, {
1376 .eraseblocks = { {512 * 1024, 1} },
1377 .block_erase = spi_block_erase_c7,
1378 }
1379 },
hailfingerc33d4732010-07-29 13:09:18 +00001380 .printlock = spi_prettyprint_status_register_at25df,
1381 .unlock = spi_disable_blockprotect_at25df,
hailfinger87c05482009-05-09 02:34:18 +00001382 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001383 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00001384 .voltage = {2700, 3600}, /* 2.3-3.6V & 2.7-3.6V models available */
stepanaa1b6a22008-12-08 18:15:10 +00001385 },
1386
hailfinger286829b2009-01-08 03:40:17 +00001387 {
1388 .vendor = "Atmel",
1389 .name = "AT25DF081",
hailfinger40167462009-05-31 17:57:34 +00001390 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001391 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001392 .model_id = ATMEL_AT25DF081,
hailfinger286829b2009-01-08 03:40:17 +00001393 .total_size = 1024,
1394 .page_size = 256,
hailfingerc33d4732010-07-29 13:09:18 +00001395 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001396 .tested = TEST_UNTESTED,
1397 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001398 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001399 .block_erasers =
1400 {
1401 {
1402 .eraseblocks = { {4 * 1024, 256} },
1403 .block_erase = spi_block_erase_20,
1404 }, {
1405 .eraseblocks = { {32 * 1024, 32} },
1406 .block_erase = spi_block_erase_52,
1407 }, {
1408 .eraseblocks = { {64 * 1024, 16} },
1409 .block_erase = spi_block_erase_d8,
1410 }, {
1411 .eraseblocks = { {1024 * 1024, 1} },
1412 .block_erase = spi_block_erase_60,
1413 }, {
1414 .eraseblocks = { {1024 * 1024, 1} },
1415 .block_erase = spi_block_erase_c7,
1416 }
1417 },
hailfingerc33d4732010-07-29 13:09:18 +00001418 .printlock = spi_prettyprint_status_register_at25df,
1419 .unlock = spi_disable_blockprotect_at25df,
1420 .write = spi_chip_write_256,
1421 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001422 .voltage = {1600, 2000}, /* Datasheet says range is 1.65-1.95 V */
hailfingerc33d4732010-07-29 13:09:18 +00001423 },
1424
1425 {
1426 .vendor = "Atmel",
1427 .name = "AT25DF081A",
1428 .bustype = CHIP_BUSTYPE_SPI,
1429 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001430 .model_id = ATMEL_AT25DF081A,
hailfingerc33d4732010-07-29 13:09:18 +00001431 .total_size = 1024,
1432 .page_size = 256,
1433 .feature_bits = FEATURE_WRSR_WREN,
1434 .tested = TEST_UNTESTED,
1435 .probe = probe_spi_rdid,
1436 .probe_timing = TIMING_ZERO,
1437 .block_erasers =
1438 {
1439 {
1440 .eraseblocks = { {4 * 1024, 256} },
1441 .block_erase = spi_block_erase_20,
1442 }, {
1443 .eraseblocks = { {32 * 1024, 32} },
1444 .block_erase = spi_block_erase_52,
1445 }, {
1446 .eraseblocks = { {64 * 1024, 16} },
1447 .block_erase = spi_block_erase_d8,
1448 }, {
1449 .eraseblocks = { {1024 * 1024, 1} },
1450 .block_erase = spi_block_erase_60,
1451 }, {
1452 .eraseblocks = { {1024 * 1024, 1} },
1453 .block_erase = spi_block_erase_c7,
1454 }
1455 },
1456 .printlock = spi_prettyprint_status_register_at25df_sec,
1457 .unlock = spi_disable_blockprotect_at25df_sec,
hailfinger87c05482009-05-09 02:34:18 +00001458 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001459 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00001460 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001461 },
1462
hailfinger286829b2009-01-08 03:40:17 +00001463 {
1464 .vendor = "Atmel",
1465 .name = "AT25DF161",
hailfinger40167462009-05-31 17:57:34 +00001466 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001467 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001468 .model_id = ATMEL_AT25DF161,
hailfinger286829b2009-01-08 03:40:17 +00001469 .total_size = 2048,
1470 .page_size = 256,
hailfingerc33d4732010-07-29 13:09:18 +00001471 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001472 .tested = TEST_UNTESTED,
1473 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001474 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001475 .block_erasers =
1476 {
1477 {
1478 .eraseblocks = { {4 * 1024, 512} },
1479 .block_erase = spi_block_erase_20,
1480 }, {
1481 .eraseblocks = { {32 * 1024, 64} },
1482 .block_erase = spi_block_erase_52,
1483 }, {
1484 .eraseblocks = { {64 * 1024, 32} },
1485 .block_erase = spi_block_erase_d8,
1486 }, {
1487 .eraseblocks = { {2 * 1024 * 1024, 1} },
1488 .block_erase = spi_block_erase_60,
1489 }, {
1490 .eraseblocks = { {2 * 1024 * 1024, 1} },
1491 .block_erase = spi_block_erase_c7,
1492 }
1493 },
hailfingerc33d4732010-07-29 13:09:18 +00001494 .printlock = spi_prettyprint_status_register_at25df_sec,
1495 .unlock = spi_disable_blockprotect_at25df_sec,
hailfinger87c05482009-05-09 02:34:18 +00001496 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001497 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001498 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001499 },
1500
hailfinger286829b2009-01-08 03:40:17 +00001501 {
1502 .vendor = "Atmel",
1503 .name = "AT25DF321",
hailfinger40167462009-05-31 17:57:34 +00001504 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001505 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001506 .model_id = ATMEL_AT25DF321,
hailfinger286829b2009-01-08 03:40:17 +00001507 .total_size = 4096,
1508 .page_size = 256,
hailfingerc33d4732010-07-29 13:09:18 +00001509 .feature_bits = FEATURE_WRSR_WREN,
David Hendricksc801adb2010-12-09 16:58:56 -08001510 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00001511 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001512 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001513 .block_erasers =
1514 {
1515 {
1516 .eraseblocks = { {4 * 1024, 1024} },
1517 .block_erase = spi_block_erase_20,
1518 }, {
1519 .eraseblocks = { {32 * 1024, 128} },
1520 .block_erase = spi_block_erase_52,
1521 }, {
1522 .eraseblocks = { {64 * 1024, 64} },
1523 .block_erase = spi_block_erase_d8,
1524 }, {
1525 .eraseblocks = { {4 * 1024 * 1024, 1} },
1526 .block_erase = spi_block_erase_60,
1527 }, {
1528 .eraseblocks = { {4 * 1024 * 1024, 1} },
1529 .block_erase = spi_block_erase_c7,
1530 }
1531 },
hailfingerc33d4732010-07-29 13:09:18 +00001532 .printlock = spi_prettyprint_status_register_at25df,
1533 .unlock = spi_disable_blockprotect_at25df,
hailfinger87c05482009-05-09 02:34:18 +00001534 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001535 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001536 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001537 },
1538
hailfinger286829b2009-01-08 03:40:17 +00001539 {
1540 .vendor = "Atmel",
1541 .name = "AT25DF321A",
hailfinger40167462009-05-31 17:57:34 +00001542 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001543 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001544 .model_id = ATMEL_AT25DF321A,
hailfinger286829b2009-01-08 03:40:17 +00001545 .total_size = 4096,
1546 .page_size = 256,
hailfingerc33d4732010-07-29 13:09:18 +00001547 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001548 .tested = TEST_UNTESTED,
1549 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001550 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001551 .block_erasers =
1552 {
1553 {
1554 .eraseblocks = { {4 * 1024, 1024} },
1555 .block_erase = spi_block_erase_20,
1556 }, {
1557 .eraseblocks = { {32 * 1024, 128} },
1558 .block_erase = spi_block_erase_52,
1559 }, {
1560 .eraseblocks = { {64 * 1024, 64} },
1561 .block_erase = spi_block_erase_d8,
1562 }, {
1563 .eraseblocks = { {4 * 1024 * 1024, 1} },
1564 .block_erase = spi_block_erase_60,
1565 }, {
1566 .eraseblocks = { {4 * 1024 * 1024, 1} },
1567 .block_erase = spi_block_erase_c7,
1568 }
1569 },
hailfingerc33d4732010-07-29 13:09:18 +00001570 .printlock = spi_prettyprint_status_register_at25df_sec,
1571 .unlock = spi_disable_blockprotect_at25df_sec,
hailfinger87c05482009-05-09 02:34:18 +00001572 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001573 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001574 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001575 },
1576
hailfinger286829b2009-01-08 03:40:17 +00001577 {
1578 .vendor = "Atmel",
1579 .name = "AT25DF641",
hailfinger40167462009-05-31 17:57:34 +00001580 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001581 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001582 .model_id = ATMEL_AT25DF641,
hailfinger286829b2009-01-08 03:40:17 +00001583 .total_size = 8192,
1584 .page_size = 256,
hailfingerc33d4732010-07-29 13:09:18 +00001585 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001586 .tested = TEST_UNTESTED,
1587 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001588 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001589 .block_erasers =
1590 {
1591 {
1592 .eraseblocks = { {4 * 1024, 2048} },
1593 .block_erase = spi_block_erase_20,
1594 }, {
1595 .eraseblocks = { {32 * 1024, 256} },
1596 .block_erase = spi_block_erase_52,
1597 }, {
1598 .eraseblocks = { {64 * 1024, 128} },
1599 .block_erase = spi_block_erase_d8,
1600 }, {
1601 .eraseblocks = { {8 * 1024 * 1024, 1} },
1602 .block_erase = spi_block_erase_60,
1603 }, {
1604 .eraseblocks = { {8 * 1024 * 1024, 1} },
1605 .block_erase = spi_block_erase_c7,
1606 }
1607 },
hailfingerc33d4732010-07-29 13:09:18 +00001608 .printlock = spi_prettyprint_status_register_at25df_sec,
1609 .unlock = spi_disable_blockprotect_at25df_sec,
1610 .write = spi_chip_write_256,
1611 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001612 .voltage = {2700, 3600},
hailfingerc33d4732010-07-29 13:09:18 +00001613 },
1614
1615 {
1616 .vendor = "Atmel",
1617 .name = "AT25DQ161",
1618 .bustype = CHIP_BUSTYPE_SPI,
1619 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001620 .model_id = ATMEL_AT25DQ161,
hailfingerc33d4732010-07-29 13:09:18 +00001621 .total_size = 2048,
1622 .page_size = 256,
1623 .feature_bits = FEATURE_WRSR_WREN,
1624 .tested = TEST_UNTESTED,
1625 .probe = probe_spi_rdid,
1626 .probe_timing = TIMING_ZERO,
1627 .block_erasers =
1628 {
1629 {
1630 .eraseblocks = { {4 * 1024, 512} },
1631 .block_erase = spi_block_erase_20,
1632 }, {
1633 .eraseblocks = { {32 * 1024, 64} },
1634 .block_erase = spi_block_erase_52,
1635 }, {
1636 .eraseblocks = { {64 * 1024, 32} },
1637 .block_erase = spi_block_erase_d8,
1638 }, {
1639 .eraseblocks = { {2 * 1024 * 1024, 1} },
1640 .block_erase = spi_block_erase_60,
1641 }, {
1642 .eraseblocks = { {2 * 1024 * 1024, 1} },
1643 .block_erase = spi_block_erase_c7,
1644 }
1645 },
1646 .printlock = spi_prettyprint_status_register_at25df_sec,
1647 .unlock = spi_disable_blockprotect_at25df_sec,
hailfinger87c05482009-05-09 02:34:18 +00001648 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001649 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001650 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001651 },
1652
hailfinger286829b2009-01-08 03:40:17 +00001653 {
1654 .vendor = "Atmel",
1655 .name = "AT25F512B",
hailfinger40167462009-05-31 17:57:34 +00001656 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001657 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001658 .model_id = ATMEL_AT25F512B,
hailfinger286829b2009-01-08 03:40:17 +00001659 .total_size = 64,
1660 .page_size = 256,
hailfingerc33d4732010-07-29 13:09:18 +00001661 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001662 .tested = TEST_UNTESTED,
1663 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001664 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001665 .block_erasers =
1666 {
1667 {
1668 .eraseblocks = { {4 * 1024, 16} },
1669 .block_erase = spi_block_erase_20,
1670 }, {
1671 .eraseblocks = { {32 * 1024, 2} },
1672 .block_erase = spi_block_erase_52,
1673 }, {
1674 .eraseblocks = { {32 * 1024, 2} },
1675 .block_erase = spi_block_erase_d8,
1676 }, {
1677 .eraseblocks = { {64 * 1024, 1} },
1678 .block_erase = spi_block_erase_60,
1679 }, {
1680 .eraseblocks = { {64 * 1024, 1} },
1681 .block_erase = spi_block_erase_c7,
1682 }
1683 },
hailfingerc33d4732010-07-29 13:09:18 +00001684 .printlock = spi_prettyprint_status_register_at25f,
1685 .unlock = spi_disable_blockprotect_at25f,
hailfinger87c05482009-05-09 02:34:18 +00001686 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001687 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001688 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001689 },
1690
hailfinger286829b2009-01-08 03:40:17 +00001691 {
1692 .vendor = "Atmel",
1693 .name = "AT25FS010",
hailfinger40167462009-05-31 17:57:34 +00001694 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001695 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001696 .model_id = ATMEL_AT25FS010,
hailfinger286829b2009-01-08 03:40:17 +00001697 .total_size = 128,
1698 .page_size = 256,
1699 .tested = TEST_UNTESTED,
1700 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001701 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001702 .block_erasers =
1703 {
1704 {
1705 .eraseblocks = { {4 * 1024, 32} },
1706 .block_erase = spi_block_erase_20,
1707 }, {
hailfingerc33d4732010-07-29 13:09:18 +00001708 .eraseblocks = { {4 * 1024, 32} },
1709 .block_erase = spi_block_erase_d7,
1710 }, {
hailfinger22155a82009-12-23 12:02:55 +00001711 .eraseblocks = { {32 * 1024, 4} },
1712 .block_erase = spi_block_erase_52,
1713 }, {
1714 .eraseblocks = { {32 * 1024, 4} },
1715 .block_erase = spi_block_erase_d8,
1716 }, {
1717 .eraseblocks = { {128 * 1024, 1} },
1718 .block_erase = spi_block_erase_60,
1719 }, {
1720 .eraseblocks = { {128 * 1024, 1} },
1721 .block_erase = spi_block_erase_c7,
1722 }
1723 },
hailfingerc33d4732010-07-29 13:09:18 +00001724 .printlock = spi_prettyprint_status_register_at25fs010,
1725 .unlock = spi_disable_blockprotect_at25fs010,
hailfinger87c05482009-05-09 02:34:18 +00001726 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001727 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001728 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001729 },
1730
hailfinger286829b2009-01-08 03:40:17 +00001731 {
1732 .vendor = "Atmel",
1733 .name = "AT25FS040",
hailfinger40167462009-05-31 17:57:34 +00001734 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001735 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001736 .model_id = ATMEL_AT25FS040,
hailfinger286829b2009-01-08 03:40:17 +00001737 .total_size = 512,
1738 .page_size = 256,
1739 .tested = TEST_UNTESTED,
1740 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001741 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001742 .block_erasers =
1743 {
1744 {
1745 .eraseblocks = { {4 * 1024, 128} },
1746 .block_erase = spi_block_erase_20,
1747 }, {
1748 .eraseblocks = { {64 * 1024, 8} },
1749 .block_erase = spi_block_erase_52,
1750 }, {
1751 .eraseblocks = { {64 * 1024, 8} },
1752 .block_erase = spi_block_erase_d8,
1753 }, {
1754 .eraseblocks = { {512 * 1024, 1} },
1755 .block_erase = spi_block_erase_60,
1756 }, {
1757 .eraseblocks = { {512 * 1024, 1} },
1758 .block_erase = spi_block_erase_c7,
1759 }
1760 },
hailfingerc33d4732010-07-29 13:09:18 +00001761 .printlock = spi_prettyprint_status_register_at25fs040,
1762 .unlock = spi_disable_blockprotect_at25fs040,
hailfinger87c05482009-05-09 02:34:18 +00001763 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001764 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001765 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001766 },
1767
hailfinger286829b2009-01-08 03:40:17 +00001768 {
1769 .vendor = "Atmel",
1770 .name = "AT26DF041",
hailfinger40167462009-05-31 17:57:34 +00001771 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001772 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001773 .model_id = ATMEL_AT26DF041,
hailfinger286829b2009-01-08 03:40:17 +00001774 .total_size = 512,
1775 .page_size = 256,
1776 .tested = TEST_UNTESTED,
1777 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001778 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001779 .block_erasers =
1780 {
1781 {
1782 .eraseblocks = { {4 * 1024, 128} },
1783 .block_erase = spi_block_erase_20,
1784 }
1785 },
hailfinger286829b2009-01-08 03:40:17 +00001786 .write = NULL /* Incompatible Page write */,
1787 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00001788 .voltage = {2700, 3600}, /* 3.0-3.6V for higher speed, 2.7-3.6V normal */
stepanaa1b6a22008-12-08 18:15:10 +00001789 },
1790
hailfinger286829b2009-01-08 03:40:17 +00001791 {
1792 .vendor = "Atmel",
1793 .name = "AT26DF081A",
hailfinger40167462009-05-31 17:57:34 +00001794 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001795 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001796 .model_id = ATMEL_AT26DF081A,
hailfinger286829b2009-01-08 03:40:17 +00001797 .total_size = 1024,
1798 .page_size = 256,
krause9d38a2f2011-01-17 07:45:54 +00001799 .feature_bits = FEATURE_WRSR_WREN,
1800 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00001801 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001802 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001803 .block_erasers =
1804 {
1805 {
1806 .eraseblocks = { {4 * 1024, 256} },
1807 .block_erase = spi_block_erase_20,
1808 }, {
1809 .eraseblocks = { {32 * 1024, 32} },
1810 .block_erase = spi_block_erase_52,
1811 }, {
1812 .eraseblocks = { {64 * 1024, 16} },
1813 .block_erase = spi_block_erase_d8,
1814 }, {
1815 .eraseblocks = { {1024 * 1024, 1} },
1816 .block_erase = spi_block_erase_60,
1817 }, {
1818 .eraseblocks = { {1024 * 1024, 1} },
1819 .block_erase = spi_block_erase_c7,
1820 }
1821 },
hailfinger7533bc82011-05-19 00:06:06 +00001822 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
krause9d38a2f2011-01-17 07:45:54 +00001823 .unlock = spi_disable_blockprotect_at25df,
hailfinger87c05482009-05-09 02:34:18 +00001824 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001825 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001826 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001827 },
1828
hailfinger286829b2009-01-08 03:40:17 +00001829 {
1830 .vendor = "Atmel",
1831 .name = "AT26DF161",
hailfinger40167462009-05-31 17:57:34 +00001832 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001833 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001834 .model_id = ATMEL_AT26DF161,
hailfinger286829b2009-01-08 03:40:17 +00001835 .total_size = 2048,
1836 .page_size = 256,
1837 .tested = TEST_UNTESTED,
1838 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001839 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001840 .block_erasers =
1841 {
1842 {
1843 .eraseblocks = { {4 * 1024, 512} },
1844 .block_erase = spi_block_erase_20,
1845 }, {
1846 .eraseblocks = { {32 * 1024, 64} },
1847 .block_erase = spi_block_erase_52,
1848 }, {
1849 .eraseblocks = { {64 * 1024, 32} },
1850 .block_erase = spi_block_erase_d8,
1851 }, {
1852 .eraseblocks = { {2 * 1024 * 1024, 1} },
1853 .block_erase = spi_block_erase_60,
1854 }, {
1855 .eraseblocks = { {2 * 1024 * 1024, 1} },
1856 .block_erase = spi_block_erase_c7,
1857 }
1858 },
hailfinger7533bc82011-05-19 00:06:06 +00001859 .printlock = spi_prettyprint_status_register_at25df,
hailfingerb9560ee2010-07-14 20:21:22 +00001860 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00001861 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001862 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001863 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001864 },
1865
hailfinger286829b2009-01-08 03:40:17 +00001866 {
1867 .vendor = "Atmel",
1868 .name = "AT26DF161A",
hailfinger40167462009-05-31 17:57:34 +00001869 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001870 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001871 .model_id = ATMEL_AT26DF161A,
hailfinger286829b2009-01-08 03:40:17 +00001872 .total_size = 2048,
1873 .page_size = 256,
1874 .tested = TEST_UNTESTED,
1875 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001876 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001877 .block_erasers =
1878 {
1879 {
1880 .eraseblocks = { {4 * 1024, 512} },
1881 .block_erase = spi_block_erase_20,
1882 }, {
1883 .eraseblocks = { {32 * 1024, 64} },
1884 .block_erase = spi_block_erase_52,
1885 }, {
1886 .eraseblocks = { {64 * 1024, 32} },
1887 .block_erase = spi_block_erase_d8,
1888 }, {
1889 .eraseblocks = { {2 * 1024 * 1024, 1} },
1890 .block_erase = spi_block_erase_60,
1891 }, {
1892 .eraseblocks = { {2 * 1024 * 1024, 1} },
1893 .block_erase = spi_block_erase_c7,
1894 }
1895 },
hailfinger7533bc82011-05-19 00:06:06 +00001896 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
hailfingerb9560ee2010-07-14 20:21:22 +00001897 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00001898 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001899 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001900 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001901 },
1902
1903 /*The AT26DF321 has the same ID as the AT25DF321. */
hailfinger286829b2009-01-08 03:40:17 +00001904 /*{
1905 .vendor = "Atmel",
1906 .name = "AT26DF321",
hailfinger40167462009-05-31 17:57:34 +00001907 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001908 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001909 .model_id = ATMEL_AT26DF321,
hailfinger286829b2009-01-08 03:40:17 +00001910 .total_size = 4096,
1911 .page_size = 256,
1912 .tested = TEST_UNTESTED,
1913 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001914 .probe_timing = TIMING_ZERO,
hailfinger7533bc82011-05-19 00:06:06 +00001915 .printlock = spi_prettyprint_status_register_atmel_at26df081a,
hailfingerb9560ee2010-07-14 20:21:22 +00001916 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00001917 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001918 .read = spi_chip_read,
1919 },*/
stepanaa1b6a22008-12-08 18:15:10 +00001920
hailfinger286829b2009-01-08 03:40:17 +00001921 {
1922 .vendor = "Atmel",
1923 .name = "AT26F004",
hailfinger40167462009-05-31 17:57:34 +00001924 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001925 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001926 .model_id = ATMEL_AT26F004,
hailfinger286829b2009-01-08 03:40:17 +00001927 .total_size = 512,
1928 .page_size = 256,
1929 .tested = TEST_UNTESTED,
1930 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001931 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001932 .block_erasers =
1933 {
1934 {
1935 .eraseblocks = { {4 * 1024, 128} },
1936 .block_erase = spi_block_erase_20,
1937 }, {
1938 .eraseblocks = { {32 * 1024, 16} },
1939 .block_erase = spi_block_erase_52,
1940 }, {
1941 .eraseblocks = { {64 * 1024, 8} },
1942 .block_erase = spi_block_erase_d8,
1943 }, {
1944 .eraseblocks = { {512 * 1024, 1} },
1945 .block_erase = spi_block_erase_60,
1946 }, {
1947 .eraseblocks = { {512 * 1024, 1} },
1948 .block_erase = spi_block_erase_c7,
1949 }
1950 },
hailfinger286829b2009-01-08 03:40:17 +00001951 .write = NULL /* Incompatible Page write */,
1952 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00001953 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00001954 },
1955
hailfinger286829b2009-01-08 03:40:17 +00001956 {
1957 .vendor = "Atmel",
uwed75c4f52009-06-02 16:45:59 +00001958 .name = "AT29C512",
hailfingera5245512009-06-28 19:19:25 +00001959 .bustype = CHIP_BUSTYPE_PARALLEL,
uwed75c4f52009-06-02 16:45:59 +00001960 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001961 .model_id = ATMEL_AT29C512,
uwed75c4f52009-06-02 16:45:59 +00001962 .total_size = 64,
1963 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00001964 .feature_bits = FEATURE_LONG_RESET,
1965 .tested = TEST_UNTESTED,
hailfingerafac00e2010-01-09 02:24:17 +00001966 .probe = probe_jedec,
hailfingerd5b35922009-06-03 14:46:22 +00001967 .probe_timing = 10000, /* 10mS, Enter=Exec */
hailfinger22155a82009-12-23 12:02:55 +00001968 .block_erasers =
1969 {
1970 {
1971 .eraseblocks = { {64 * 1024, 1} },
1972 .block_erase = erase_chip_block_jedec,
1973 }
1974 },
uwed75c4f52009-06-02 16:45:59 +00001975 .write = write_jedec,
1976 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00001977 .voltage = {4500, 5500},
uwed75c4f52009-06-02 16:45:59 +00001978 },
1979
1980 {
1981 .vendor = "Atmel",
uweb3a82ef2009-05-16 21:39:19 +00001982 .name = "AT29C010A",
hailfingerdaecf7e2009-06-05 08:47:37 +00001983 .bustype = CHIP_BUSTYPE_PARALLEL,
uweb3a82ef2009-05-16 21:39:19 +00001984 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00001985 .model_id = ATMEL_AT29C010A,
uweb3a82ef2009-05-16 21:39:19 +00001986 .total_size = 128,
1987 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00001988 .feature_bits = FEATURE_LONG_RESET,
hailfingerd217d122010-10-08 18:52:29 +00001989 .tested = TEST_OK_PRE,
uweb3a82ef2009-05-16 21:39:19 +00001990 .probe = probe_jedec,
hailfingerd5b35922009-06-03 14:46:22 +00001991 .probe_timing = 10000, /* 10mS, Enter=Exec */
hailfinger22155a82009-12-23 12:02:55 +00001992 .block_erasers =
1993 {
1994 {
1995 .eraseblocks = { {128 * 1024, 1} },
1996 .block_erase = erase_chip_block_jedec,
1997 }
1998 },
uweb3a82ef2009-05-16 21:39:19 +00001999 .write = write_jedec, /* FIXME */
2000 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00002001 .voltage = {4500, 5500},
uweb3a82ef2009-05-16 21:39:19 +00002002 },
2003
2004 {
2005 .vendor = "Atmel",
hailfinger286829b2009-01-08 03:40:17 +00002006 .name = "AT29C020",
hailfingerdaecf7e2009-06-05 08:47:37 +00002007 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00002008 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002009 .model_id = ATMEL_AT29C020,
hailfinger286829b2009-01-08 03:40:17 +00002010 .total_size = 256,
2011 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00002012 .feature_bits = FEATURE_LONG_RESET,
2013 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00002014 .probe = probe_jedec,
uwe81d75ab2010-09-05 12:41:25 +00002015 .probe_timing = 10000, /* 10ms */
hailfinger22155a82009-12-23 12:02:55 +00002016 .block_erasers =
2017 {
2018 {
2019 .eraseblocks = { {256 * 1024, 1} },
2020 .block_erase = erase_chip_block_jedec,
2021 }
2022 },
hailfinger286829b2009-01-08 03:40:17 +00002023 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00002024 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00002025 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00002026 },
2027
hailfinger286829b2009-01-08 03:40:17 +00002028 {
2029 .vendor = "Atmel",
2030 .name = "AT29C040A",
hailfingerdaecf7e2009-06-05 08:47:37 +00002031 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00002032 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002033 .model_id = ATMEL_AT29C040A,
hailfinger286829b2009-01-08 03:40:17 +00002034 .total_size = 512,
2035 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00002036 .feature_bits = FEATURE_LONG_RESET,
hailfinger286829b2009-01-08 03:40:17 +00002037 .tested = TEST_UNTESTED,
2038 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00002039 .probe_timing = 10000, /* 10 ms */
hailfinger22155a82009-12-23 12:02:55 +00002040 .block_erasers =
2041 {
2042 {
2043 .eraseblocks = { {512 * 1024, 1} },
2044 .block_erase = erase_chip_block_jedec,
2045 }
2046 },
hailfinger286829b2009-01-08 03:40:17 +00002047 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00002048 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00002049 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00002050 },
2051
hailfinger286829b2009-01-08 03:40:17 +00002052 {
2053 .vendor = "Atmel",
2054 .name = "AT45CS1282",
hailfinger40167462009-05-31 17:57:34 +00002055 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00002056 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002057 .model_id = ATMEL_AT45CS1282,
hailfingerf60abdb2009-03-19 12:18:13 +00002058 .total_size = 16896 /* No power of two sizes */,
2059 .page_size = 1056 /* No power of two sizes */,
hailfinger286829b2009-01-08 03:40:17 +00002060 .tested = TEST_BAD_READ,
2061 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00002062 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00002063 .write = NULL /* Incompatible Page write */,
2064 .read = NULL /* Incompatible read */,
stefanct7e00e222011-06-03 07:26:31 +00002065 .voltage = {2700, 3600},
hailfingerf60abdb2009-03-19 12:18:13 +00002066 },
stepanaa1b6a22008-12-08 18:15:10 +00002067
hailfinger286829b2009-01-08 03:40:17 +00002068 {
2069 .vendor = "Atmel",
2070 .name = "AT45DB011D",
hailfinger40167462009-05-31 17:57:34 +00002071 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00002072 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002073 .model_id = ATMEL_AT45DB011D,
hailfingerf60abdb2009-03-19 12:18:13 +00002074 .total_size = 128 /* Size can only be determined from status register */,
2075 .page_size = 256 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00002076 .tested = TEST_BAD_READ,
2077 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00002078 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00002079 .write = NULL,
2080 .read = NULL,
stefanct7e00e222011-06-03 07:26:31 +00002081 .voltage = {2700, 3600},
hailfingerf60abdb2009-03-19 12:18:13 +00002082 },
stepanaa1b6a22008-12-08 18:15:10 +00002083
hailfinger286829b2009-01-08 03:40:17 +00002084 {
2085 .vendor = "Atmel",
2086 .name = "AT45DB021D",
hailfinger40167462009-05-31 17:57:34 +00002087 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00002088 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002089 .model_id = ATMEL_AT45DB021D,
hailfingerf60abdb2009-03-19 12:18:13 +00002090 .total_size = 256 /* Size can only be determined from status register */,
2091 .page_size = 256 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00002092 .tested = TEST_BAD_READ,
2093 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00002094 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00002095 .write = NULL,
2096 .read = NULL,
stefanct7e00e222011-06-03 07:26:31 +00002097 .voltage = {2700, 3600},
hailfingerf60abdb2009-03-19 12:18:13 +00002098 },
stepanaa1b6a22008-12-08 18:15:10 +00002099
hailfinger286829b2009-01-08 03:40:17 +00002100 {
2101 .vendor = "Atmel",
2102 .name = "AT45DB041D",
hailfinger40167462009-05-31 17:57:34 +00002103 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00002104 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002105 .model_id = ATMEL_AT45DB041D,
hailfingerf60abdb2009-03-19 12:18:13 +00002106 .total_size = 512 /* Size can only be determined from status register */,
2107 .page_size = 256 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00002108 .tested = TEST_BAD_READ,
2109 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00002110 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00002111 .write = NULL,
2112 .read = NULL,
stefanct66c8c1b2011-07-19 08:50:18 +00002113 .voltage = {2500, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
hailfingerf60abdb2009-03-19 12:18:13 +00002114 },
stepanaa1b6a22008-12-08 18:15:10 +00002115
hailfinger286829b2009-01-08 03:40:17 +00002116 {
2117 .vendor = "Atmel",
2118 .name = "AT45DB081D",
hailfinger40167462009-05-31 17:57:34 +00002119 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00002120 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002121 .model_id = ATMEL_AT45DB081D,
hailfingerf60abdb2009-03-19 12:18:13 +00002122 .total_size = 1024 /* Size can only be determined from status register */,
2123 .page_size = 256 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00002124 .tested = TEST_BAD_READ,
2125 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00002126 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00002127 .write = NULL,
2128 .read = NULL,
stefanct66c8c1b2011-07-19 08:50:18 +00002129 .voltage = {2700, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
hailfingerf60abdb2009-03-19 12:18:13 +00002130 },
stepanaa1b6a22008-12-08 18:15:10 +00002131
hailfinger286829b2009-01-08 03:40:17 +00002132 {
2133 .vendor = "Atmel",
2134 .name = "AT45DB161D",
hailfinger40167462009-05-31 17:57:34 +00002135 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00002136 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002137 .model_id = ATMEL_AT45DB161D,
hailfingerf60abdb2009-03-19 12:18:13 +00002138 .total_size = 2048 /* Size can only be determined from status register */,
2139 .page_size = 512 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00002140 .tested = TEST_BAD_READ,
2141 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00002142 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00002143 .write = NULL,
2144 .read = NULL,
stefanct66c8c1b2011-07-19 08:50:18 +00002145 .voltage = {2700, 3600}, /* 2.5-3.6V & 2.7-3.6V models available */
hailfingerf60abdb2009-03-19 12:18:13 +00002146 },
stepanaa1b6a22008-12-08 18:15:10 +00002147
hailfinger286829b2009-01-08 03:40:17 +00002148 {
2149 .vendor = "Atmel",
2150 .name = "AT45DB321C",
hailfinger40167462009-05-31 17:57:34 +00002151 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00002152 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002153 .model_id = ATMEL_AT45DB321C,
hailfingerf60abdb2009-03-19 12:18:13 +00002154 .total_size = 4224 /* No power of two sizes */,
2155 .page_size = 528 /* No power of two sizes */,
hailfinger286829b2009-01-08 03:40:17 +00002156 .tested = TEST_BAD_READ,
2157 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00002158 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00002159 .write = NULL,
2160 .read = NULL /* Incompatible read */,
stefanct7e00e222011-06-03 07:26:31 +00002161 .voltage = {2700, 3600},
hailfingerf60abdb2009-03-19 12:18:13 +00002162 },
stepanaa1b6a22008-12-08 18:15:10 +00002163
hailfinger286829b2009-01-08 03:40:17 +00002164 {
2165 .vendor = "Atmel",
2166 .name = "AT45DB321D",
hailfinger40167462009-05-31 17:57:34 +00002167 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00002168 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002169 .model_id = ATMEL_AT45DB321D,
hailfingerf60abdb2009-03-19 12:18:13 +00002170 .total_size = 4096 /* Size can only be determined from status register */,
2171 .page_size = 512 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00002172 .tested = TEST_BAD_READ,
2173 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00002174 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00002175 .write = NULL,
2176 .read = NULL,
stefanct7e00e222011-06-03 07:26:31 +00002177 .voltage = {2700, 3600},
hailfingerf60abdb2009-03-19 12:18:13 +00002178 },
stepanaa1b6a22008-12-08 18:15:10 +00002179
hailfinger286829b2009-01-08 03:40:17 +00002180 {
2181 .vendor = "Atmel",
2182 .name = "AT45DB642D",
hailfinger40167462009-05-31 17:57:34 +00002183 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00002184 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002185 .model_id = ATMEL_AT45DB642D,
hailfingerf60abdb2009-03-19 12:18:13 +00002186 .total_size = 8192 /* Size can only be determined from status register */,
2187 .page_size = 1024 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00002188 .tested = TEST_BAD_READ,
2189 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00002190 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00002191 .write = NULL,
2192 .read = NULL,
stefanct7e00e222011-06-03 07:26:31 +00002193 .voltage = {2700, 3600},
hailfingerf60abdb2009-03-19 12:18:13 +00002194 },
stepanaa1b6a22008-12-08 18:15:10 +00002195
hailfinger286829b2009-01-08 03:40:17 +00002196 {
2197 .vendor = "Atmel",
uwe0f5a3a22009-05-13 11:36:06 +00002198 .name = "AT49BV512",
hailfingerdaecf7e2009-06-05 08:47:37 +00002199 .bustype = CHIP_BUSTYPE_PARALLEL,
uwe0f5a3a22009-05-13 11:36:06 +00002200 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002201 .model_id = ATMEL_AT49BV512,
uwe0f5a3a22009-05-13 11:36:06 +00002202 .total_size = 64,
2203 .page_size = 64,
snelsonc6855342010-01-28 23:55:12 +00002204 .feature_bits = FEATURE_EITHER_RESET,
stefanct896d61e2011-06-04 13:13:34 +00002205 .tested = TEST_OK_PREW,
uwe0f5a3a22009-05-13 11:36:06 +00002206 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00002207 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
hailfinger22155a82009-12-23 12:02:55 +00002208 .block_erasers =
2209 {
2210 {
2211 .eraseblocks = { {64 * 1024, 1} },
2212 .block_erase = erase_chip_block_jedec,
2213 }
2214 },
snelsonc6855342010-01-28 23:55:12 +00002215 .write = write_jedec_1,
uwe0f5a3a22009-05-13 11:36:06 +00002216 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00002217 .voltage = {2700, 3600},
uwe0f5a3a22009-05-13 11:36:06 +00002218 },
2219
2220 {
2221 .vendor = "Atmel",
hailfinger93f8ce22010-06-07 14:10:55 +00002222 .name = "AT49F020",
2223 .bustype = CHIP_BUSTYPE_PARALLEL,
2224 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002225 .model_id = ATMEL_AT49F020,
hailfinger93f8ce22010-06-07 14:10:55 +00002226 .total_size = 256,
2227 .page_size = 256,
2228 .feature_bits = FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00002229 .tested = TEST_OK_PRE,
hailfinger93f8ce22010-06-07 14:10:55 +00002230 .probe = probe_jedec,
2231 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2232 .block_erasers =
2233 {
2234 {
2235 .eraseblocks = { {256 * 1024, 1} },
2236 .block_erase = erase_chip_block_jedec,
2237 }
2238 },
2239 .write = write_jedec_1,
2240 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00002241 .voltage = {4500, 5500},
hailfinger93f8ce22010-06-07 14:10:55 +00002242 },
2243
2244 {
2245 .vendor = "Atmel",
hailfinger286829b2009-01-08 03:40:17 +00002246 .name = "AT49F002(N)",
hailfingerdaecf7e2009-06-05 08:47:37 +00002247 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00002248 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002249 .model_id = ATMEL_AT49F002N,
hailfinger286829b2009-01-08 03:40:17 +00002250 .total_size = 256,
2251 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00002252 .feature_bits = FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00002253 .tested = TEST_UNTESTED,
2254 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00002255 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
hailfinger22155a82009-12-23 12:02:55 +00002256 .block_erasers =
2257 {
2258 {
2259 .eraseblocks = {
2260 {16 * 1024, 1},
2261 {8 * 1024, 2},
2262 {96 * 1024, 1},
2263 {128 * 1024, 1},
2264 },
2265 .block_erase = erase_sector_jedec,
2266 }, {
2267 .eraseblocks = { {256 * 1024, 1} },
2268 .block_erase = erase_chip_block_jedec,
2269 }
2270 },
snelsonc6855342010-01-28 23:55:12 +00002271 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00002272 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00002273 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00002274 },
2275
hailfinger286829b2009-01-08 03:40:17 +00002276 {
2277 .vendor = "Atmel",
2278 .name = "AT49F002(N)T",
hailfingerdaecf7e2009-06-05 08:47:37 +00002279 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00002280 .manufacture_id = ATMEL_ID,
mhmd3c80cd2010-09-15 23:31:03 +00002281 .model_id = ATMEL_AT49F002NT,
hailfinger286829b2009-01-08 03:40:17 +00002282 .total_size = 256,
2283 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00002284 .feature_bits = FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00002285 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00002286 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00002287 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
hailfinger22155a82009-12-23 12:02:55 +00002288 .block_erasers =
2289 {
2290 {
2291 .eraseblocks = {
2292 {128 * 1024, 1},
2293 {96 * 1024, 1},
2294 {8 * 1024, 2},
2295 {16 * 1024, 1},
2296 },
2297 .block_erase = erase_sector_jedec,
2298 }, {
2299 .eraseblocks = { {256 * 1024, 1} },
2300 .block_erase = erase_chip_block_jedec,
2301 }
2302 },
snelsonc6855342010-01-28 23:55:12 +00002303 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00002304 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00002305 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00002306 },
2307
hailfinger867df6b2010-07-22 11:44:38 +00002308 {
mhme8e87912010-09-16 00:51:51 +00002309 .vendor = "Bright",
2310 .name = "BM29F040",
2311 .bustype = CHIP_BUSTYPE_PARALLEL,
2312 .manufacture_id = BRIGHT_ID,
2313 .model_id = BRIGHT_BM29F040,
2314 .total_size = 512,
2315 .page_size = 64 * 1024,
2316 .feature_bits = FEATURE_EITHER_RESET,
2317 .tested = TEST_OK_PR,
2318 .probe = probe_jedec,
2319 .probe_timing = TIMING_ZERO,
2320 .block_erasers =
2321 {
2322 {
2323 .eraseblocks = { {64 * 1024, 8} },
2324 .block_erase = erase_sector_jedec,
2325 }, {
2326 .eraseblocks = { {512 * 1024, 1} },
2327 .block_erase = erase_chip_block_jedec,
2328 },
2329 },
2330 .write = write_jedec_1,
2331 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00002332 .voltage = {4500, 5500},
mhme8e87912010-09-16 00:51:51 +00002333 },
2334
2335 {
David Hendricksc801adb2010-12-09 16:58:56 -08002336 .vendor = "Bright",
2337 .name = "BM29F040",
2338 .bustype = CHIP_BUSTYPE_PARALLEL,
2339 .manufacture_id = BRIGHT_ID,
2340 .model_id = BRIGHT_BM29F040,
2341 .total_size = 512,
2342 .page_size = 64 * 1024,
2343 .feature_bits = FEATURE_EITHER_RESET,
2344 .tested = TEST_OK_PR,
2345 .probe = probe_jedec,
2346 .probe_timing = TIMING_ZERO,
2347 .block_erasers =
2348 {
2349 {
2350 .eraseblocks = { {64 * 1024, 8} },
2351 .block_erase = erase_sector_jedec,
2352 }, {
2353 .eraseblocks = { {512 * 1024, 1} },
2354 .block_erase = erase_chip_block_jedec,
2355 },
2356 },
2357 .write = write_jedec_1,
2358 .read = read_memmapped,
2359 },
2360
2361 {
hailfinger286829b2009-01-08 03:40:17 +00002362 .vendor = "EMST",
2363 .name = "F49B002UA",
hailfingerdaecf7e2009-06-05 08:47:37 +00002364 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00002365 .manufacture_id = EMST_ID,
2366 .model_id = EMST_F49B002UA,
2367 .total_size = 256,
2368 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00002369 .feature_bits = FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00002370 .tested = TEST_UNTESTED,
2371 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00002372 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson2d471072010-01-09 05:30:14 +00002373 .block_erasers =
2374 {
2375 {
2376 .eraseblocks = {
2377 {128 * 1024, 1},
2378 {96 * 1024, 1},
2379 {8 * 1024, 2},
2380 {16 * 1024, 1},
2381 },
2382 .block_erase = erase_sector_jedec,
2383 }, {
2384 .eraseblocks = { {256 * 1024, 1} },
2385 .block_erase = erase_chip_block_jedec,
2386 }
2387 },
snelsonc6855342010-01-28 23:55:12 +00002388 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00002389 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00002390 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00002391 },
2392
hailfinger286829b2009-01-08 03:40:17 +00002393 {
mkarcherf6986732010-06-19 22:06:35 +00002394 .vendor = "EMST",
2395 .name = "F25L008A",
2396 .bustype = CHIP_BUSTYPE_SPI,
2397 .manufacture_id = EMST_ID,
2398 .model_id = EMST_F25L008A,
2399 .total_size = 1024,
2400 .page_size = 256,
2401 .tested = TEST_UNTESTED,
2402 .probe = probe_spi_rdid,
2403 .probe_timing = TIMING_ZERO,
2404 .block_erasers =
2405 {
2406 {
2407 .eraseblocks = { {4 * 1024, 256} },
2408 .block_erase = spi_block_erase_20,
2409 }, {
2410 .eraseblocks = { {64 * 1024, 16} },
2411 .block_erase = spi_block_erase_d8,
2412 }, {
2413 .eraseblocks = { {1024 * 1024, 1} },
2414 .block_erase = spi_block_erase_60,
2415 }, {
2416 .eraseblocks = { {1024 * 1024, 1} },
2417 .block_erase = spi_block_erase_c7,
2418 }
2419 },
hailfingerb9560ee2010-07-14 20:21:22 +00002420 .unlock = spi_disable_blockprotect,
hailfingerc7d06c62010-07-14 16:19:05 +00002421 .write = spi_chip_write_1,
mkarcher84fe8cb2010-07-10 19:34:15 +00002422 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002423 .voltage = {2700, 3600},
mkarcherf6986732010-06-19 22:06:35 +00002424 },
2425
2426 {
hailfingerab07cbd2009-06-05 20:53:07 +00002427 .vendor = "Eon",
2428 .name = "EN25B05",
2429 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002430 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002431 .model_id = EON_EN25B05,
hailfingerab07cbd2009-06-05 20:53:07 +00002432 .total_size = 64,
2433 .page_size = 256,
2434 .tested = TEST_UNTESTED,
2435 .probe = probe_spi_rdid,
2436 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002437 .block_erasers =
2438 {
2439 {
2440 .eraseblocks = {
2441 {4 * 1024, 2},
2442 {8 * 1024, 1},
2443 {16 * 1024, 1},
2444 {32 * 1024, 1},
2445 },
2446 .block_erase = spi_block_erase_d8,
2447 }, {
2448 .eraseblocks = { {64 * 1024, 1} },
2449 .block_erase = spi_block_erase_c7,
2450 }
2451 },
hailfingerb9560ee2010-07-14 20:21:22 +00002452 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002453 .write = spi_chip_write_256,
2454 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002455 .voltage = {2700, 3600},
snelson2d471072010-01-09 05:30:14 +00002456 },
2457
2458 {
2459 .vendor = "Eon",
2460 .name = "EN25B05T",
2461 .bustype = CHIP_BUSTYPE_SPI,
2462 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002463 .model_id = EON_EN25B05,
snelson2d471072010-01-09 05:30:14 +00002464 .total_size = 64,
2465 .page_size = 256,
2466 .tested = TEST_UNTESTED,
2467 .probe = probe_spi_rdid,
2468 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002469 .block_erasers =
2470 {
2471 {
2472 .eraseblocks = {
2473 {32 * 1024, 1},
2474 {16 * 1024, 1},
2475 {8 * 1024, 1},
2476 {4 * 1024, 2},
2477 },
2478 .block_erase = spi_block_erase_d8,
2479 }, {
2480 .eraseblocks = { {64 * 1024, 1} },
2481 .block_erase = spi_block_erase_c7,
2482 }
2483 },
hailfingerb9560ee2010-07-14 20:21:22 +00002484 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002485 .write = spi_chip_write_256,
2486 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002487 .voltage = {2700, 3600},
hailfingerab07cbd2009-06-05 20:53:07 +00002488 },
2489
2490 {
2491 .vendor = "Eon",
2492 .name = "EN25B10",
2493 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002494 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002495 .model_id = EON_EN25B10,
hailfingerab07cbd2009-06-05 20:53:07 +00002496 .total_size = 128,
2497 .page_size = 256,
2498 .tested = TEST_UNTESTED,
2499 .probe = probe_spi_rdid,
2500 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002501 .block_erasers =
2502 {
2503 {
2504 .eraseblocks = {
2505 {4 * 1024, 2},
2506 {8 * 1024, 1},
2507 {16 * 1024, 1},
2508 {32 * 1024, 3},
2509 },
2510 .block_erase = spi_block_erase_d8,
2511 }, {
2512 .eraseblocks = { {128 * 1024, 1} },
2513 .block_erase = spi_block_erase_c7,
2514 }
2515 },
hailfingerb9560ee2010-07-14 20:21:22 +00002516 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002517 .write = spi_chip_write_256,
2518 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002519 .voltage = {2700, 3600},
snelson2d471072010-01-09 05:30:14 +00002520 },
2521
2522 {
2523 .vendor = "Eon",
2524 .name = "EN25B10T",
2525 .bustype = CHIP_BUSTYPE_SPI,
2526 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002527 .model_id = EON_EN25B10,
snelson2d471072010-01-09 05:30:14 +00002528 .total_size = 128,
2529 .page_size = 256,
2530 .tested = TEST_UNTESTED,
2531 .probe = probe_spi_rdid,
2532 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002533 .block_erasers =
2534 {
2535 {
2536 .eraseblocks = {
2537 {32 * 1024, 3},
2538 {16 * 1024, 1},
2539 {8 * 1024, 1},
2540 {4 * 1024, 2},
2541 },
2542 .block_erase = spi_block_erase_d8,
2543 }, {
2544 .eraseblocks = { {128 * 1024, 1} },
2545 .block_erase = spi_block_erase_c7,
2546 }
2547 },
hailfingerb9560ee2010-07-14 20:21:22 +00002548 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002549 .write = spi_chip_write_256,
2550 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002551 .voltage = {2700, 3600},
hailfingerab07cbd2009-06-05 20:53:07 +00002552 },
2553
2554 {
2555 .vendor = "Eon",
2556 .name = "EN25B20",
2557 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002558 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002559 .model_id = EON_EN25B20,
hailfingerab07cbd2009-06-05 20:53:07 +00002560 .total_size = 256,
2561 .page_size = 256,
2562 .tested = TEST_UNTESTED,
2563 .probe = probe_spi_rdid,
2564 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002565 .block_erasers =
2566 {
2567 {
2568 .eraseblocks = {
2569 {4 * 1024, 2},
2570 {8 * 1024, 1},
2571 {16 * 1024, 1},
2572 {32 * 1024, 1},
2573 {64 * 1024, 3}
2574 },
2575 .block_erase = spi_block_erase_d8,
2576 }, {
2577 .eraseblocks = { {256 * 1024, 1} },
2578 .block_erase = spi_block_erase_c7,
2579 }
2580 },
hailfingerb9560ee2010-07-14 20:21:22 +00002581 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002582 .write = spi_chip_write_256,
2583 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002584 .voltage = {2700, 3600},
snelson2d471072010-01-09 05:30:14 +00002585 },
2586
2587 {
2588 .vendor = "Eon",
2589 .name = "EN25B20T",
2590 .bustype = CHIP_BUSTYPE_SPI,
2591 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002592 .model_id = EON_EN25B20,
snelson2d471072010-01-09 05:30:14 +00002593 .total_size = 256,
2594 .page_size = 256,
2595 .tested = TEST_UNTESTED,
2596 .probe = probe_spi_rdid,
2597 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002598 .block_erasers =
2599 {
2600 {
2601 .eraseblocks = {
2602 {64 * 1024, 3},
2603 {32 * 1024, 1},
2604 {16 * 1024, 1},
2605 {8 * 1024, 1},
2606 {4 * 1024, 2},
2607 },
2608 .block_erase = spi_block_erase_d8,
2609 }, {
2610 .eraseblocks = { {256 * 1024, 1} },
2611 .block_erase = spi_block_erase_c7,
2612 }
2613 },
hailfingerb9560ee2010-07-14 20:21:22 +00002614 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002615 .write = spi_chip_write_256,
2616 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002617 .voltage = {2700, 3600},
hailfingerab07cbd2009-06-05 20:53:07 +00002618 },
2619
2620 {
2621 .vendor = "Eon",
2622 .name = "EN25B40",
2623 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002624 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002625 .model_id = EON_EN25B40,
hailfingerab07cbd2009-06-05 20:53:07 +00002626 .total_size = 512,
2627 .page_size = 256,
2628 .tested = TEST_UNTESTED,
2629 .probe = probe_spi_rdid,
2630 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002631 .block_erasers =
2632 {
2633 {
2634 .eraseblocks = {
2635 {4 * 1024, 2},
2636 {8 * 1024, 1},
2637 {16 * 1024, 1},
2638 {32 * 1024, 1},
2639 {64 * 1024, 7}
2640 },
2641 .block_erase = spi_block_erase_d8,
2642 }, {
2643 .eraseblocks = { {512 * 1024, 1} },
2644 .block_erase = spi_block_erase_c7,
2645 }
2646 },
hailfingerb9560ee2010-07-14 20:21:22 +00002647 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002648 .write = spi_chip_write_256,
2649 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002650 .voltage = {2700, 3600},
snelson2d471072010-01-09 05:30:14 +00002651 },
2652
2653 {
2654 .vendor = "Eon",
2655 .name = "EN25B40T",
2656 .bustype = CHIP_BUSTYPE_SPI,
2657 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002658 .model_id = EON_EN25B40,
snelson2d471072010-01-09 05:30:14 +00002659 .total_size = 512,
2660 .page_size = 256,
2661 .tested = TEST_UNTESTED,
2662 .probe = probe_spi_rdid,
2663 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002664 .block_erasers =
2665 {
2666 {
2667 .eraseblocks = {
2668 {64 * 1024, 7},
2669 {32 * 1024, 1},
2670 {16 * 1024, 1},
2671 {8 * 1024, 1},
2672 {4 * 1024, 2},
2673 },
2674 .block_erase = spi_block_erase_d8,
2675 }, {
2676 .eraseblocks = { {512 * 1024, 1} },
2677 .block_erase = spi_block_erase_c7,
2678 }
2679 },
hailfingerb9560ee2010-07-14 20:21:22 +00002680 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002681 .write = spi_chip_write_256,
2682 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002683 .voltage = {2700, 3600},
hailfingerab07cbd2009-06-05 20:53:07 +00002684 },
2685
2686 {
2687 .vendor = "Eon",
2688 .name = "EN25B80",
2689 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002690 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002691 .model_id = EON_EN25B80,
hailfingerab07cbd2009-06-05 20:53:07 +00002692 .total_size = 1024,
2693 .page_size = 256,
2694 .tested = TEST_UNTESTED,
2695 .probe = probe_spi_rdid,
2696 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002697 .block_erasers =
2698 {
2699 {
2700 .eraseblocks = {
2701 {4 * 1024, 2},
2702 {8 * 1024, 1},
2703 {16 * 1024, 1},
2704 {32 * 1024, 1},
2705 {64 * 1024, 15}
2706 },
2707 .block_erase = spi_block_erase_d8,
2708 }, {
2709 .eraseblocks = { {1024 * 1024, 1} },
2710 .block_erase = spi_block_erase_c7,
2711 }
2712 },
hailfingerb9560ee2010-07-14 20:21:22 +00002713 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002714 .write = spi_chip_write_256,
2715 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002716 .voltage = {2700, 3600},
snelson2d471072010-01-09 05:30:14 +00002717 },
2718
2719 {
2720 .vendor = "Eon",
2721 .name = "EN25B80T",
2722 .bustype = CHIP_BUSTYPE_SPI,
2723 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002724 .model_id = EON_EN25B80,
snelson2d471072010-01-09 05:30:14 +00002725 .total_size = 1024,
2726 .page_size = 256,
2727 .tested = TEST_UNTESTED,
2728 .probe = probe_spi_rdid,
2729 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002730 .block_erasers =
2731 {
2732 {
2733 .eraseblocks = {
2734 {64 * 1024, 15},
2735 {32 * 1024, 1},
2736 {16 * 1024, 1},
2737 {8 * 1024, 1},
2738 {4 * 1024, 2},
2739 },
2740 .block_erase = spi_block_erase_d8,
2741 }, {
2742 .eraseblocks = { {1024 * 1024, 1} },
2743 .block_erase = spi_block_erase_c7,
2744 }
2745 },
hailfingerb9560ee2010-07-14 20:21:22 +00002746 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002747 .write = spi_chip_write_256,
2748 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002749 .voltage = {2700, 3600},
hailfingerab07cbd2009-06-05 20:53:07 +00002750 },
2751
2752 {
2753 .vendor = "Eon",
2754 .name = "EN25B16",
2755 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002756 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002757 .model_id = EON_EN25B16,
hailfingerab07cbd2009-06-05 20:53:07 +00002758 .total_size = 2048,
2759 .page_size = 256,
2760 .tested = TEST_UNTESTED,
2761 .probe = probe_spi_rdid,
2762 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002763 .block_erasers =
2764 {
2765 {
2766 .eraseblocks = {
2767 {4 * 1024, 2},
2768 {8 * 1024, 1},
2769 {16 * 1024, 1},
2770 {32 * 1024, 1},
2771 {64 * 1024, 31},
2772 },
2773 .block_erase = spi_block_erase_d8,
2774 }, {
2775 .eraseblocks = { {2 * 1024 * 1024, 1} },
2776 .block_erase = spi_block_erase_c7,
2777 }
2778 },
hailfingerb9560ee2010-07-14 20:21:22 +00002779 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002780 .write = spi_chip_write_256,
2781 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002782 .voltage = {2700, 3600},
snelson2d471072010-01-09 05:30:14 +00002783 },
2784
2785 {
2786 .vendor = "Eon",
2787 .name = "EN25B16T",
2788 .bustype = CHIP_BUSTYPE_SPI,
2789 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002790 .model_id = EON_EN25B16,
snelson2d471072010-01-09 05:30:14 +00002791 .total_size = 2048,
2792 .page_size = 256,
2793 .tested = TEST_UNTESTED,
2794 .probe = probe_spi_rdid,
2795 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002796 .block_erasers =
2797 {
2798 {
2799 .eraseblocks = {
2800 {64 * 1024, 31},
2801 {32 * 1024, 1},
2802 {16 * 1024, 1},
2803 {8 * 1024, 1},
2804 {4 * 1024, 2},
2805 },
2806 .block_erase = spi_block_erase_d8,
2807 }, {
2808 .eraseblocks = { {2 * 1024 * 1024, 1} },
2809 .block_erase = spi_block_erase_c7,
2810 }
2811 },
hailfingerb9560ee2010-07-14 20:21:22 +00002812 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002813 .write = spi_chip_write_256,
2814 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002815 .voltage = {2700, 3600},
hailfingerab07cbd2009-06-05 20:53:07 +00002816 },
2817
2818 {
2819 .vendor = "Eon",
2820 .name = "EN25B32",
2821 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002822 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002823 .model_id = EON_EN25B32,
hailfingerab07cbd2009-06-05 20:53:07 +00002824 .total_size = 4096,
2825 .page_size = 256,
2826 .tested = TEST_UNTESTED,
2827 .probe = probe_spi_rdid,
2828 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002829 .block_erasers =
2830 {
2831 {
2832 .eraseblocks = {
2833 {4 * 1024, 2},
2834 {8 * 1024, 1},
2835 {16 * 1024, 1},
2836 {32 * 1024, 1},
2837 {64 * 1024, 63},
2838 },
2839 .block_erase = spi_block_erase_d8,
2840 }, {
2841 .eraseblocks = { {4 * 1024 * 1024, 1} },
2842 .block_erase = spi_block_erase_c7,
2843 }
2844 },
hailfingerb9560ee2010-07-14 20:21:22 +00002845 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002846 .write = spi_chip_write_256,
2847 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002848 .voltage = {2700, 3600},
snelson2d471072010-01-09 05:30:14 +00002849 },
2850
2851 {
2852 .vendor = "Eon",
2853 .name = "EN25B32T",
2854 .bustype = CHIP_BUSTYPE_SPI,
2855 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002856 .model_id = EON_EN25B32,
snelson2d471072010-01-09 05:30:14 +00002857 .total_size = 4096,
2858 .page_size = 256,
2859 .tested = TEST_UNTESTED,
2860 .probe = probe_spi_rdid,
2861 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002862 .block_erasers =
2863 {
2864 {
2865 .eraseblocks = {
2866 {64 * 1024, 63},
2867 {32 * 1024, 1},
2868 {16 * 1024, 1},
2869 {8 * 1024, 1},
2870 {4 * 1024, 2},
2871 },
2872 .block_erase = spi_block_erase_d8,
2873 }, {
2874 .eraseblocks = { {4 * 1024 * 1024, 1} },
2875 .block_erase = spi_block_erase_c7,
2876 }
2877 },
hailfingerb9560ee2010-07-14 20:21:22 +00002878 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002879 .write = spi_chip_write_256,
2880 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002881 .voltage = {2700, 3600},
hailfingerab07cbd2009-06-05 20:53:07 +00002882 },
2883
2884 {
2885 .vendor = "Eon",
2886 .name = "EN25B64",
2887 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002888 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002889 .model_id = EON_EN25B64,
hailfingerab07cbd2009-06-05 20:53:07 +00002890 .total_size = 8192,
2891 .page_size = 256,
hailfinger5ccbc942010-09-03 03:18:26 +00002892 .feature_bits = FEATURE_WRSR_WREN,
hailfingerab07cbd2009-06-05 20:53:07 +00002893 .tested = TEST_UNTESTED,
2894 .probe = probe_spi_rdid,
2895 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002896 .block_erasers =
2897 {
2898 {
2899 .eraseblocks = {
2900 {4 * 1024, 2},
2901 {8 * 1024, 1},
2902 {16 * 1024, 1},
2903 {32 * 1024, 1},
2904 {64 * 1024, 127},
2905 },
2906 .block_erase = spi_block_erase_d8,
2907 }, {
2908 .eraseblocks = { {8 * 1024 * 1024, 1} },
2909 .block_erase = spi_block_erase_c7,
2910 }
2911 },
hailfingerb9560ee2010-07-14 20:21:22 +00002912 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002913 .write = spi_chip_write_256,
2914 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002915 .voltage = {2700, 3600},
snelson2d471072010-01-09 05:30:14 +00002916 },
2917
2918 {
2919 .vendor = "Eon",
2920 .name = "EN25B64T",
2921 .bustype = CHIP_BUSTYPE_SPI,
2922 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002923 .model_id = EON_EN25B64,
snelson2d471072010-01-09 05:30:14 +00002924 .total_size = 8192,
2925 .page_size = 256,
2926 .tested = TEST_UNTESTED,
2927 .probe = probe_spi_rdid,
2928 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002929 .block_erasers =
2930 {
2931 {
2932 .eraseblocks = {
2933 {64 * 1024, 127},
2934 {32 * 1024, 1},
2935 {16 * 1024, 1},
2936 {8 * 1024, 1},
2937 {4 * 1024, 2},
2938 },
2939 .block_erase = spi_block_erase_d8,
2940 }, {
2941 .eraseblocks = { {8 * 1024 * 1024, 1} },
2942 .block_erase = spi_block_erase_c7,
2943 }
2944 },
hailfingerb9560ee2010-07-14 20:21:22 +00002945 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002946 .write = spi_chip_write_256,
2947 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002948 .voltage = {2700, 3600},
hailfingerab07cbd2009-06-05 20:53:07 +00002949 },
2950
2951 {
David Hendrickse185bf22011-05-24 15:34:18 -07002952 /* Note: EN25Q16 is an evil twin which shares the model ID
2953 but has different write protection capabilities */
hailfingerab07cbd2009-06-05 20:53:07 +00002954 .vendor = "Eon",
hailfinger77c5d932009-06-15 12:10:57 +00002955 .name = "EN25D16",
2956 .bustype = CHIP_BUSTYPE_SPI,
2957 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002958 .model_id = EON_EN25D16,
hailfinger77c5d932009-06-15 12:10:57 +00002959 .total_size = 2048,
2960 .page_size = 256,
David Hendrickse185bf22011-05-24 15:34:18 -07002961 .feature_bits = FEATURE_WRSR_WREN,
hailfinger77c5d932009-06-15 12:10:57 +00002962 .tested = TEST_UNTESTED,
2963 .probe = probe_spi_rdid,
2964 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002965 .block_erasers =
2966 {
2967 {
2968 .eraseblocks = { {4 * 1024, 512} },
2969 .block_erase = spi_block_erase_20,
2970 }, {
2971 .eraseblocks = { {64 * 1024, 32} },
2972 .block_erase = spi_block_erase_d8,
2973 }, {
2974 .eraseblocks = { {64 * 1024, 32} },
2975 .block_erase = spi_block_erase_52,
2976 }, {
2977 .eraseblocks = { {2 * 1024 * 1024, 1} },
2978 .block_erase = spi_block_erase_60,
2979 }, {
2980 .eraseblocks = { {2 * 1024 * 1024, 1} },
2981 .block_erase = spi_block_erase_c7,
2982 }
2983 },
hailfingerb9560ee2010-07-14 20:21:22 +00002984 .unlock = spi_disable_blockprotect,
hailfinger77c5d932009-06-15 12:10:57 +00002985 .write = spi_chip_write_256,
2986 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00002987 .voltage = {2700, 3600},
hailfinger77c5d932009-06-15 12:10:57 +00002988 },
2989
2990 {
2991 .vendor = "Eon",
2992 .name = "EN25F05",
2993 .bustype = CHIP_BUSTYPE_SPI,
2994 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00002995 .model_id = EON_EN25F05,
hailfinger77c5d932009-06-15 12:10:57 +00002996 .total_size = 64,
2997 .page_size = 256,
hailfinger5ccbc942010-09-03 03:18:26 +00002998 .feature_bits = FEATURE_WRSR_WREN,
hailfinger77c5d932009-06-15 12:10:57 +00002999 .tested = TEST_UNTESTED,
3000 .probe = probe_spi_rdid,
3001 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003002 .block_erasers =
3003 {
3004 {
3005 .eraseblocks = { {4 * 1024, 16} },
3006 .block_erase = spi_block_erase_20,
3007 }, {
3008 .eraseblocks = { {32 * 1024, 2} },
3009 .block_erase = spi_block_erase_d8,
3010 }, {
3011 .eraseblocks = { {32 * 1024, 2} },
3012 .block_erase = spi_block_erase_52,
3013 }, {
3014 .eraseblocks = { {64 * 1024, 1} },
3015 .block_erase = spi_block_erase_60,
3016 }, {
3017 .eraseblocks = { {64 * 1024, 1} },
3018 .block_erase = spi_block_erase_c7,
3019 }
3020 },
hailfingerb9560ee2010-07-14 20:21:22 +00003021 .unlock = spi_disable_blockprotect,
hailfinger77c5d932009-06-15 12:10:57 +00003022 .write = spi_chip_write_256,
3023 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00003024 .voltage = {2700, 3600},
hailfinger77c5d932009-06-15 12:10:57 +00003025 },
3026
3027 {
3028 .vendor = "Eon",
3029 .name = "EN25F10",
3030 .bustype = CHIP_BUSTYPE_SPI,
3031 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00003032 .model_id = EON_EN25F10,
hailfinger77c5d932009-06-15 12:10:57 +00003033 .total_size = 128,
3034 .page_size = 256,
hailfinger5ccbc942010-09-03 03:18:26 +00003035 .feature_bits = FEATURE_WRSR_WREN,
hailfinger77c5d932009-06-15 12:10:57 +00003036 .tested = TEST_UNTESTED,
3037 .probe = probe_spi_rdid,
3038 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003039 .block_erasers =
3040 {
3041 {
3042 .eraseblocks = { {4 * 1024, 32} },
3043 .block_erase = spi_block_erase_20,
3044 }, {
3045 .eraseblocks = { {32 * 1024, 4} },
3046 .block_erase = spi_block_erase_d8,
3047 }, {
3048 .eraseblocks = { {32 * 1024, 4} },
3049 .block_erase = spi_block_erase_52,
3050 }, {
3051 .eraseblocks = { {128 * 1024, 1} },
3052 .block_erase = spi_block_erase_60,
3053 }, {
3054 .eraseblocks = { {128 * 1024, 1} },
3055 .block_erase = spi_block_erase_c7,
3056 }
3057 },
hailfingerb9560ee2010-07-14 20:21:22 +00003058 .unlock = spi_disable_blockprotect,
hailfinger77c5d932009-06-15 12:10:57 +00003059 .write = spi_chip_write_256,
3060 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00003061 .voltage = {2700, 3600},
hailfinger77c5d932009-06-15 12:10:57 +00003062 },
3063
3064 {
3065 .vendor = "Eon",
3066 .name = "EN25F20",
3067 .bustype = CHIP_BUSTYPE_SPI,
3068 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00003069 .model_id = EON_EN25F20,
hailfinger77c5d932009-06-15 12:10:57 +00003070 .total_size = 256,
3071 .page_size = 256,
hailfinger5ccbc942010-09-03 03:18:26 +00003072 .feature_bits = FEATURE_WRSR_WREN,
hailfinger77c5d932009-06-15 12:10:57 +00003073 .tested = TEST_UNTESTED,
3074 .probe = probe_spi_rdid,
3075 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003076 .block_erasers =
3077 {
3078 {
3079 .eraseblocks = { {4 * 1024, 64} },
3080 .block_erase = spi_block_erase_20,
3081 }, {
3082 .eraseblocks = { {64 * 1024, 4} },
3083 .block_erase = spi_block_erase_d8,
3084 }, {
3085 .eraseblocks = { {64 * 1024, 4} },
3086 .block_erase = spi_block_erase_52,
3087 }, {
3088 .eraseblocks = { {256 * 1024, 1} },
3089 .block_erase = spi_block_erase_60,
3090 }, {
3091 .eraseblocks = { {256 * 1024, 1} },
3092 .block_erase = spi_block_erase_c7,
3093 }
3094 },
hailfingerb9560ee2010-07-14 20:21:22 +00003095 .unlock = spi_disable_blockprotect,
hailfinger77c5d932009-06-15 12:10:57 +00003096 .write = spi_chip_write_256,
3097 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00003098 .voltage = {2700, 3600},
hailfinger77c5d932009-06-15 12:10:57 +00003099 },
3100
3101 {
3102 .vendor = "Eon",
hailfingerab07cbd2009-06-05 20:53:07 +00003103 .name = "EN25F40",
3104 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00003105 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00003106 .model_id = EON_EN25F40,
hailfingerab07cbd2009-06-05 20:53:07 +00003107 .total_size = 512,
3108 .page_size = 256,
hailfinger5ccbc942010-09-03 03:18:26 +00003109 .feature_bits = FEATURE_WRSR_WREN,
hailfinger27a59132009-06-22 10:06:28 +00003110 .tested = TEST_OK_PROBE,
hailfingerab07cbd2009-06-05 20:53:07 +00003111 .probe = probe_spi_rdid,
3112 .probe_timing = TIMING_ZERO,
snelson1c03aa12009-12-23 17:05:59 +00003113 .block_erasers =
3114 {
3115 {
snelson2d471072010-01-09 05:30:14 +00003116 .eraseblocks = { {4 * 1024, 128} },
snelson1c03aa12009-12-23 17:05:59 +00003117 .block_erase = spi_block_erase_20,
3118 }, {
snelson2d471072010-01-09 05:30:14 +00003119 .eraseblocks = { {64 * 1024, 8} },
snelson1c03aa12009-12-23 17:05:59 +00003120 .block_erase = spi_block_erase_d8,
3121 }, {
snelson2d471072010-01-09 05:30:14 +00003122 .eraseblocks = { {512 * 1024, 1} },
snelson1c03aa12009-12-23 17:05:59 +00003123 .block_erase = spi_block_erase_60,
3124 }, {
snelson2d471072010-01-09 05:30:14 +00003125 .eraseblocks = { {512 * 1024, 1} },
snelson1c03aa12009-12-23 17:05:59 +00003126 .block_erase = spi_block_erase_c7,
3127 },
3128 },
hailfingerb9560ee2010-07-14 20:21:22 +00003129 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00003130 .write = spi_chip_write_256,
3131 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00003132 .voltage = {2700, 3600},
Louis Yung-Chieh Lod6572b32011-05-24 16:28:27 +08003133 .wp = &wp_w25,
hailfingerab07cbd2009-06-05 20:53:07 +00003134 },
3135
3136 {
3137 .vendor = "Eon",
3138 .name = "EN25F80",
3139 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00003140 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00003141 .model_id = EON_EN25F80,
hailfingerab07cbd2009-06-05 20:53:07 +00003142 .total_size = 1024,
3143 .page_size = 256,
hailfinger5ccbc942010-09-03 03:18:26 +00003144 .feature_bits = FEATURE_WRSR_WREN,
stefanctdfd58832011-07-25 20:38:52 +00003145 .tested = TEST_OK_PREW,
hailfingerab07cbd2009-06-05 20:53:07 +00003146 .probe = probe_spi_rdid,
3147 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003148 .block_erasers =
3149 {
3150 {
3151 .eraseblocks = { {4 * 1024, 256} },
3152 .block_erase = spi_block_erase_20,
3153 }, {
3154 .eraseblocks = { {64 * 1024, 16} },
3155 .block_erase = spi_block_erase_d8,
3156 }, {
3157 .eraseblocks = { {1024 * 1024, 1} },
3158 .block_erase = spi_block_erase_60,
3159 }, {
3160 .eraseblocks = { {1024 * 1024, 1} },
3161 .block_erase = spi_block_erase_c7,
3162 }
3163 },
hailfingerb9560ee2010-07-14 20:21:22 +00003164 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00003165 .write = spi_chip_write_256,
3166 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00003167 .voltage = {2700, 3600},
hailfingerab07cbd2009-06-05 20:53:07 +00003168 },
3169
3170 {
3171 .vendor = "Eon",
3172 .name = "EN25F16",
3173 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00003174 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00003175 .model_id = EON_EN25F16,
hailfingerab07cbd2009-06-05 20:53:07 +00003176 .total_size = 2048,
3177 .page_size = 256,
hailfinger5ccbc942010-09-03 03:18:26 +00003178 .feature_bits = FEATURE_WRSR_WREN,
hailfingerab07cbd2009-06-05 20:53:07 +00003179 .tested = TEST_UNTESTED,
3180 .probe = probe_spi_rdid,
3181 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003182 .block_erasers =
3183 {
3184 {
3185 .eraseblocks = { {4 * 1024, 512} },
3186 .block_erase = spi_block_erase_20,
3187 }, {
3188 .eraseblocks = { {64 * 1024, 32} },
3189 .block_erase = spi_block_erase_d8,
3190 }, {
3191 .eraseblocks = { {2 * 1024 * 1024, 1} },
3192 .block_erase = spi_block_erase_60,
3193 }, {
3194 .eraseblocks = { {2 * 1024 * 1024, 1} },
3195 .block_erase = spi_block_erase_c7,
3196 }
3197 },
hailfingerb9560ee2010-07-14 20:21:22 +00003198 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00003199 .write = spi_chip_write_256,
3200 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00003201 .voltage = {2700, 3600},
hailfingerab07cbd2009-06-05 20:53:07 +00003202 },
3203
3204 {
hailfinger77c5d932009-06-15 12:10:57 +00003205 .vendor = "Eon",
3206 .name = "EN25F32",
3207 .bustype = CHIP_BUSTYPE_SPI,
3208 .manufacture_id = EON_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00003209 .model_id = EON_EN25F32,
hailfinger77c5d932009-06-15 12:10:57 +00003210 .total_size = 4096,
3211 .page_size = 256,
hailfinger5ccbc942010-09-03 03:18:26 +00003212 .feature_bits = FEATURE_WRSR_WREN,
hailfinger77c5d932009-06-15 12:10:57 +00003213 .tested = TEST_UNTESTED,
3214 .probe = probe_spi_rdid,
3215 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003216 .block_erasers =
3217 {
3218 {
3219 .eraseblocks = { {4 * 1024, 1024} },
3220 .block_erase = spi_block_erase_20,
3221 }, {
3222 .eraseblocks = { {64 * 1024, 64} },
3223 .block_erase = spi_block_erase_d8,
3224 }, {
3225 .eraseblocks = { {4 * 1024 * 1024, 1} },
3226 .block_erase = spi_block_erase_60,
3227 }, {
3228 .eraseblocks = { {4 * 1024 * 1024, 1} },
3229 .block_erase = spi_block_erase_c7,
3230 }
3231 },
hailfingerb9560ee2010-07-14 20:21:22 +00003232 .unlock = spi_disable_blockprotect,
hailfinger77c5d932009-06-15 12:10:57 +00003233 .write = spi_chip_write_256,
3234 .read = spi_chip_read,
3235 },
3236
3237 {
snelson2b18d0f2010-03-05 08:44:11 +00003238 .vendor = "Eon",
David Hendrickse185bf22011-05-24 15:34:18 -07003239 .name = "EN25Q40",
3240 .bustype = CHIP_BUSTYPE_SPI,
3241 .manufacture_id = EON_ID_NOPREFIX,
3242 .model_id = EON_EN25Q40,
3243 .total_size = 512,
3244 .page_size = 256,
3245 .feature_bits = FEATURE_WRSR_WREN,
3246 .tested = TEST_UNTESTED,
3247 .probe = probe_spi_rdid,
3248 .probe_timing = TIMING_ZERO,
3249 .block_erasers =
3250 {
3251 {
3252 .eraseblocks = { {4 * 1024, 128} },
3253 .block_erase = spi_block_erase_20,
3254 }, {
3255 .eraseblocks = { {64 * 1024, 8} },
3256 .block_erase = spi_block_erase_d8,
3257 }, {
3258 .eraseblocks = { {512 * 1024, 1} },
3259 .block_erase = spi_block_erase_60,
3260 }, {
3261 .eraseblocks = { {512 * 1024, 1} },
3262 .block_erase = spi_block_erase_c7,
3263 }
3264 },
3265 .unlock = spi_disable_blockprotect,
3266 .write = spi_chip_write_256,
3267 .read = spi_chip_read,
3268 .wp = &wp_w25,
3269 },
3270
3271 {
3272 .vendor = "Eon",
3273 .name = "EN25Q80(A)",
3274 .bustype = CHIP_BUSTYPE_SPI,
3275 .manufacture_id = EON_ID_NOPREFIX,
3276 .model_id = EON_EN25Q80,
3277 .total_size = 1024,
3278 .page_size = 256,
3279 .feature_bits = FEATURE_WRSR_WREN,
3280 .tested = TEST_UNTESTED,
3281 .probe = probe_spi_rdid,
3282 .probe_timing = TIMING_ZERO,
3283 .block_erasers =
3284 {
3285 {
3286 .eraseblocks = { {4 * 1024, 256} },
3287 .block_erase = spi_block_erase_20,
3288 }, {
3289 .eraseblocks = { {64 * 1024, 16} },
3290 .block_erase = spi_block_erase_d8,
3291 }, {
3292 .eraseblocks = { {1024 * 1024, 1} },
3293 .block_erase = spi_block_erase_60,
3294 }, {
3295 .eraseblocks = { {1024 * 1024, 1} },
3296 .block_erase = spi_block_erase_c7,
3297 }
3298 },
3299 .unlock = spi_disable_blockprotect,
3300 .write = spi_chip_write_256,
3301 .read = spi_chip_read,
3302 .wp = &wp_w25,
3303 },
3304
3305 {
3306 .vendor = "Eon",
3307 .name = "EN25Q32(A)(B)",
3308 .bustype = CHIP_BUSTYPE_SPI,
3309 .manufacture_id = EON_ID_NOPREFIX,
3310 .model_id = EON_EN25Q32,
3311 .total_size = 4096,
3312 .page_size = 256,
3313 .feature_bits = FEATURE_WRSR_WREN,
3314 .tested = TEST_UNTESTED,
3315 .probe = probe_spi_rdid,
3316 .probe_timing = TIMING_ZERO,
3317 .block_erasers =
3318 {
3319 {
3320 .eraseblocks = { {4 * 1024, 1024} },
3321 .block_erase = spi_block_erase_20,
3322 }, {
3323 .eraseblocks = { {64 * 1024, 64} },
3324 .block_erase = spi_block_erase_d8,
3325 }, {
3326 .eraseblocks = { {4 * 1024 * 1024, 1} },
3327 .block_erase = spi_block_erase_60,
3328 }, {
3329 .eraseblocks = { {4 * 1024 * 1024, 1} },
3330 .block_erase = spi_block_erase_c7,
3331 }
3332 },
3333 .unlock = spi_disable_blockprotect,
3334 .write = spi_chip_write_256,
3335 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00003336 .voltage = {2700, 3600},
David Hendrickse185bf22011-05-24 15:34:18 -07003337 .wp = &wp_w25,
3338 },
3339
3340 {
3341 .vendor = "Eon",
3342 .name = "EN25Q64",
3343 .bustype = CHIP_BUSTYPE_SPI,
3344 .manufacture_id = EON_ID_NOPREFIX,
3345 .model_id = EON_EN25Q64,
3346 .total_size = 8192,
3347 .page_size = 256,
3348 .feature_bits = FEATURE_WRSR_WREN,
3349 .tested = TEST_UNTESTED,
3350 .probe = probe_spi_rdid,
3351 .probe_timing = TIMING_ZERO,
3352 .block_erasers =
3353 {
3354 {
3355 .eraseblocks = { {4 * 1024, 2048} },
3356 .block_erase = spi_block_erase_20,
3357 }, {
3358 .eraseblocks = { {64 * 1024, 128} },
3359 .block_erase = spi_block_erase_d8,
3360 }, {
3361 .eraseblocks = { {8 * 1024 * 1024, 1} },
3362 .block_erase = spi_block_erase_60,
3363 }, {
3364 .eraseblocks = { {8 * 1024 * 1024, 1} },
3365 .block_erase = spi_block_erase_c7,
3366 }
3367 },
3368 .unlock = spi_disable_blockprotect,
3369 .write = spi_chip_write_256,
3370 .read = spi_chip_read,
3371 .wp = &wp_w25,
3372 },
3373
3374 {
3375 .vendor = "Eon",
3376 .name = "EN25Q128",
3377 .bustype = CHIP_BUSTYPE_SPI,
3378 .manufacture_id = EON_ID_NOPREFIX,
3379 .model_id = EON_EN25Q128,
3380 .total_size = 16384,
3381 .page_size = 256,
3382 .feature_bits = FEATURE_WRSR_WREN,
3383 .tested = TEST_UNTESTED,
3384 .probe = probe_spi_rdid,
3385 .probe_timing = TIMING_ZERO,
3386 .block_erasers =
3387 {
3388 {
3389 .eraseblocks = { {4 * 1024, 4096} },
3390 .block_erase = spi_block_erase_20,
3391 }, {
3392 .eraseblocks = { {64 * 1024, 256} },
3393 .block_erase = spi_block_erase_d8,
3394 }, {
3395 .eraseblocks = { {16 * 1024 * 1024, 1} },
3396 .block_erase = spi_block_erase_60,
3397 }, {
3398 .eraseblocks = { {16 * 1024 * 1024, 1} },
3399 .block_erase = spi_block_erase_c7,
3400 }
3401 },
3402 .unlock = spi_disable_blockprotect,
3403 .write = spi_chip_write_256,
3404 .read = spi_chip_read,
3405 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00003406 },
3407
hailfinger286829b2009-01-08 03:40:17 +00003408 {
snelson2b18d0f2010-03-05 08:44:11 +00003409 .vendor = "Eon",
stefanct5d10cff2011-07-24 22:21:57 +00003410 .name = "EN25Q40",
3411 .bustype = CHIP_BUSTYPE_SPI,
3412 .manufacture_id = EON_ID_NOPREFIX,
3413 .model_id = EON_EN25Q40,
3414 .total_size = 512,
3415 .page_size = 256,
3416 /* TODO: chip features 256-byte one-time programmable region */
3417 .feature_bits = FEATURE_WRSR_WREN,
3418 .tested = TEST_UNTESTED,
3419 .probe = probe_spi_rdid,
3420 .probe_timing = TIMING_ZERO,
3421 .block_erasers =
3422 {
3423 {
3424 .eraseblocks = { {4 * 1024, 128} },
3425 .block_erase = spi_block_erase_20,
3426 }, {
3427 .eraseblocks = { {64 * 1024, 8} },
3428 .block_erase = spi_block_erase_d8,
3429 }, {
3430 .eraseblocks = { {512 * 1024, 1} },
3431 .block_erase = spi_block_erase_60,
3432 }, {
3433 .eraseblocks = { {512 * 1024, 1} },
3434 .block_erase = spi_block_erase_c7,
3435 }
3436 },
3437 .unlock = spi_disable_blockprotect,
3438 .write = spi_chip_write_256,
3439 .read = spi_chip_read,
3440 .voltage = {2700, 3600},
3441 },
3442
3443 {
3444 .vendor = "Eon",
3445 .name = "EN25Q80(A)",
3446 .bustype = CHIP_BUSTYPE_SPI,
3447 .manufacture_id = EON_ID_NOPREFIX,
3448 .model_id = EON_EN25Q80,
3449 .total_size = 1024,
3450 .page_size = 256,
3451 /* TODO: chip features 256-byte one-time programmable region */
3452 .feature_bits = FEATURE_WRSR_WREN,
3453 .tested = TEST_UNTESTED,
3454 .probe = probe_spi_rdid,
3455 .probe_timing = TIMING_ZERO,
3456 .block_erasers =
3457 {
3458 {
3459 .eraseblocks = { {4 * 1024, 256} },
3460 .block_erase = spi_block_erase_20,
3461 }, {
3462 .eraseblocks = { {64 * 1024, 16} },
3463 .block_erase = spi_block_erase_d8,
3464 }, {
3465 .eraseblocks = { {1024 * 1024, 1} },
3466 .block_erase = spi_block_erase_60,
3467 }, {
3468 .eraseblocks = { {1024 * 1024, 1} },
3469 .block_erase = spi_block_erase_c7,
3470 }
3471 },
3472 .unlock = spi_disable_blockprotect,
3473 .write = spi_chip_write_256,
3474 .read = spi_chip_read,
3475 .voltage = {2700, 3600},
3476 },
3477
3478 {
3479 .vendor = "Eon",
3480 .name = "EN25Q32(A/B)",
3481 .bustype = CHIP_BUSTYPE_SPI,
3482 .manufacture_id = EON_ID_NOPREFIX,
3483 .model_id = EON_EN25Q32,
3484 .total_size = 4096,
3485 .page_size = 256,
3486 /* TODO: chip features 512-byte one-time programmable region */
3487 .feature_bits = FEATURE_WRSR_WREN,
3488 .tested = TEST_UNTESTED,
3489 .probe = probe_spi_rdid,
3490 .probe_timing = TIMING_ZERO,
3491 .block_erasers =
3492 {
3493 {
3494 .eraseblocks = { {4 * 1024, 1024} },
3495 .block_erase = spi_block_erase_20,
3496 }, {
3497 .eraseblocks = { {64 * 1024, 64} },
3498 .block_erase = spi_block_erase_d8,
3499 }, {
3500 .eraseblocks = { {4 * 1024 * 1024, 1} },
3501 .block_erase = spi_block_erase_60,
3502 }, {
3503 .eraseblocks = { {4 * 1024 * 1024, 1} },
3504 .block_erase = spi_block_erase_c7,
3505 }
3506 },
3507 .unlock = spi_disable_blockprotect,
3508 .write = spi_chip_write_256,
3509 .read = spi_chip_read,
3510 .voltage = {2700, 3600},
3511 },
3512
3513 {
3514 .vendor = "Eon",
3515 .name = "EN25Q64",
3516 .bustype = CHIP_BUSTYPE_SPI,
3517 .manufacture_id = EON_ID_NOPREFIX,
3518 .model_id = EON_EN25Q64,
3519 .total_size = 8192,
3520 .page_size = 256,
3521 /* TODO: chip features 512-byte one-time programmable region */
3522 .feature_bits = FEATURE_WRSR_WREN,
3523 .tested = TEST_UNTESTED,
3524 .probe = probe_spi_rdid,
3525 .probe_timing = TIMING_ZERO,
3526 .block_erasers =
3527 {
3528 {
3529 .eraseblocks = { {4 * 1024, 2048} },
3530 .block_erase = spi_block_erase_20,
3531 }, {
3532 .eraseblocks = { {64 * 1024, 128} },
3533 .block_erase = spi_block_erase_d8,
3534 }, {
3535 .eraseblocks = { {8 * 1024 * 1024, 1} },
3536 .block_erase = spi_block_erase_60,
3537 }, {
3538 .eraseblocks = { {8 * 1024 * 1024, 1} },
3539 .block_erase = spi_block_erase_c7,
3540 }
3541 },
3542 .unlock = spi_disable_blockprotect,
3543 .write = spi_chip_write_256,
3544 .read = spi_chip_read,
3545 .voltage = {2700, 3600},
3546 },
3547
3548 {
3549 .vendor = "Eon",
3550 .name = "EN25Q128",
3551 .bustype = CHIP_BUSTYPE_SPI,
3552 .manufacture_id = EON_ID_NOPREFIX,
3553 .model_id = EON_EN25Q128,
3554 .total_size = 16384,
3555 .page_size = 256,
3556 /* TODO: chip features 512-byte one-time programmable region */
3557 .feature_bits = FEATURE_WRSR_WREN,
3558 .tested = TEST_UNTESTED,
3559 .probe = probe_spi_rdid,
3560 .probe_timing = TIMING_ZERO,
3561 .block_erasers =
3562 {
3563 {
3564 .eraseblocks = { {4 * 1024, 4096} },
3565 .block_erase = spi_block_erase_20,
3566 }, {
3567 .eraseblocks = { {64 * 1024, 256} },
3568 .block_erase = spi_block_erase_d8,
3569 }, {
3570 .eraseblocks = { {16 * 1024 * 1024, 1} },
3571 .block_erase = spi_block_erase_60,
3572 }, {
3573 .eraseblocks = { {16 * 1024 * 1024, 1} },
3574 .block_erase = spi_block_erase_c7,
3575 }
3576 },
3577 .unlock = spi_disable_blockprotect,
3578 .write = spi_chip_write_256,
3579 .read = spi_chip_read,
3580 },
3581
3582 {
3583 .vendor = "Eon",
3584 .name = "EN25QH16",
3585 .bustype = CHIP_BUSTYPE_SPI,
3586 .manufacture_id = EON_ID_NOPREFIX,
3587 .model_id = EON_EN25QH16,
3588 .total_size = 2048,
3589 .page_size = 256,
3590 /* TODO: chip features 512-byte one-time programmable region
3591 * and supports SFDP.
3592 */
3593 .feature_bits = FEATURE_WRSR_WREN,
3594 .tested = TEST_UNTESTED,
3595 .probe = probe_spi_rdid,
3596 .probe_timing = TIMING_ZERO,
3597 .block_erasers =
3598 {
3599 {
3600 .eraseblocks = { {4 * 1024, 512} },
3601 .block_erase = spi_block_erase_20,
3602 }, {
3603 .eraseblocks = { {64 * 1024, 32} },
3604 .block_erase = spi_block_erase_d8,
3605 }, {
3606 .eraseblocks = { {1024 * 2048, 1} },
3607 .block_erase = spi_block_erase_60,
3608 }, {
3609 .eraseblocks = { {1024 * 2048, 1} },
3610 .block_erase = spi_block_erase_c7,
3611 }
3612 },
3613 .unlock = spi_disable_blockprotect,
3614 .write = spi_chip_write_256,
3615 .read = spi_chip_read,
3616 .voltage = {2700, 3600},
3617 },
3618
3619 {
3620 .vendor = "Eon",
snelson2b18d0f2010-03-05 08:44:11 +00003621 .name = "EN29F010",
3622 .bustype = CHIP_BUSTYPE_PARALLEL,
3623 .manufacture_id = EON_ID,
mhmd3c80cd2010-09-15 23:31:03 +00003624 .model_id = EON_EN29F010,
snelson2b18d0f2010-03-05 08:44:11 +00003625 .total_size = 128,
3626 .page_size = 128,
3627 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00003628 .tested = TEST_OK_PRE,
snelson2b18d0f2010-03-05 08:44:11 +00003629 .probe = probe_jedec,
3630 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3631 .block_erasers =
3632 {
3633 {
3634 .eraseblocks = { {16 * 1024, 8} },
3635 .block_erase = erase_sector_jedec,
3636 },
3637 {
3638 .eraseblocks = { {128 * 1024, 1} },
3639 .block_erase = erase_chip_block_jedec,
3640 },
3641 },
3642 .write = write_jedec_1,
3643 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00003644 .voltage = {4500, 5500},
snelson2b18d0f2010-03-05 08:44:11 +00003645 },
3646
3647 {
hailfinger61958912010-07-28 22:20:20 +00003648 .vendor = "Eon",
stepanaa1b6a22008-12-08 18:15:10 +00003649 .name = "EN29F002(A)(N)B",
3650 .bustype = CHIP_BUSTYPE_PARALLEL,
3651 .manufacture_id = EON_ID,
mhmd3c80cd2010-09-15 23:31:03 +00003652 .model_id = EON_EN29F002B,
stepanaa1b6a22008-12-08 18:15:10 +00003653 .total_size = 256,
3654 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00003655 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00003656 .tested = TEST_OK_PR,
stepanaa1b6a22008-12-08 18:15:10 +00003657 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00003658 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson1c03aa12009-12-23 17:05:59 +00003659 .block_erasers =
3660 {
3661 {
3662 .eraseblocks = {
snelson1c03aa12009-12-23 17:05:59 +00003663 {16 * 1024, 1},
mkarcher8dc09ff2010-03-13 23:47:09 +00003664 {8 * 1024, 2},
3665 {32 * 1024, 1},
3666 {64 * 1024, 3},
snelson1c03aa12009-12-23 17:05:59 +00003667 },
3668 .block_erase = erase_sector_jedec,
3669 }, {
3670 .eraseblocks = { {256 * 1024, 1} },
3671 .block_erase = erase_chip_block_jedec,
3672 },
3673 },
hailfingerfff99532009-11-27 17:49:42 +00003674 .write = write_jedec_1,
stepanaa1b6a22008-12-08 18:15:10 +00003675 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00003676 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00003677 },
3678
3679 {
hailfinger61958912010-07-28 22:20:20 +00003680 .vendor = "Eon",
stepanaa1b6a22008-12-08 18:15:10 +00003681 .name = "EN29F002(A)(N)T",
3682 .bustype = CHIP_BUSTYPE_PARALLEL,
3683 .manufacture_id = EON_ID,
mhmd3c80cd2010-09-15 23:31:03 +00003684 .model_id = EON_EN29F002T,
stepanaa1b6a22008-12-08 18:15:10 +00003685 .total_size = 256,
3686 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00003687 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00003688 .tested = TEST_OK_PR,
stepanaa1b6a22008-12-08 18:15:10 +00003689 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00003690 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson1c03aa12009-12-23 17:05:59 +00003691 .block_erasers =
3692 {
3693 {
3694 .eraseblocks = {
snelson1c03aa12009-12-23 17:05:59 +00003695 {64 * 1024, 3},
mkarcher8dc09ff2010-03-13 23:47:09 +00003696 {32 * 1024, 1},
3697 {8 * 1024, 2},
3698 {16 * 1024, 1},
snelson1c03aa12009-12-23 17:05:59 +00003699 },
3700 .block_erase = erase_sector_jedec,
3701 }, {
3702 .eraseblocks = { {256 * 1024, 1} },
3703 .block_erase = erase_chip_block_jedec,
3704 },
3705 },
hailfingerfff99532009-11-27 17:49:42 +00003706 .write = write_jedec_1,
stepanaa1b6a22008-12-08 18:15:10 +00003707 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00003708 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00003709 },
3710
3711 {
3712 .vendor = "Fujitsu",
3713 .name = "MBM29F004BC",
hailfingera5245512009-06-28 19:19:25 +00003714 .bustype = CHIP_BUSTYPE_PARALLEL,
stepanaa1b6a22008-12-08 18:15:10 +00003715 .manufacture_id = FUJITSU_ID,
mhmd3c80cd2010-09-15 23:31:03 +00003716 .model_id = FUJITSU_MBM29F004BC,
stepanaa1b6a22008-12-08 18:15:10 +00003717 .total_size = 512,
3718 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00003719 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
stepanaa1b6a22008-12-08 18:15:10 +00003720 .tested = TEST_UNTESTED,
3721 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00003722 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson1c03aa12009-12-23 17:05:59 +00003723 .block_erasers =
3724 {
3725 {
3726 .eraseblocks = {
3727 {16 * 1024, 1},
3728 {8 * 1024, 2},
3729 {32 * 1024, 1},
3730 {64 * 1024, 7},
3731 },
snelsonc6855342010-01-28 23:55:12 +00003732 .block_erase = erase_sector_jedec,
snelson1c03aa12009-12-23 17:05:59 +00003733 }, {
3734 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00003735 .block_erase = erase_chip_block_jedec,
snelson1c03aa12009-12-23 17:05:59 +00003736 },
3737 },
stepanaa1b6a22008-12-08 18:15:10 +00003738 .write = NULL,
3739 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00003740 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00003741 },
3742
3743 {
3744 .vendor = "Fujitsu",
3745 .name = "MBM29F004TC",
hailfingera5245512009-06-28 19:19:25 +00003746 .bustype = CHIP_BUSTYPE_PARALLEL,
stepanaa1b6a22008-12-08 18:15:10 +00003747 .manufacture_id = FUJITSU_ID,
mhmd3c80cd2010-09-15 23:31:03 +00003748 .model_id = FUJITSU_MBM29F004TC,
stepanaa1b6a22008-12-08 18:15:10 +00003749 .total_size = 512,
3750 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00003751 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
stepanaa1b6a22008-12-08 18:15:10 +00003752 .tested = TEST_UNTESTED,
3753 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00003754 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson1c03aa12009-12-23 17:05:59 +00003755 .block_erasers =
3756 {
3757 {
3758 .eraseblocks = {
3759 {64 * 1024, 7},
3760 {32 * 1024, 1},
3761 {8 * 1024, 2},
3762 {16 * 1024, 1},
3763 },
snelsonc6855342010-01-28 23:55:12 +00003764 .block_erase = erase_sector_jedec,
snelson1c03aa12009-12-23 17:05:59 +00003765 }, {
3766 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00003767 .block_erase = erase_chip_block_jedec,
snelson1c03aa12009-12-23 17:05:59 +00003768 },
3769 },
stepanaa1b6a22008-12-08 18:15:10 +00003770 .write = NULL,
3771 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00003772 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00003773 },
3774
3775 {
snelsonc6855342010-01-28 23:55:12 +00003776 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
stepanaa1b6a22008-12-08 18:15:10 +00003777 .vendor = "Fujitsu",
3778 .name = "MBM29F400BC",
hailfingera5245512009-06-28 19:19:25 +00003779 .bustype = CHIP_BUSTYPE_PARALLEL,
stepanaa1b6a22008-12-08 18:15:10 +00003780 .manufacture_id = FUJITSU_ID,
mhmd3c80cd2010-09-15 23:31:03 +00003781 .model_id = FUJITSU_MBM29F400BC,
stepanaa1b6a22008-12-08 18:15:10 +00003782 .total_size = 512,
3783 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00003784 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
hailfinger86bf3b52010-10-13 21:49:30 +00003785 .tested = TEST_UNTESTED,
stepanaa1b6a22008-12-08 18:15:10 +00003786 .probe = probe_m29f400bt,
uwe37f43422011-06-19 17:23:55 +00003787 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
snelson1c03aa12009-12-23 17:05:59 +00003788 .block_erasers =
3789 {
3790 {
3791 .eraseblocks = {
3792 {16 * 1024, 1},
3793 {8 * 1024, 2},
3794 {32 * 1024, 1},
3795 {64 * 1024, 7},
3796 },
3797 .block_erase = block_erase_m29f400bt,
3798 }, {
3799 .eraseblocks = { {512 * 1024, 1} },
3800 .block_erase = block_erase_chip_m29f400bt,
3801 },
3802 },
hailfinger86bf3b52010-10-13 21:49:30 +00003803 .write = write_m29f400bt,
stepanaa1b6a22008-12-08 18:15:10 +00003804 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00003805 .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
stepanaa1b6a22008-12-08 18:15:10 +00003806 },
3807
hailfinger286829b2009-01-08 03:40:17 +00003808 {
3809 .vendor = "Fujitsu",
3810 .name = "MBM29F400TC",
hailfingera5245512009-06-28 19:19:25 +00003811 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00003812 .manufacture_id = FUJITSU_ID,
mhmd3c80cd2010-09-15 23:31:03 +00003813 .model_id = FUJITSU_MBM29F400TC,
hailfinger286829b2009-01-08 03:40:17 +00003814 .total_size = 512,
3815 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00003816 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00003817 .tested = TEST_UNTESTED,
3818 .probe = probe_m29f400bt,
uwe37f43422011-06-19 17:23:55 +00003819 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
snelson1c03aa12009-12-23 17:05:59 +00003820 .block_erasers =
3821 {
3822 {
3823 .eraseblocks = {
3824 {64 * 1024, 7},
3825 {32 * 1024, 1},
3826 {8 * 1024, 2},
3827 {16 * 1024, 1},
3828 },
3829 .block_erase = block_erase_m29f400bt,
3830 }, {
3831 .eraseblocks = { {512 * 1024, 1} },
3832 .block_erase = block_erase_chip_m29f400bt,
3833 },
3834 },
hailfingerfa513302010-07-16 22:07:20 +00003835 .write = write_m29f400bt,
hailfinger23060112009-05-08 12:49:03 +00003836 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00003837 .voltage = {4750, 5250}, /* 4.75-5.25V for type -55, others 4.5-5.5V */
stepanaa1b6a22008-12-08 18:15:10 +00003838 },
3839
hailfinger286829b2009-01-08 03:40:17 +00003840 {
hailfingerc6950ad2010-06-21 16:12:22 +00003841 .vendor = "Hyundai",
3842 .name = "HY29F002T",
3843 .bustype = CHIP_BUSTYPE_PARALLEL,
3844 .manufacture_id = HYUNDAI_ID,
mhmd3c80cd2010-09-15 23:31:03 +00003845 .model_id = HYUNDAI_HY29F002T,
hailfingerc6950ad2010-06-21 16:12:22 +00003846 .total_size = 256,
3847 .page_size = 256 * 1024,
3848 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
hailfingerd217d122010-10-08 18:52:29 +00003849 .tested = TEST_OK_PRE,
hailfingerc6950ad2010-06-21 16:12:22 +00003850 .probe = probe_jedec,
3851 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3852 .block_erasers =
3853 {
3854 {
3855 .eraseblocks = {
3856 {64 * 1024, 3},
3857 {32 * 1024, 1},
3858 {8 * 1024, 2},
3859 {16 * 1024, 1},
3860 },
3861 .block_erase = erase_sector_jedec,
3862 }, {
3863 .eraseblocks = { {256 * 1024, 1} },
3864 .block_erase = erase_chip_block_jedec,
3865 },
3866 },
3867 .write = write_jedec_1,
3868 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00003869 .voltage = {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
hailfingerc6950ad2010-06-21 16:12:22 +00003870 },
3871
3872 {
3873 .vendor = "Hyundai",
3874 .name = "HY29F002B",
3875 .bustype = CHIP_BUSTYPE_PARALLEL,
3876 .manufacture_id = HYUNDAI_ID,
mhmd3c80cd2010-09-15 23:31:03 +00003877 .model_id = HYUNDAI_HY29F002B,
hailfingerc6950ad2010-06-21 16:12:22 +00003878 .total_size = 256,
3879 .page_size = 256 * 1024,
3880 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
3881 .tested = TEST_UNTESTED,
3882 .probe = probe_jedec,
3883 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3884 .block_erasers =
3885 {
3886 {
3887 .eraseblocks = {
3888 {16 * 1024, 1},
3889 {8 * 1024, 2},
3890 {32 * 1024, 1},
3891 {64 * 1024, 3},
3892 },
3893 .block_erase = erase_sector_jedec,
3894 }, {
3895 .eraseblocks = { {256 * 1024, 1} },
3896 .block_erase = erase_chip_block_jedec,
3897 },
3898 },
3899 .write = write_jedec_1,
3900 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00003901 .voltage = {4750, 5250}, /* 4.75-5.25V for type -45, others 4.5-5.5V */
hailfingerc6950ad2010-06-21 16:12:22 +00003902 },
3903
3904 {
mhme8e87912010-09-16 00:51:51 +00003905 .vendor = "Hyundai",
3906 .name = "HY29F040A",
3907 .bustype = CHIP_BUSTYPE_PARALLEL,
3908 .manufacture_id = HYUNDAI_ID,
3909 .model_id = HYUNDAI_HY29F040A,
3910 .total_size = 512,
3911 .page_size = 64 * 1024,
3912 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3913 .tested = TEST_UNTESTED,
3914 .probe = probe_jedec,
3915 .probe_timing = TIMING_ZERO,
3916 .block_erasers =
3917 {
3918 {
3919 .eraseblocks = { {64 * 1024, 8} },
3920 .block_erase = erase_sector_jedec,
3921 }, {
3922 .eraseblocks = { {512 * 1024, 1} },
3923 .block_erase = erase_chip_block_jedec,
3924 },
3925 },
3926 .write = write_jedec_1,
3927 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00003928 .voltage = {4500, 5500},
mhme8e87912010-09-16 00:51:51 +00003929 },
3930
3931 {
hailfinger286829b2009-01-08 03:40:17 +00003932 .vendor = "Intel",
mhm54b83562010-10-05 20:28:36 +00003933 .name = "28F001BN/BX-B",
hailfingerdaecf7e2009-06-05 08:47:37 +00003934 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingerd4d97b92009-05-29 12:55:31 +00003935 .manufacture_id = INTEL_ID,
mhm54b83562010-10-05 20:28:36 +00003936 .model_id = INTEL_28F001B,
hailfingerd4d97b92009-05-29 12:55:31 +00003937 .total_size = 128,
3938 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
snelsona013bf62010-03-22 04:39:31 +00003939 .tested = TEST_UNTESTED,
hailfingerd4d97b92009-05-29 12:55:31 +00003940 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00003941 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson2d471072010-01-09 05:30:14 +00003942 .block_erasers =
3943 {
3944 {
3945 .eraseblocks = {
3946 {8 * 1024, 1},
3947 {4 * 1024, 2},
3948 {112 * 1024, 1},
3949 },
snelsonc0acbeb2010-03-19 18:47:06 +00003950 .block_erase = erase_block_82802ab,
snelson2d471072010-01-09 05:30:14 +00003951 },
3952 },
snelsona013bf62010-03-22 04:39:31 +00003953 .write = write_82802ab,
hailfingerd4d97b92009-05-29 12:55:31 +00003954 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00003955 .voltage = {4500, 5500},
hailfingerd4d97b92009-05-29 12:55:31 +00003956 },
3957
3958 {
3959 .vendor = "Intel",
mhm54b83562010-10-05 20:28:36 +00003960 .name = "28F001BN/BX-T",
hailfingerdaecf7e2009-06-05 08:47:37 +00003961 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingerd4d97b92009-05-29 12:55:31 +00003962 .manufacture_id = INTEL_ID,
mhm54b83562010-10-05 20:28:36 +00003963 .model_id = INTEL_28F001T,
hailfingerd4d97b92009-05-29 12:55:31 +00003964 .total_size = 128,
3965 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
snelsona013bf62010-03-22 04:39:31 +00003966 .tested = TEST_UNTESTED,
hailfingerd4d97b92009-05-29 12:55:31 +00003967 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00003968 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson2d471072010-01-09 05:30:14 +00003969 .block_erasers =
3970 {
3971 {
3972 .eraseblocks = {
3973 {112 * 1024, 1},
3974 {4 * 1024, 2},
3975 {8 * 1024, 1},
3976 },
snelsonc0acbeb2010-03-19 18:47:06 +00003977 .block_erase = erase_block_82802ab,
snelson2d471072010-01-09 05:30:14 +00003978 },
3979 },
snelsona013bf62010-03-22 04:39:31 +00003980 .write = write_82802ab,
hailfingerd4d97b92009-05-29 12:55:31 +00003981 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00003982 .voltage = {4500, 5500},
hailfingerd4d97b92009-05-29 12:55:31 +00003983 },
3984
3985 {
3986 .vendor = "Intel",
mhm54b83562010-10-05 20:28:36 +00003987 .name = "28F002BC/BL/BV/BX-T",
hailfingerf1f559e2010-07-22 15:20:43 +00003988 .bustype = CHIP_BUSTYPE_PARALLEL,
3989 .manufacture_id = INTEL_ID,
mhm54b83562010-10-05 20:28:36 +00003990 .model_id = INTEL_28F002T,
hailfingerf1f559e2010-07-22 15:20:43 +00003991 .total_size = 256,
3992 .page_size = 256 * 1024,
hailfingerd217d122010-10-08 18:52:29 +00003993 .tested = TEST_OK_PRE,
hailfingerf1f559e2010-07-22 15:20:43 +00003994 .probe = probe_82802ab,
3995 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3996 .block_erasers =
3997 {
3998 {
3999 .eraseblocks = {
4000 {128 * 1024, 1},
4001 {96 * 1024, 1},
4002 {8 * 1024, 2},
4003 {16 * 1024, 1},
4004 },
4005 .block_erase = erase_block_82802ab,
4006 },
4007 },
4008 .write = write_82802ab,
4009 .read = read_memmapped,
4010 },
4011
4012 {
4013 .vendor = "Intel",
mhm54b83562010-10-05 20:28:36 +00004014 .name = "28F008S3/S5/SC",
snelsonee09b3d2010-02-13 18:41:53 +00004015 .bustype = CHIP_BUSTYPE_PARALLEL,
4016 .manufacture_id = INTEL_ID,
mhm54b83562010-10-05 20:28:36 +00004017 .model_id = INTEL_28F004S3,
snelsonee09b3d2010-02-13 18:41:53 +00004018 .total_size = 512,
4019 .page_size = 256,
4020 .tested = TEST_UNTESTED,
4021 .probe = probe_82802ab,
4022 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsonee09b3d2010-02-13 18:41:53 +00004023 .block_erasers =
4024 {
4025 {
4026 .eraseblocks = { {64 * 1024, 8} },
snelsonc0acbeb2010-03-19 18:47:06 +00004027 .block_erase = erase_block_82802ab,
snelsonee09b3d2010-02-13 18:41:53 +00004028 },
4029 },
snelsona013bf62010-03-22 04:39:31 +00004030 .unlock = unlock_28f004s5,
snelsonee09b3d2010-02-13 18:41:53 +00004031 .write = write_82802ab,
4032 .read = read_memmapped,
4033 },
4034
4035 {
4036 .vendor = "Intel",
mhm54b83562010-10-05 20:28:36 +00004037 .name = "28F004B5/BE/BV/BX-B",
mkarcher9ded5fe2010-04-03 10:27:08 +00004038 .bustype = CHIP_BUSTYPE_PARALLEL,
4039 .manufacture_id = INTEL_ID,
mhm54b83562010-10-05 20:28:36 +00004040 .model_id = INTEL_28F004B,
mkarcher9ded5fe2010-04-03 10:27:08 +00004041 .total_size = 512,
4042 .page_size = 128 * 1024, /* maximal block size */
4043 .tested = TEST_UNTESTED,
4044 .probe = probe_82802ab,
4045 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4046 .block_erasers =
4047 {
4048 {
4049 .eraseblocks = {
4050 {16 * 1024, 1},
4051 {8 * 1024, 2},
4052 {96 * 1024, 1},
4053 {128 * 1024, 3},
4054 },
4055 .block_erase = erase_block_82802ab,
4056 },
4057 },
4058 .write = write_82802ab,
4059 .read = read_memmapped,
4060 },
4061
4062 {
4063 .vendor = "Intel",
mhm54b83562010-10-05 20:28:36 +00004064 .name = "28F004B5/BE/BV/BX-T",
mkarcher9ded5fe2010-04-03 10:27:08 +00004065 .bustype = CHIP_BUSTYPE_PARALLEL,
4066 .manufacture_id = INTEL_ID,
mhm54b83562010-10-05 20:28:36 +00004067 .model_id = INTEL_28F004T,
mkarcher9ded5fe2010-04-03 10:27:08 +00004068 .total_size = 512,
4069 .page_size = 128 * 1024, /* maximal block size */
4070 .tested = TEST_UNTESTED,
4071 .probe = probe_82802ab,
4072 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4073 .block_erasers =
4074 {
4075 {
4076 .eraseblocks = {
4077 {128 * 1024, 3},
4078 {96 * 1024, 1},
4079 {8 * 1024, 2},
4080 {16 * 1024, 1},
4081 },
4082 .block_erase = erase_block_82802ab,
4083 },
4084 },
4085 .write = write_82802ab,
4086 .read = read_memmapped,
4087 },
4088
4089 {
4090 .vendor = "Intel",
mhm54b83562010-10-05 20:28:36 +00004091 .name = "28F400BV/BX/CE/CV-B",
mkarcher9ded5fe2010-04-03 10:27:08 +00004092 .bustype = CHIP_BUSTYPE_PARALLEL,
4093 .manufacture_id = INTEL_ID,
mhm54b83562010-10-05 20:28:36 +00004094 .model_id = INTEL_28F400B,
mkarcher9ded5fe2010-04-03 10:27:08 +00004095 .total_size = 512,
4096 .page_size = 128 * 1024, /* maximal block size */
4097 .feature_bits = FEATURE_ADDR_SHIFTED,
4098 .tested = TEST_UNTESTED,
4099 .probe = probe_82802ab,
4100 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4101 .block_erasers =
4102 {
4103 {
4104 .eraseblocks = {
4105 {16 * 1024, 1},
4106 {8 * 1024, 2},
4107 {96 * 1024, 1},
4108 {128 * 1024, 3},
4109 },
4110 .block_erase = erase_block_82802ab,
4111 },
4112 },
4113 .write = write_82802ab,
4114 .read = read_memmapped,
4115 },
4116
4117 {
4118 .vendor = "Intel",
mhm54b83562010-10-05 20:28:36 +00004119 .name = "28F400BV/BX/CE/CV-T",
mkarcher9ded5fe2010-04-03 10:27:08 +00004120 .bustype = CHIP_BUSTYPE_PARALLEL,
4121 .manufacture_id = INTEL_ID,
mhm54b83562010-10-05 20:28:36 +00004122 .model_id = INTEL_28F400T,
mkarcher9ded5fe2010-04-03 10:27:08 +00004123 .total_size = 512,
4124 .page_size = 128 * 1024, /* maximal block size */
4125 .feature_bits = FEATURE_ADDR_SHIFTED,
4126 .tested = TEST_UNTESTED,
4127 .probe = probe_82802ab,
4128 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4129 .block_erasers =
4130 {
4131 {
4132 .eraseblocks = {
4133 {128 * 1024, 3},
4134 {96 * 1024, 1},
4135 {8 * 1024, 2},
4136 {16 * 1024, 1},
4137 },
4138 .block_erase = erase_block_82802ab,
4139 },
4140 },
4141 .write = write_82802ab,
4142 .read = read_memmapped,
4143 },
4144
4145 {
4146 .vendor = "Intel",
hailfinger286829b2009-01-08 03:40:17 +00004147 .name = "82802AB",
hailfingerc391ccb2009-06-12 11:45:10 +00004148 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00004149 .manufacture_id = INTEL_ID,
mhm54b83562010-10-05 20:28:36 +00004150 .model_id = INTEL_82802AB,
hailfinger286829b2009-01-08 03:40:17 +00004151 .total_size = 512,
4152 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00004153 .feature_bits = FEATURE_REGISTERMAP,
stefanct312d9ff2011-06-12 19:47:55 +00004154 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00004155 .probe = probe_82802ab,
hailfingere3095d92009-06-05 13:46:17 +00004156 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
snelson2d471072010-01-09 05:30:14 +00004157 .block_erasers =
4158 {
4159 {
4160 .eraseblocks = { {64 * 1024, 8} },
snelsonc0acbeb2010-03-19 18:47:06 +00004161 .block_erase = erase_block_82802ab,
snelson2d471072010-01-09 05:30:14 +00004162 },
4163 },
snelsonc0acbeb2010-03-19 18:47:06 +00004164 .unlock = unlock_82802ab,
hailfinger286829b2009-01-08 03:40:17 +00004165 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00004166 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00004167 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00004168 },
4169
hailfinger286829b2009-01-08 03:40:17 +00004170 {
4171 .vendor = "Intel",
4172 .name = "82802AC",
hailfingerc391ccb2009-06-12 11:45:10 +00004173 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00004174 .manufacture_id = INTEL_ID,
mhm54b83562010-10-05 20:28:36 +00004175 .model_id = INTEL_82802AC,
hailfinger286829b2009-01-08 03:40:17 +00004176 .total_size = 1024,
4177 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00004178 .feature_bits = FEATURE_REGISTERMAP,
snelsonc0acbeb2010-03-19 18:47:06 +00004179 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00004180 .probe = probe_82802ab,
hailfingere3095d92009-06-05 13:46:17 +00004181 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
snelson2d471072010-01-09 05:30:14 +00004182 .block_erasers =
4183 {
4184 {
4185 .eraseblocks = { {64 * 1024, 16} },
snelsonc0acbeb2010-03-19 18:47:06 +00004186 .block_erase = erase_block_82802ab,
snelson2d471072010-01-09 05:30:14 +00004187 },
4188 },
snelsonc0acbeb2010-03-19 18:47:06 +00004189 .unlock = unlock_82802ab,
hailfinger286829b2009-01-08 03:40:17 +00004190 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00004191 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00004192 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00004193 },
4194
hailfinger286829b2009-01-08 03:40:17 +00004195 {
4196 .vendor = "Macronix",
4197 .name = "MX25L512",
hailfinger40167462009-05-31 17:57:34 +00004198 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004199 .manufacture_id = MACRONIX_ID,
4200 .model_id = MACRONIX_MX25L512,
hailfinger286829b2009-01-08 03:40:17 +00004201 .total_size = 64,
4202 .page_size = 256,
hailfingerbc5a1c72010-09-03 03:35:48 +00004203 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00004204 .tested = TEST_UNTESTED,
4205 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004206 .probe_timing = TIMING_ZERO,
hailfinger7df21362009-09-05 02:30:58 +00004207 .block_erasers =
4208 {
4209 {
4210 .eraseblocks = { {4 * 1024, 16} },
4211 .block_erase = spi_block_erase_20,
hailfinger91cf1032009-10-01 13:15:01 +00004212 }, {
hailfinger7df21362009-09-05 02:30:58 +00004213 .eraseblocks = { {64 * 1024, 1} },
4214 .block_erase = spi_block_erase_52,
hailfinger91cf1032009-10-01 13:15:01 +00004215 }, {
hailfinger7df21362009-09-05 02:30:58 +00004216 .eraseblocks = { {64 * 1024, 1} },
4217 .block_erase = spi_block_erase_d8,
hailfinger91cf1032009-10-01 13:15:01 +00004218 }, {
hailfinger7df21362009-09-05 02:30:58 +00004219 .eraseblocks = { {64 * 1024, 1} },
4220 .block_erase = spi_block_erase_60,
hailfinger91cf1032009-10-01 13:15:01 +00004221 }, {
hailfinger7df21362009-09-05 02:30:58 +00004222 .eraseblocks = { {64 * 1024, 1} },
4223 .block_erase = spi_block_erase_c7,
4224 },
4225 },
hailfingerb9560ee2010-07-14 20:21:22 +00004226 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004227 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004228 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00004229 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00004230 },
4231
hailfinger286829b2009-01-08 03:40:17 +00004232 {
4233 .vendor = "Macronix",
4234 .name = "MX25L1005",
hailfinger40167462009-05-31 17:57:34 +00004235 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004236 .manufacture_id = MACRONIX_ID,
4237 .model_id = MACRONIX_MX25L1005,
hailfinger286829b2009-01-08 03:40:17 +00004238 .total_size = 128,
4239 .page_size = 256,
hailfingerbc5a1c72010-09-03 03:35:48 +00004240 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00004241 .tested = TEST_UNTESTED,
4242 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004243 .probe_timing = TIMING_ZERO,
hailfinger7df21362009-09-05 02:30:58 +00004244 .block_erasers =
4245 {
4246 {
4247 .eraseblocks = { {4 * 1024, 32} },
4248 .block_erase = spi_block_erase_20,
hailfinger91cf1032009-10-01 13:15:01 +00004249 }, {
hailfinger7df21362009-09-05 02:30:58 +00004250 .eraseblocks = { {64 * 1024, 2} },
4251 .block_erase = spi_block_erase_d8,
hailfinger91cf1032009-10-01 13:15:01 +00004252 }, {
hailfinger7df21362009-09-05 02:30:58 +00004253 .eraseblocks = { {128 * 1024, 1} },
4254 .block_erase = spi_block_erase_60,
hailfinger91cf1032009-10-01 13:15:01 +00004255 }, {
hailfinger7df21362009-09-05 02:30:58 +00004256 .eraseblocks = { {128 * 1024, 1} },
4257 .block_erase = spi_block_erase_c7,
4258 },
4259 },
hailfingerb9560ee2010-07-14 20:21:22 +00004260 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004261 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004262 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00004263 .voltage = {2700, 3600},
David Hendricksf8f00c72011-02-01 12:39:46 -08004264 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00004265 },
4266
hailfinger286829b2009-01-08 03:40:17 +00004267 {
4268 .vendor = "Macronix",
4269 .name = "MX25L2005",
hailfinger40167462009-05-31 17:57:34 +00004270 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004271 .manufacture_id = MACRONIX_ID,
4272 .model_id = MACRONIX_MX25L2005,
hailfinger286829b2009-01-08 03:40:17 +00004273 .total_size = 256,
4274 .page_size = 256,
hailfingerbc5a1c72010-09-03 03:35:48 +00004275 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00004276 .tested = TEST_UNTESTED,
4277 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004278 .probe_timing = TIMING_ZERO,
hailfinger91cf1032009-10-01 13:15:01 +00004279 .block_erasers =
4280 {
4281 {
4282 .eraseblocks = { {4 * 1024, 64} },
4283 .block_erase = spi_block_erase_20,
4284 }, {
4285 .eraseblocks = { {64 * 1024, 4} },
4286 .block_erase = spi_block_erase_52,
4287 }, {
4288 .eraseblocks = { {64 * 1024, 4} },
4289 .block_erase = spi_block_erase_d8,
4290 }, {
4291 .eraseblocks = { {256 * 1024, 1} },
4292 .block_erase = spi_block_erase_60,
4293 }, {
4294 .eraseblocks = { {256 * 1024, 1} },
4295 .block_erase = spi_block_erase_c7,
4296 },
4297 },
hailfingerb9560ee2010-07-14 20:21:22 +00004298 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004299 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004300 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00004301 .voltage = {2700, 3600},
David Hendricksf8f00c72011-02-01 12:39:46 -08004302 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00004303 },
4304
hailfinger286829b2009-01-08 03:40:17 +00004305 {
4306 .vendor = "Macronix",
4307 .name = "MX25L4005",
hailfinger40167462009-05-31 17:57:34 +00004308 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004309 .manufacture_id = MACRONIX_ID,
4310 .model_id = MACRONIX_MX25L4005,
hailfinger286829b2009-01-08 03:40:17 +00004311 .total_size = 512,
4312 .page_size = 256,
hailfingerbc5a1c72010-09-03 03:35:48 +00004313 .feature_bits = FEATURE_WRSR_WREN,
stefanct896d61e2011-06-04 13:13:34 +00004314 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00004315 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004316 .probe_timing = TIMING_ZERO,
hailfinger91cf1032009-10-01 13:15:01 +00004317 .block_erasers =
4318 {
4319 {
4320 .eraseblocks = { {4 * 1024, 128} },
4321 .block_erase = spi_block_erase_20,
4322 }, {
4323 .eraseblocks = { {64 * 1024, 8} },
4324 .block_erase = spi_block_erase_52,
4325 }, {
4326 .eraseblocks = { {64 * 1024, 8} },
4327 .block_erase = spi_block_erase_d8,
4328 }, {
4329 .eraseblocks = { {512 * 1024, 1} },
4330 .block_erase = spi_block_erase_60,
4331 }, {
4332 .eraseblocks = { {512 * 1024, 1} },
4333 .block_erase = spi_block_erase_c7,
4334 },
4335 },
hailfingerb9560ee2010-07-14 20:21:22 +00004336 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004337 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004338 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00004339 .voltage = {2700, 3600},
David Hendricksf8f00c72011-02-01 12:39:46 -08004340 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00004341 },
4342
hailfinger286829b2009-01-08 03:40:17 +00004343 {
4344 .vendor = "Macronix",
4345 .name = "MX25L8005",
hailfinger40167462009-05-31 17:57:34 +00004346 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004347 .manufacture_id = MACRONIX_ID,
4348 .model_id = MACRONIX_MX25L8005,
hailfinger286829b2009-01-08 03:40:17 +00004349 .total_size = 1024,
4350 .page_size = 256,
hailfingerbc5a1c72010-09-03 03:35:48 +00004351 .feature_bits = FEATURE_WRSR_WREN,
stefanctf4eea092011-05-18 01:31:03 +00004352 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00004353 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004354 .probe_timing = TIMING_ZERO,
hailfinger91cf1032009-10-01 13:15:01 +00004355 .block_erasers =
4356 {
4357 {
4358 .eraseblocks = { {4 * 1024, 256} },
4359 .block_erase = spi_block_erase_20,
4360 }, {
4361 .eraseblocks = { {64 * 1024, 16} },
4362 .block_erase = spi_block_erase_52,
4363 }, {
4364 .eraseblocks = { {64 * 1024, 16} },
4365 .block_erase = spi_block_erase_d8,
4366 }, {
4367 .eraseblocks = { {1024 * 1024, 1} },
4368 .block_erase = spi_block_erase_60,
4369 }, {
4370 .eraseblocks = { {1024 * 1024, 1} },
4371 .block_erase = spi_block_erase_c7,
4372 },
4373 },
hailfingerb9560ee2010-07-14 20:21:22 +00004374 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004375 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004376 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00004377 .voltage = {2700, 3600},
David Hendricksf8f00c72011-02-01 12:39:46 -08004378 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00004379 },
4380
hailfinger286829b2009-01-08 03:40:17 +00004381 {
4382 .vendor = "Macronix",
4383 .name = "MX25L1605",
hailfinger40167462009-05-31 17:57:34 +00004384 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004385 .manufacture_id = MACRONIX_ID,
4386 .model_id = MACRONIX_MX25L1605,
hailfinger286829b2009-01-08 03:40:17 +00004387 .total_size = 2048,
4388 .page_size = 256,
hailfingerbc5a1c72010-09-03 03:35:48 +00004389 .feature_bits = FEATURE_WRSR_WREN,
hailfinger6321c562011-03-07 10:59:06 +00004390 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00004391 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004392 .probe_timing = TIMING_ZERO,
hailfinger91cf1032009-10-01 13:15:01 +00004393 .block_erasers =
4394 {
4395 {
4396 .eraseblocks = { {4 * 1024, 512} },
4397 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
4398 }, {
4399 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
4400 .block_erase = spi_block_erase_52,
4401 }, {
4402 .eraseblocks = { {64 * 1024, 32} },
4403 .block_erase = spi_block_erase_d8,
4404 }, {
4405 .eraseblocks = { {2 * 1024 * 1024, 1} },
4406 .block_erase = spi_block_erase_60,
4407 }, {
4408 .eraseblocks = { {2 * 1024 * 1024, 1} },
4409 .block_erase = spi_block_erase_c7,
4410 },
4411 },
hailfingerb9560ee2010-07-14 20:21:22 +00004412 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004413 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004414 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00004415 .voltage = {2700, 3600},
David Hendricksf8f00c72011-02-01 12:39:46 -08004416 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00004417 },
4418
hailfinger286829b2009-01-08 03:40:17 +00004419 {
4420 .vendor = "Macronix",
hailfinger0a2fef02009-04-19 23:04:00 +00004421 .name = "MX25L1635D",
hailfinger40167462009-05-31 17:57:34 +00004422 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004423 .manufacture_id = MACRONIX_ID,
4424 .model_id = MACRONIX_MX25L1635D,
hailfinger0a2fef02009-04-19 23:04:00 +00004425 .total_size = 2048,
4426 .page_size = 256,
hailfingerbc5a1c72010-09-03 03:35:48 +00004427 .feature_bits = FEATURE_WRSR_WREN,
hailfinger0a2fef02009-04-19 23:04:00 +00004428 .tested = TEST_UNTESTED,
4429 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004430 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00004431 .block_erasers =
4432 {
4433 {
4434 .eraseblocks = { {4 * 1024, 512} },
4435 .block_erase = spi_block_erase_20,
4436 }, {
4437 .eraseblocks = { {64 * 1024, 32} },
4438 .block_erase = spi_block_erase_d8,
4439 }, {
4440 .eraseblocks = { {2 * 1024 * 1024, 1} },
4441 .block_erase = spi_block_erase_60,
4442 }, {
4443 .eraseblocks = { {2 * 1024 * 1024, 1} },
4444 .block_erase = spi_block_erase_c7,
4445 }
4446 },
hailfingerb9560ee2010-07-14 20:21:22 +00004447 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004448 .write = spi_chip_write_256,
hailfinger0a2fef02009-04-19 23:04:00 +00004449 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00004450 .voltage = {2700, 3600},
hailfinger0a2fef02009-04-19 23:04:00 +00004451 },
hailfingerf1255892009-04-20 22:54:13 +00004452
hailfinger0a2fef02009-04-19 23:04:00 +00004453 {
4454 .vendor = "Macronix",
uwef926ca22010-09-13 19:59:28 +00004455 .name = "MX25L1635E",
4456 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004457 .manufacture_id = MACRONIX_ID,
4458 .model_id = MACRONIX_MX25L1635E,
uwef926ca22010-09-13 19:59:28 +00004459 .total_size = 2048,
4460 .page_size = 256,
4461 .feature_bits = FEATURE_WRSR_WREN,
4462 .tested = TEST_UNTESTED,
4463 .probe = probe_spi_rdid,
4464 .probe_timing = TIMING_ZERO,
4465 .block_erasers =
4466 {
4467 {
4468 .eraseblocks = { {4 * 1024, 512} },
4469 .block_erase = spi_block_erase_20,
4470 }, {
4471 .eraseblocks = { {64 * 1024, 32} },
4472 .block_erase = spi_block_erase_d8,
4473 }, {
4474 .eraseblocks = { {2 * 1024 * 1024, 1} },
4475 .block_erase = spi_block_erase_60,
4476 }, {
4477 .eraseblocks = { {2 * 1024 * 1024, 1} },
4478 .block_erase = spi_block_erase_c7,
4479 }
4480 },
4481 .unlock = spi_disable_blockprotect,
4482 .write = spi_chip_write_256,
4483 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00004484 .voltage = {2700, 3600},
uwef926ca22010-09-13 19:59:28 +00004485 },
4486
4487 {
4488 .vendor = "Macronix",
hailfinger286829b2009-01-08 03:40:17 +00004489 .name = "MX25L3205",
hailfinger40167462009-05-31 17:57:34 +00004490 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004491 .manufacture_id = MACRONIX_ID,
4492 .model_id = MACRONIX_MX25L3205,
hailfinger286829b2009-01-08 03:40:17 +00004493 .total_size = 4096,
4494 .page_size = 256,
hailfingerbc5a1c72010-09-03 03:35:48 +00004495 .feature_bits = FEATURE_WRSR_WREN,
dhendrix0ab17e72010-12-13 23:54:59 +00004496 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00004497 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004498 .probe_timing = TIMING_ZERO,
snelson1c03aa12009-12-23 17:05:59 +00004499 .block_erasers =
4500 {
4501 {
4502 .eraseblocks = { {4 * 1024, 1024} },
4503 .block_erase = spi_block_erase_20,
4504 }, {
4505 .eraseblocks = { {4 * 1024, 1024} },
4506 .block_erase = spi_block_erase_d8,
4507 }, {
4508 .eraseblocks = { {4 * 1024 * 1024, 1} },
4509 .block_erase = spi_block_erase_60,
4510 }, {
4511 .eraseblocks = { {4 * 1024 * 1024, 1} },
4512 .block_erase = spi_block_erase_c7,
4513 },
4514 },
hailfingerb9560ee2010-07-14 20:21:22 +00004515 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004516 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004517 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00004518 .voltage = {2700, 3600},
David Hendricksf8f00c72011-02-01 12:39:46 -08004519 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00004520 },
4521
hailfinger286829b2009-01-08 03:40:17 +00004522 {
4523 .vendor = "Macronix",
stuge38d77d22009-04-23 22:51:56 +00004524 .name = "MX25L3235D",
hailfinger40167462009-05-31 17:57:34 +00004525 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004526 .manufacture_id = MACRONIX_ID,
4527 .model_id = MACRONIX_MX25L3235D,
stuge38d77d22009-04-23 22:51:56 +00004528 .total_size = 4096,
4529 .page_size = 256,
hailfingerbc5a1c72010-09-03 03:35:48 +00004530 .feature_bits = FEATURE_WRSR_WREN,
stuge38d77d22009-04-23 22:51:56 +00004531 .tested = TEST_UNTESTED,
4532 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004533 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00004534 .block_erasers =
4535 {
4536 {
4537 .eraseblocks = { {4 * 1024, 1024} },
4538 .block_erase = spi_block_erase_20,
4539 }, {
4540 .eraseblocks = { {64 * 1024, 64} },
4541 .block_erase = spi_block_erase_d8,
4542 }, {
4543 .eraseblocks = { {4 * 1024 * 1024, 1} },
4544 .block_erase = spi_block_erase_60,
4545 }, {
4546 .eraseblocks = { {4 * 1024 * 1024, 1} },
4547 .block_erase = spi_block_erase_c7,
4548 }
4549 },
hailfingerb9560ee2010-07-14 20:21:22 +00004550 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004551 .write = spi_chip_write_256,
stuge38d77d22009-04-23 22:51:56 +00004552 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00004553 .voltage = {2700, 3600},
stuge38d77d22009-04-23 22:51:56 +00004554 },
4555
David Hendricks1c9bc9c2011-07-20 15:25:44 -07004556#if 0
stuge38d77d22009-04-23 22:51:56 +00004557 {
4558 .vendor = "Macronix",
hailfinger286829b2009-01-08 03:40:17 +00004559 .name = "MX25L6405",
hailfinger40167462009-05-31 17:57:34 +00004560 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004561 .manufacture_id = MACRONIX_ID,
4562 .model_id = MACRONIX_MX25L6405,
hailfinger286829b2009-01-08 03:40:17 +00004563 .total_size = 8192,
4564 .page_size = 256,
hailfingerbc5a1c72010-09-03 03:35:48 +00004565 .feature_bits = FEATURE_WRSR_WREN,
hailfingera08be0a2009-06-22 11:14:43 +00004566 .tested = TEST_OK_PROBE,
hailfinger286829b2009-01-08 03:40:17 +00004567 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004568 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00004569 .block_erasers =
4570 {
4571 {
4572 .eraseblocks = { {64 * 1024, 128} },
4573 .block_erase = spi_block_erase_20,
4574 }, {
4575 .eraseblocks = { {64 * 1024, 128} },
4576 .block_erase = spi_block_erase_d8,
4577 }, {
4578 .eraseblocks = { {8 * 1024 * 1024, 1} },
4579 .block_erase = spi_block_erase_60,
4580 }, {
4581 .eraseblocks = { {8 * 1024 * 1024, 1} },
4582 .block_erase = spi_block_erase_c7,
4583 }
4584 },
hailfingerb9560ee2010-07-14 20:21:22 +00004585 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004586 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004587 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00004588 .voltage = {2700, 3600},
David Hendricksf8f00c72011-02-01 12:39:46 -08004589 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00004590 },
David Hendricks1c9bc9c2011-07-20 15:25:44 -07004591#endif
4592
4593 {
4594 /* FIXME: This is an evil twin of the MX25L6405, with the same
4595 * ID bytes but different block erase capabilities */
4596 .vendor = "Macronix",
4597 .name = "MX25L6406E",
4598 .bustype = CHIP_BUSTYPE_SPI,
4599 .manufacture_id = MACRONIX_ID,
4600 .model_id = MACRONIX_MX25L6405,
4601 .total_size = 8192,
4602 .page_size = 256,
4603 .feature_bits = FEATURE_WRSR_WREN,
4604 .tested = TEST_OK_PREW,
4605 .probe = probe_spi_rdid,
4606 .probe_timing = TIMING_ZERO,
4607 .block_erasers =
4608 {
4609 {
4610 .eraseblocks = { {4 * 1024, 2048} },
4611 .block_erase = spi_block_erase_20,
4612 }, {
4613 .eraseblocks = { {64 * 1024, 128} },
4614 .block_erase = spi_block_erase_d8,
4615 }, {
4616 .eraseblocks = { {64 * 1024, 128} },
4617 .block_erase = spi_block_erase_52,
4618 }, {
4619 .eraseblocks = { {8 * 1024 * 1024, 1} },
4620 .block_erase = spi_block_erase_60,
4621 }, {
4622 .eraseblocks = { {8 * 1024 * 1024, 1} },
4623 .block_erase = spi_block_erase_c7,
4624 }
4625 },
4626 .unlock = spi_disable_blockprotect,
4627 .write = spi_chip_write_256,
4628 .read = spi_chip_read,
4629 .voltage = {2700, 3600},
4630 .wp = &wp_w25,
4631 },
stepanaa1b6a22008-12-08 18:15:10 +00004632
hailfinger286829b2009-01-08 03:40:17 +00004633 {
4634 .vendor = "Macronix",
stuged8f34912009-04-21 01:47:16 +00004635 .name = "MX25L12805",
hailfinger40167462009-05-31 17:57:34 +00004636 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00004637 .manufacture_id = MACRONIX_ID,
4638 .model_id = MACRONIX_MX25L12805,
stuged8f34912009-04-21 01:47:16 +00004639 .total_size = 16384,
4640 .page_size = 256,
hailfingerbc5a1c72010-09-03 03:35:48 +00004641 .feature_bits = FEATURE_WRSR_WREN,
stuged8f34912009-04-21 01:47:16 +00004642 .tested = TEST_UNTESTED,
4643 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004644 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00004645 .block_erasers =
4646 {
4647 {
4648 .eraseblocks = { {4 * 1024, 4096} },
4649 .block_erase = spi_block_erase_20,
4650 }, {
4651 .eraseblocks = { {64 * 1024, 256} },
4652 .block_erase = spi_block_erase_d8,
4653 }, {
4654 .eraseblocks = { {16 * 1024 * 1024, 1} },
4655 .block_erase = spi_block_erase_60,
4656 }, {
4657 .eraseblocks = { {16 * 1024 * 1024, 1} },
4658 .block_erase = spi_block_erase_c7,
4659 }
4660 },
hailfingerb9560ee2010-07-14 20:21:22 +00004661 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004662 .write = spi_chip_write_256,
stuged8f34912009-04-21 01:47:16 +00004663 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00004664 .voltage = {2700, 3600},
stuged8f34912009-04-21 01:47:16 +00004665 },
4666
4667 {
4668 .vendor = "Macronix",
hailfinger377ee962009-08-24 01:42:24 +00004669 .name = "MX29F001B",
4670 .bustype = CHIP_BUSTYPE_PARALLEL,
mhmd3c80cd2010-09-15 23:31:03 +00004671 .manufacture_id = MACRONIX_ID,
4672 .model_id = MACRONIX_MX29F001B,
hailfinger377ee962009-08-24 01:42:24 +00004673 .total_size = 128,
4674 .page_size = 32 * 1024,
snelsonc6855342010-01-28 23:55:12 +00004675 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4676 .tested = TEST_UNTESTED,
4677 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +00004678 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00004679 .block_erasers =
4680 {
4681 {
4682 .eraseblocks = {
4683 {8 * 1024, 1},
4684 {4 * 1024, 2},
4685 {8 * 1024, 2},
4686 {32 * 1024, 1},
4687 {64 * 1024, 1},
4688 },
snelsonc6855342010-01-28 23:55:12 +00004689 .block_erase = erase_sector_jedec,
snelson2d471072010-01-09 05:30:14 +00004690 }, {
4691 .eraseblocks = { {128 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00004692 .block_erase = erase_chip_block_jedec,
snelson2d471072010-01-09 05:30:14 +00004693 }
4694 },
hailfingerfff99532009-11-27 17:49:42 +00004695 .write = write_jedec_1,
hailfinger377ee962009-08-24 01:42:24 +00004696 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00004697 .voltage = {4500, 5500},
hailfinger377ee962009-08-24 01:42:24 +00004698 },
4699
4700 {
4701 .vendor = "Macronix",
4702 .name = "MX29F001T",
4703 .bustype = CHIP_BUSTYPE_PARALLEL,
mhmd3c80cd2010-09-15 23:31:03 +00004704 .manufacture_id = MACRONIX_ID,
4705 .model_id = MACRONIX_MX29F001T,
hailfinger377ee962009-08-24 01:42:24 +00004706 .total_size = 128,
4707 .page_size = 32 * 1024,
snelsonc6855342010-01-28 23:55:12 +00004708 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
stefanct4cc44652011-05-18 01:31:46 +00004709 .tested = TEST_OK_PREW,
snelsonc6855342010-01-28 23:55:12 +00004710 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +00004711 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00004712 .block_erasers =
4713 {
4714 {
4715 .eraseblocks = {
4716 {64 * 1024, 1},
4717 {32 * 1024, 1},
4718 {8 * 1024, 2},
4719 {4 * 1024, 2},
4720 {8 * 1024, 1},
4721 },
snelsonc6855342010-01-28 23:55:12 +00004722 .block_erase = erase_sector_jedec,
snelson2d471072010-01-09 05:30:14 +00004723 }, {
4724 .eraseblocks = { {128 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00004725 .block_erase = erase_chip_block_jedec,
snelson2d471072010-01-09 05:30:14 +00004726 }
4727 },
hailfingerfff99532009-11-27 17:49:42 +00004728 .write = write_jedec_1,
hailfinger377ee962009-08-24 01:42:24 +00004729 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00004730 .voltage = {4500, 5500},
hailfinger377ee962009-08-24 01:42:24 +00004731 },
4732
4733 {
4734 .vendor = "Macronix",
hailfinger286829b2009-01-08 03:40:17 +00004735 .name = "MX29F002B",
hailfingera5245512009-06-28 19:19:25 +00004736 .bustype = CHIP_BUSTYPE_PARALLEL,
mhmd3c80cd2010-09-15 23:31:03 +00004737 .manufacture_id = MACRONIX_ID,
4738 .model_id = MACRONIX_MX29F002B,
hailfinger286829b2009-01-08 03:40:17 +00004739 .total_size = 256,
4740 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00004741 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
hailfinger286829b2009-01-08 03:40:17 +00004742 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00004743 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +00004744 .probe_timing = TIMING_ZERO,
snelson1c03aa12009-12-23 17:05:59 +00004745 .block_erasers =
4746 {
4747 {
4748 .eraseblocks = {
4749 {16 * 1024, 1},
4750 {8 * 1024, 2},
4751 {32 * 1024, 1},
4752 {64 * 1024, 3},
4753 },
snelsonc6855342010-01-28 23:55:12 +00004754 .block_erase = erase_sector_jedec,
snelson1c03aa12009-12-23 17:05:59 +00004755 }, {
4756 .eraseblocks = { {256 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00004757 .block_erase = erase_chip_block_jedec,
snelson1c03aa12009-12-23 17:05:59 +00004758 },
4759 },
hailfingerfff99532009-11-27 17:49:42 +00004760 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00004761 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00004762 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00004763 },
4764
hailfinger286829b2009-01-08 03:40:17 +00004765 {
4766 .vendor = "Macronix",
4767 .name = "MX29F002T",
hailfingera5245512009-06-28 19:19:25 +00004768 .bustype = CHIP_BUSTYPE_PARALLEL,
mhmd3c80cd2010-09-15 23:31:03 +00004769 .manufacture_id = MACRONIX_ID,
4770 .model_id = MACRONIX_MX29F002T,
hailfinger286829b2009-01-08 03:40:17 +00004771 .total_size = 256,
4772 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00004773 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
hailfingerd217d122010-10-08 18:52:29 +00004774 .tested = TEST_OK_PR,
snelsonc6855342010-01-28 23:55:12 +00004775 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +00004776 .probe_timing = TIMING_ZERO,
snelson1c03aa12009-12-23 17:05:59 +00004777 .block_erasers =
4778 {
4779 {
4780 .eraseblocks = {
4781 {64 * 1024, 3},
4782 {32 * 1024, 1},
4783 {8 * 1024, 2},
4784 {16 * 1024, 1},
4785 },
snelsonc6855342010-01-28 23:55:12 +00004786 .block_erase = erase_sector_jedec,
snelson1c03aa12009-12-23 17:05:59 +00004787 }, {
4788 .eraseblocks = { {256 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00004789 .block_erase = erase_chip_block_jedec,
snelson1c03aa12009-12-23 17:05:59 +00004790 },
4791 },
hailfingerfff99532009-11-27 17:49:42 +00004792 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00004793 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00004794 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00004795 },
4796
hailfinger286829b2009-01-08 03:40:17 +00004797 {
4798 .vendor = "Macronix",
mhme8e87912010-09-16 00:51:51 +00004799 .name = "MX29F040",
4800 .bustype = CHIP_BUSTYPE_PARALLEL,
4801 .manufacture_id = MACRONIX_ID,
4802 .model_id = MACRONIX_MX29F040,
4803 .total_size = 512,
4804 .page_size = 64 * 1024,
4805 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4806 .tested = TEST_UNTESTED,
4807 .probe = probe_jedec,
4808 .probe_timing = TIMING_ZERO,
4809 .block_erasers =
4810 {
4811 {
4812 .eraseblocks = { {64 * 1024, 8} },
4813 .block_erase = erase_sector_jedec,
4814 }, {
4815 .eraseblocks = { {512 * 1024, 1} },
4816 .block_erase = erase_chip_block_jedec,
4817 },
4818 },
4819 .write = write_jedec_1,
4820 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00004821 .voltage = {4500, 5500},
mhme8e87912010-09-16 00:51:51 +00004822 },
4823
4824 {
4825 .vendor = "Macronix",
David Hendricksc801adb2010-12-09 16:58:56 -08004826 .name = "MX29F040",
4827 .bustype = CHIP_BUSTYPE_PARALLEL,
4828 .manufacture_id = MACRONIX_ID,
4829 .model_id = MACRONIX_MX29F040,
4830 .total_size = 512,
4831 .page_size = 64 * 1024,
4832 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4833 .tested = TEST_UNTESTED,
4834 .probe = probe_jedec,
4835 .probe_timing = TIMING_ZERO,
4836 .block_erasers =
4837 {
4838 {
4839 .eraseblocks = { {64 * 1024, 8} },
4840 .block_erase = erase_sector_jedec,
4841 }, {
4842 .eraseblocks = { {512 * 1024, 1} },
4843 .block_erase = erase_chip_block_jedec,
4844 },
4845 },
4846 .write = write_jedec_1,
4847 .read = read_memmapped,
4848 },
4849
4850 {
4851 .vendor = "Macronix",
hailfinger94c758e2009-07-24 13:59:27 +00004852 .name = "MX29LV040",
hailfingera5245512009-06-28 19:19:25 +00004853 .bustype = CHIP_BUSTYPE_PARALLEL,
mhmd3c80cd2010-09-15 23:31:03 +00004854 .manufacture_id = MACRONIX_ID,
4855 .model_id = MACRONIX_MX29LV040,
hailfinger286829b2009-01-08 03:40:17 +00004856 .total_size = 512,
4857 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00004858 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
4859 .tested = TEST_UNTESTED,
4860 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +00004861 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00004862 .block_erasers =
4863 {
4864 {
4865 .eraseblocks = { {64 * 1024, 8}, },
snelsonc6855342010-01-28 23:55:12 +00004866 .block_erase = erase_sector_jedec,
snelson2d471072010-01-09 05:30:14 +00004867 }, {
4868 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00004869 .block_erase = erase_chip_block_jedec,
snelson2d471072010-01-09 05:30:14 +00004870 },
4871 },
hailfingerfff99532009-11-27 17:49:42 +00004872 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00004873 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00004874 .voltage = {2700, 3600},
hailfinger033cdf02008-12-10 10:32:05 +00004875 },
4876
hailfinger286829b2009-01-08 03:40:17 +00004877 {
hailfinger0ae231d2010-07-29 20:01:13 +00004878 .vendor = "MoselVitelic",
4879 .name = "V29C51000B",
4880 .bustype = CHIP_BUSTYPE_PARALLEL,
4881 .manufacture_id = SYNCMOS_MVC_ID,
4882 .model_id = MVC_V29C51000B,
4883 .total_size = 64,
4884 .page_size = 512,
4885 .feature_bits = FEATURE_EITHER_RESET,
4886 .tested = TEST_UNTESTED,
4887 .probe = probe_jedec,
4888 .probe_timing = TIMING_ZERO,
4889 .block_erasers =
4890 {
4891 {
4892 .eraseblocks = { {512, 128} },
4893 .block_erase = erase_sector_jedec,
4894 }, {
4895 .eraseblocks = { {64 * 1024, 1} },
4896 .block_erase = erase_chip_block_jedec,
4897 },
4898 },
4899 .write = write_jedec_1,
4900 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00004901 .voltage = {4500, 5500},
hailfinger0ae231d2010-07-29 20:01:13 +00004902 },
4903
4904 {
4905 .vendor = "MoselVitelic",
4906 .name = "V29C51000T",
4907 .bustype = CHIP_BUSTYPE_PARALLEL,
4908 .manufacture_id = SYNCMOS_MVC_ID,
4909 .model_id = MVC_V29C51000T,
4910 .total_size = 64,
4911 .page_size = 512,
4912 .feature_bits = FEATURE_EITHER_RESET,
4913 .tested = TEST_UNTESTED,
4914 .probe = probe_jedec,
4915 .probe_timing = TIMING_ZERO,
4916 .block_erasers =
4917 {
4918 {
4919 .eraseblocks = { {512, 128} },
4920 .block_erase = erase_sector_jedec,
4921 }, {
4922 .eraseblocks = { {64 * 1024, 1} },
4923 .block_erase = erase_chip_block_jedec,
4924 },
4925 },
4926 .write = write_jedec_1,
4927 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00004928 .voltage = {4500, 5500},
hailfinger0ae231d2010-07-29 20:01:13 +00004929 },
4930
4931 {
4932 .vendor = "MoselVitelic",
4933 .name = "V29C51400B",
4934 .bustype = CHIP_BUSTYPE_PARALLEL,
4935 .manufacture_id = SYNCMOS_MVC_ID,
4936 .model_id = MVC_V29C51400B,
4937 .total_size = 512,
4938 .page_size = 1024,
4939 .feature_bits = FEATURE_EITHER_RESET,
4940 .tested = TEST_UNTESTED,
4941 .probe = probe_jedec,
4942 .probe_timing = TIMING_ZERO,
4943 .block_erasers =
4944 {
4945 {
4946 .eraseblocks = { {1024, 512} },
4947 .block_erase = erase_sector_jedec,
4948 }, {
4949 .eraseblocks = { {512 * 1024, 1} },
4950 .block_erase = erase_chip_block_jedec,
4951 },
4952 },
4953 .write = write_jedec_1,
4954 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00004955 .voltage = {4500, 5500},
hailfinger0ae231d2010-07-29 20:01:13 +00004956 },
4957
4958 {
4959 .vendor = "MoselVitelic",
4960 .name = "V29C51400T",
4961 .bustype = CHIP_BUSTYPE_PARALLEL,
4962 .manufacture_id = SYNCMOS_MVC_ID,
4963 .model_id = MVC_V29C51400T,
4964 .total_size = 512,
4965 .page_size = 1024,
4966 .feature_bits = FEATURE_EITHER_RESET,
4967 .tested = TEST_UNTESTED,
4968 .probe = probe_jedec,
4969 .probe_timing = TIMING_ZERO,
4970 .block_erasers =
4971 {
4972 {
4973 .eraseblocks = { {1024, 512} },
4974 .block_erase = erase_sector_jedec,
4975 }, {
4976 .eraseblocks = { {512 * 1024, 1} },
4977 .block_erase = erase_chip_block_jedec,
4978 },
4979 },
4980 .write = write_jedec_1,
4981 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00004982 .voltage = {4500, 5500},
hailfinger0ae231d2010-07-29 20:01:13 +00004983 },
4984
4985 {
4986 .vendor = "MoselVitelic",
4987 .name = "V29LC51000",
4988 .bustype = CHIP_BUSTYPE_PARALLEL,
4989 .manufacture_id = SYNCMOS_MVC_ID,
4990 .model_id = MVC_V29LC51000,
4991 .total_size = 64,
4992 .page_size = 512,
4993 .feature_bits = FEATURE_EITHER_RESET,
4994 .tested = TEST_UNTESTED,
4995 .probe = probe_jedec,
4996 .probe_timing = TIMING_ZERO,
4997 .block_erasers =
4998 {
4999 {
5000 .eraseblocks = { {512, 128} },
5001 .block_erase = erase_sector_jedec,
5002 }, {
5003 .eraseblocks = { {64 * 1024, 1} },
5004 .block_erase = erase_chip_block_jedec,
5005 },
5006 },
5007 .write = write_jedec_1,
5008 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00005009 .voltage = {4500, 5500},
hailfinger0ae231d2010-07-29 20:01:13 +00005010 },
5011
5012 {
5013 .vendor = "MoselVitelic",
5014 .name = "V29LC51001",
5015 .bustype = CHIP_BUSTYPE_PARALLEL,
5016 .manufacture_id = SYNCMOS_MVC_ID,
5017 .model_id = MVC_V29LC51001,
5018 .total_size = 128,
5019 .page_size = 512,
5020 .feature_bits = FEATURE_EITHER_RESET,
5021 .tested = TEST_UNTESTED,
5022 .probe = probe_jedec,
5023 .probe_timing = TIMING_ZERO,
5024 .block_erasers =
5025 {
5026 {
5027 .eraseblocks = { {512, 256} },
5028 .block_erase = erase_sector_jedec,
5029 }, {
5030 .eraseblocks = { {128 * 1024, 1} },
5031 .block_erase = erase_chip_block_jedec,
5032 },
5033 },
5034 .write = write_jedec_1,
5035 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00005036 .voltage = {4500, 5500},
hailfinger0ae231d2010-07-29 20:01:13 +00005037 },
5038
5039 {
5040 .vendor = "MoselVitelic",
5041 .name = "V29LC51002",
5042 .bustype = CHIP_BUSTYPE_PARALLEL,
5043 .manufacture_id = SYNCMOS_MVC_ID,
5044 .model_id = MVC_V29LC51002,
5045 .total_size = 256,
5046 .page_size = 512,
5047 .feature_bits = FEATURE_EITHER_RESET,
5048 .tested = TEST_UNTESTED,
5049 .probe = probe_jedec,
5050 .probe_timing = TIMING_ZERO,
5051 .block_erasers =
5052 {
5053 {
5054 .eraseblocks = { {512, 512} },
5055 .block_erase = erase_sector_jedec,
5056 }, {
5057 .eraseblocks = { {256 * 1024, 1} },
5058 .block_erase = erase_chip_block_jedec,
5059 },
5060 },
5061 .write = write_jedec_1,
5062 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00005063 .voltage = {4500, 5500},
hailfinger0ae231d2010-07-29 20:01:13 +00005064 },
5065
5066 {
hailfinger286829b2009-01-08 03:40:17 +00005067 .vendor = "Numonyx",
5068 .name = "M25PE10",
hailfinger40167462009-05-31 17:57:34 +00005069 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005070 .manufacture_id = ST_ID,
hailfingerc391ccb2009-06-12 11:45:10 +00005071 .model_id = ST_M25PE10,
hailfinger286829b2009-01-08 03:40:17 +00005072 .total_size = 128,
5073 .page_size = 256,
5074 .tested = TEST_UNTESTED,
5075 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005076 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005077 .block_erasers =
5078 {
5079 {
5080 .eraseblocks = { {4 * 1024, 32} },
5081 .block_erase = spi_block_erase_20,
5082 }, {
5083 .eraseblocks = { {64 * 1024, 2} },
5084 .block_erase = spi_block_erase_d8,
5085 }, {
5086 .eraseblocks = { {128 * 1024, 1} },
5087 .block_erase = spi_block_erase_c7,
5088 }
5089 },
hailfingerb9560ee2010-07-14 20:21:22 +00005090 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005091 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005092 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005093 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005094 },
5095
hailfinger286829b2009-01-08 03:40:17 +00005096 {
5097 .vendor = "Numonyx",
5098 .name = "M25PE20",
hailfinger40167462009-05-31 17:57:34 +00005099 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005100 .manufacture_id = ST_ID,
hailfingerc391ccb2009-06-12 11:45:10 +00005101 .model_id = ST_M25PE20,
hailfinger286829b2009-01-08 03:40:17 +00005102 .total_size = 256,
5103 .page_size = 256,
5104 .tested = TEST_UNTESTED,
5105 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005106 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005107 .block_erasers =
5108 {
5109 {
5110 .eraseblocks = { {4 * 1024, 64} },
5111 .block_erase = spi_block_erase_20,
5112 }, {
5113 .eraseblocks = { {64 * 1024, 4} },
5114 .block_erase = spi_block_erase_d8,
5115 }, {
5116 .eraseblocks = { {256 * 1024, 1} },
5117 .block_erase = spi_block_erase_c7,
5118 }
5119 },
hailfingerb9560ee2010-07-14 20:21:22 +00005120 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005121 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005122 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005123 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005124 },
5125
hailfinger286829b2009-01-08 03:40:17 +00005126 {
5127 .vendor = "Numonyx",
5128 .name = "M25PE40",
hailfinger40167462009-05-31 17:57:34 +00005129 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005130 .manufacture_id = ST_ID,
hailfingerc391ccb2009-06-12 11:45:10 +00005131 .model_id = ST_M25PE40,
snelson4d31f0d2010-01-19 03:23:07 +00005132 .total_size = 512,
hailfinger286829b2009-01-08 03:40:17 +00005133 .page_size = 256,
5134 .tested = TEST_UNTESTED,
5135 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005136 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005137 .block_erasers =
5138 {
5139 {
5140 .eraseblocks = { {4 * 1024, 128} },
5141 .block_erase = spi_block_erase_20,
5142 }, {
5143 .eraseblocks = { {64 * 1024, 8} },
5144 .block_erase = spi_block_erase_d8,
5145 }, {
5146 .eraseblocks = { {512 * 1024, 1} },
5147 .block_erase = spi_block_erase_c7,
5148 }
5149 },
hailfingerb9560ee2010-07-14 20:21:22 +00005150 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005151 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005152 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005153 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005154 },
5155
hailfinger286829b2009-01-08 03:40:17 +00005156 {
5157 .vendor = "Numonyx",
5158 .name = "M25PE80",
hailfinger40167462009-05-31 17:57:34 +00005159 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005160 .manufacture_id = ST_ID,
hailfingerc391ccb2009-06-12 11:45:10 +00005161 .model_id = ST_M25PE80,
hailfinger286829b2009-01-08 03:40:17 +00005162 .total_size = 1024,
5163 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +00005164 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005165 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005166 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005167 .block_erasers =
5168 {
5169 {
5170 .eraseblocks = { {4 * 1024, 256} },
5171 .block_erase = spi_block_erase_20,
5172 }, {
5173 .eraseblocks = { {64 * 1024, 16} },
5174 .block_erase = spi_block_erase_d8,
5175 }, {
5176 .eraseblocks = { {1024 * 1024, 1} },
5177 .block_erase = spi_block_erase_c7,
5178 }
5179 },
hailfingerb9560ee2010-07-14 20:21:22 +00005180 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005181 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005182 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005183 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005184 },
5185
hailfinger286829b2009-01-08 03:40:17 +00005186 {
5187 .vendor = "Numonyx",
5188 .name = "M25PE16",
hailfinger40167462009-05-31 17:57:34 +00005189 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005190 .manufacture_id = ST_ID,
hailfingerc391ccb2009-06-12 11:45:10 +00005191 .model_id = ST_M25PE16,
hailfinger286829b2009-01-08 03:40:17 +00005192 .total_size = 2048,
5193 .page_size = 256,
5194 .tested = TEST_UNTESTED,
5195 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005196 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005197 .block_erasers =
5198 {
5199 {
5200 .eraseblocks = { {4 * 1024, 512} },
5201 .block_erase = spi_block_erase_20,
5202 }, {
5203 .eraseblocks = { {64 * 1024, 32} },
5204 .block_erase = spi_block_erase_d8,
5205 }, {
5206 .eraseblocks = { {2 * 1024 * 1024, 1} },
5207 .block_erase = spi_block_erase_c7,
5208 }
5209 },
hailfingerb9560ee2010-07-14 20:21:22 +00005210 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005211 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005212 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005213 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005214 },
5215
hailfinger286829b2009-01-08 03:40:17 +00005216 {
5217 .vendor = "PMC",
5218 .name = "Pm25LV010",
hailfinger40167462009-05-31 17:57:34 +00005219 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005220 .manufacture_id = PMC_ID,
mhmd3c80cd2010-09-15 23:31:03 +00005221 .model_id = PMC_PM25LV010,
hailfinger286829b2009-01-08 03:40:17 +00005222 .total_size = 128,
5223 .page_size = 256,
5224 .tested = TEST_UNTESTED,
5225 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005226 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005227 .block_erasers =
5228 {
5229 {
5230 .eraseblocks = { {4 * 1024, 32} },
5231 .block_erase = spi_block_erase_d7,
5232 }, {
5233 .eraseblocks = { {32 * 1024, 4} },
5234 .block_erase = spi_block_erase_d8,
5235 }, {
5236 .eraseblocks = { {128 * 1024, 1} },
5237 .block_erase = spi_block_erase_c7,
5238 }
5239 },
hailfingerb9560ee2010-07-14 20:21:22 +00005240 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005241 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005242 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005243 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005244 },
5245
hailfinger286829b2009-01-08 03:40:17 +00005246 {
5247 .vendor = "PMC",
5248 .name = "Pm25LV016B",
hailfinger40167462009-05-31 17:57:34 +00005249 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005250 .manufacture_id = PMC_ID,
mhmd3c80cd2010-09-15 23:31:03 +00005251 .model_id = PMC_PM25LV016B,
hailfinger286829b2009-01-08 03:40:17 +00005252 .total_size = 2048,
5253 .page_size = 256,
5254 .tested = TEST_UNTESTED,
5255 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005256 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005257 .block_erasers =
5258 {
5259 {
5260 .eraseblocks = { {4 * 1024, 512} },
5261 .block_erase = spi_block_erase_d7,
5262 }, {
5263 .eraseblocks = { {4 * 1024, 512} },
5264 .block_erase = spi_block_erase_20,
5265 }, {
5266 .eraseblocks = { {64 * 1024, 32} },
5267 .block_erase = spi_block_erase_d8,
5268 }, {
5269 .eraseblocks = { {2 * 1024 * 1024, 1} },
5270 .block_erase = spi_block_erase_60,
5271 }, {
5272 .eraseblocks = { {2 * 1024 * 1024, 1} },
5273 .block_erase = spi_block_erase_c7,
5274 }
5275 },
hailfingerb9560ee2010-07-14 20:21:22 +00005276 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005277 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005278 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00005279 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005280 },
5281
hailfinger286829b2009-01-08 03:40:17 +00005282 {
5283 .vendor = "PMC",
5284 .name = "Pm25LV020",
hailfinger40167462009-05-31 17:57:34 +00005285 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005286 .manufacture_id = PMC_ID,
mhmd3c80cd2010-09-15 23:31:03 +00005287 .model_id = PMC_PM25LV020,
hailfinger286829b2009-01-08 03:40:17 +00005288 .total_size = 256,
5289 .page_size = 256,
5290 .tested = TEST_UNTESTED,
5291 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005292 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005293 .block_erasers =
5294 {
5295 {
5296 .eraseblocks = { {4 * 1024, 64} },
5297 .block_erase = spi_block_erase_d7,
5298 }, {
5299 .eraseblocks = { {64 * 1024, 4} },
5300 .block_erase = spi_block_erase_d8,
5301 }, {
5302 .eraseblocks = { {256 * 1024, 1} },
5303 .block_erase = spi_block_erase_c7,
5304 }
5305 },
hailfingerb9560ee2010-07-14 20:21:22 +00005306 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005307 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005308 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005309 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005310 },
5311
hailfinger286829b2009-01-08 03:40:17 +00005312 {
5313 .vendor = "PMC",
5314 .name = "Pm25LV040",
hailfinger40167462009-05-31 17:57:34 +00005315 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005316 .manufacture_id = PMC_ID,
mhmd3c80cd2010-09-15 23:31:03 +00005317 .model_id = PMC_PM25LV040,
hailfinger286829b2009-01-08 03:40:17 +00005318 .total_size = 512,
5319 .page_size = 256,
stefanctdfd58832011-07-25 20:38:52 +00005320 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00005321 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005322 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005323 .block_erasers =
5324 {
5325 {
5326 .eraseblocks = { {4 * 1024, 128} },
5327 .block_erase = spi_block_erase_d7,
5328 }, {
5329 .eraseblocks = { {64 * 1024, 8} },
5330 .block_erase = spi_block_erase_d8,
5331 }, {
5332 .eraseblocks = { {512 * 1024, 1} },
5333 .block_erase = spi_block_erase_c7,
5334 }
5335 },
hailfingerb9560ee2010-07-14 20:21:22 +00005336 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005337 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005338 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005339 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005340 },
5341
hailfinger286829b2009-01-08 03:40:17 +00005342 {
5343 .vendor = "PMC",
5344 .name = "Pm25LV080B",
hailfinger40167462009-05-31 17:57:34 +00005345 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005346 .manufacture_id = PMC_ID,
mhmd3c80cd2010-09-15 23:31:03 +00005347 .model_id = PMC_PM25LV080B,
hailfinger286829b2009-01-08 03:40:17 +00005348 .total_size = 1024,
5349 .page_size = 256,
5350 .tested = TEST_UNTESTED,
5351 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005352 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005353 .block_erasers =
5354 {
5355 {
5356 .eraseblocks = { {4 * 1024, 256} },
5357 .block_erase = spi_block_erase_d7,
5358 }, {
5359 .eraseblocks = { {4 * 1024, 256} },
5360 .block_erase = spi_block_erase_20,
5361 }, {
5362 .eraseblocks = { {64 * 1024, 16} },
5363 .block_erase = spi_block_erase_d8,
5364 }, {
5365 .eraseblocks = { {1024 * 1024, 1} },
5366 .block_erase = spi_block_erase_60,
5367 }, {
5368 .eraseblocks = { {1024 * 1024, 1} },
5369 .block_erase = spi_block_erase_c7,
5370 }
5371 },
hailfingerb9560ee2010-07-14 20:21:22 +00005372 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005373 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005374 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005375 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005376 },
5377
hailfinger286829b2009-01-08 03:40:17 +00005378 {
5379 .vendor = "PMC",
5380 .name = "Pm25LV512",
hailfinger40167462009-05-31 17:57:34 +00005381 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005382 .manufacture_id = PMC_ID,
mhmd3c80cd2010-09-15 23:31:03 +00005383 .model_id = PMC_PM25LV512,
hailfinger286829b2009-01-08 03:40:17 +00005384 .total_size = 64,
5385 .page_size = 256,
5386 .tested = TEST_UNTESTED,
5387 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005388 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005389 .block_erasers =
5390 {
5391 {
5392 .eraseblocks = { {4 * 1024, 16} },
5393 .block_erase = spi_block_erase_d7,
5394 }, {
5395 .eraseblocks = { {32 * 1024, 2} },
5396 .block_erase = spi_block_erase_d8,
5397 }, {
5398 .eraseblocks = { {64 * 1024, 1} },
5399 .block_erase = spi_block_erase_c7,
5400 }
5401 },
hailfingerb9560ee2010-07-14 20:21:22 +00005402 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005403 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005404 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00005405 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005406 },
5407
hailfinger286829b2009-01-08 03:40:17 +00005408 {
5409 .vendor = "PMC",
hailfingerc43afc92009-12-22 22:15:33 +00005410 .name = "Pm29F002T",
uwe7a083f82009-06-14 21:53:26 +00005411 .bustype = CHIP_BUSTYPE_PARALLEL,
5412 .manufacture_id = PMC_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00005413 .model_id = PMC_PM29F002T,
uwe7a083f82009-06-14 21:53:26 +00005414 .total_size = 256,
hailfingerc43afc92009-12-22 22:15:33 +00005415 .page_size = 8 * 1024,
snelsonc6855342010-01-28 23:55:12 +00005416 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00005417 .tested = TEST_OK_PRE,
snelsonc6855342010-01-28 23:55:12 +00005418 .probe = probe_jedec,
uwe7a083f82009-06-14 21:53:26 +00005419 .probe_timing = TIMING_FIXME,
hailfingerc43afc92009-12-22 22:15:33 +00005420 .block_erasers =
5421 {
5422 {
5423 .eraseblocks = {
5424 {128 * 1024, 1},
5425 {96 * 1024, 1},
5426 {8 * 1024, 2},
5427 {16 * 1024, 1},
5428 },
snelsonc6855342010-01-28 23:55:12 +00005429 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +00005430 }, {
5431 .eraseblocks = { {256 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00005432 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +00005433 },
5434 },
snelsonc6855342010-01-28 23:55:12 +00005435 .write = write_jedec_1,
uwe7a083f82009-06-14 21:53:26 +00005436 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00005437 .voltage = {4500, 5500},
uwe7a083f82009-06-14 21:53:26 +00005438 },
5439
5440 {
5441 .vendor = "PMC",
hailfingerc43afc92009-12-22 22:15:33 +00005442 .name = "Pm29F002B",
uwe7a083f82009-06-14 21:53:26 +00005443 .bustype = CHIP_BUSTYPE_PARALLEL,
5444 .manufacture_id = PMC_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00005445 .model_id = PMC_PM29F002B,
uwe7a083f82009-06-14 21:53:26 +00005446 .total_size = 256,
hailfingerc43afc92009-12-22 22:15:33 +00005447 .page_size = 8 * 1024,
snelsonc6855342010-01-28 23:55:12 +00005448 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
uwe7a083f82009-06-14 21:53:26 +00005449 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00005450 .probe = probe_jedec,
uwe7a083f82009-06-14 21:53:26 +00005451 .probe_timing = TIMING_FIXME,
hailfingerc43afc92009-12-22 22:15:33 +00005452 .block_erasers =
5453 {
5454 {
5455 .eraseblocks = {
5456 {16 * 1024, 1},
5457 {8 * 1024, 2},
5458 {96 * 1024, 1},
5459 {128 * 1024, 1},
5460 },
snelsonc6855342010-01-28 23:55:12 +00005461 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +00005462 }, {
5463 .eraseblocks = { {256 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00005464 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +00005465 },
5466 },
snelsonc6855342010-01-28 23:55:12 +00005467 .write = write_jedec_1,
uwe7a083f82009-06-14 21:53:26 +00005468 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00005469 .voltage = {4500, 5500},
uwe7a083f82009-06-14 21:53:26 +00005470 },
5471
5472 {
5473 .vendor = "PMC",
ruika316f402009-05-17 17:02:07 +00005474 .name = "Pm39LV010",
hailfingera5245512009-06-28 19:19:25 +00005475 .bustype = CHIP_BUSTYPE_PARALLEL,
ruika316f402009-05-17 17:02:07 +00005476 .manufacture_id = PMC_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00005477 .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
ruika316f402009-05-17 17:02:07 +00005478 .total_size = 128,
5479 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005480 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00005481 .tested = TEST_OK_PRE,
ruika316f402009-05-17 17:02:07 +00005482 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00005483 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson4d31f0d2010-01-19 03:23:07 +00005484 .block_erasers =
5485 {
5486 {
5487 .eraseblocks = { {4 * 1024, 32} },
5488 .block_erase = erase_sector_jedec,
5489 }, {
5490 .eraseblocks = { {64 * 1024, 2} },
5491 .block_erase = erase_block_jedec,
5492 }, {
5493 .eraseblocks = { {128 * 1024, 1} },
5494 .block_erase = erase_chip_block_jedec,
5495 }
5496 },
snelsonc6855342010-01-28 23:55:12 +00005497 .write = write_jedec_1,
ruika316f402009-05-17 17:02:07 +00005498 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00005499 .voltage = {2700, 3600},
ruika316f402009-05-17 17:02:07 +00005500 },
5501
5502 {
5503 .vendor = "PMC",
hailfingerd444cc72010-03-27 23:25:14 +00005504 .name = "Pm39LV020",
5505 .bustype = CHIP_BUSTYPE_PARALLEL,
5506 .manufacture_id = PMC_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00005507 .model_id = PMC_PM39LV020,
hailfingerd444cc72010-03-27 23:25:14 +00005508 .total_size = 256,
5509 .page_size = 4096,
5510 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5511 .tested = TEST_UNTESTED,
5512 .probe = probe_jedec,
5513 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
5514 .block_erasers =
5515 {
5516 {
5517 .eraseblocks = { {4 * 1024, 64} },
5518 .block_erase = erase_sector_jedec,
5519 }, {
5520 .eraseblocks = { {64 * 1024, 4} },
5521 .block_erase = erase_block_jedec,
5522 }, {
5523 .eraseblocks = { {256 * 1024, 1} },
5524 .block_erase = erase_chip_block_jedec,
5525 }
5526 },
5527 .write = write_jedec_1,
5528 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00005529 .voltage = {2700, 3600},
hailfingerd444cc72010-03-27 23:25:14 +00005530 },
5531
5532 {
5533 .vendor = "PMC",
5534 .name = "Pm39LV040",
5535 .bustype = CHIP_BUSTYPE_PARALLEL,
5536 .manufacture_id = PMC_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00005537 .model_id = PMC_PM39LV040,
hailfingerd444cc72010-03-27 23:25:14 +00005538 .total_size = 512,
5539 .page_size = 4096,
5540 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5541 .tested = TEST_UNTESTED,
5542 .probe = probe_jedec,
5543 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
5544 .block_erasers =
5545 {
5546 {
5547 .eraseblocks = { {4 * 1024, 128} },
5548 .block_erase = erase_sector_jedec,
5549 }, {
5550 .eraseblocks = { {64 * 1024, 8} },
5551 .block_erase = erase_block_jedec,
5552 }, {
5553 .eraseblocks = { {512 * 1024, 1} },
5554 .block_erase = erase_chip_block_jedec,
5555 }
5556 },
5557 .write = write_jedec_1,
5558 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00005559 .voltage = {2700, 3600},
hailfingerd444cc72010-03-27 23:25:14 +00005560 },
5561
5562 {
5563 .vendor = "PMC",
hailfinger286829b2009-01-08 03:40:17 +00005564 .name = "Pm49FL002",
uwe81d75ab2010-09-05 12:41:25 +00005565 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00005566 .manufacture_id = PMC_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00005567 .model_id = PMC_PM49FL002,
hailfinger286829b2009-01-08 03:40:17 +00005568 .total_size = 256,
5569 .page_size = 16 * 1024,
snelsonc6855342010-01-28 23:55:12 +00005570 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005571 .tested = TEST_OK_PRE,
hailfingerafac00e2010-01-09 02:24:17 +00005572 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00005573 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
snelson4d31f0d2010-01-19 03:23:07 +00005574 .block_erasers =
5575 {
5576 {
5577 .eraseblocks = { {4 * 1024, 64} },
5578 .block_erase = erase_sector_jedec,
5579 }, {
5580 .eraseblocks = { {16 * 1024, 16} },
5581 .block_erase = erase_block_jedec,
5582 }, {
5583 .eraseblocks = { {256 * 1024, 1} },
5584 .block_erase = erase_chip_block_jedec,
5585 }
5586 },
snelson1ee293c2010-02-19 00:52:10 +00005587 .unlock = unlock_49fl00x,
snelson59c83d22010-02-27 18:01:15 +00005588 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005589 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00005590 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005591 },
5592
hailfinger286829b2009-01-08 03:40:17 +00005593 {
5594 .vendor = "PMC",
5595 .name = "Pm49FL004",
uwe81d75ab2010-09-05 12:41:25 +00005596 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00005597 .manufacture_id = PMC_ID_NOPREFIX,
mhmd3c80cd2010-09-15 23:31:03 +00005598 .model_id = PMC_PM49FL004,
hailfinger286829b2009-01-08 03:40:17 +00005599 .total_size = 512,
5600 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00005601 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005602 .tested = TEST_OK_PRE,
hailfingerafac00e2010-01-09 02:24:17 +00005603 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00005604 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
snelson4d31f0d2010-01-19 03:23:07 +00005605 .block_erasers =
5606 {
5607 {
5608 .eraseblocks = { {4 * 1024, 128} },
5609 .block_erase = erase_sector_jedec,
5610 }, {
5611 .eraseblocks = { {64 * 1024, 8} },
5612 .block_erase = erase_block_jedec,
5613 }, {
5614 .eraseblocks = { {512 * 1024, 1} },
5615 .block_erase = erase_chip_block_jedec,
5616 }
5617 },
snelson1ee293c2010-02-19 00:52:10 +00005618 .unlock = unlock_49fl00x,
snelson59c83d22010-02-27 18:01:15 +00005619 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005620 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00005621 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005622 },
5623
hailfinger286829b2009-01-08 03:40:17 +00005624 {
hailfingerf6aa9cc2009-11-24 02:11:08 +00005625 .vendor = "Sanyo",
5626 .name = "LF25FW203A",
5627 .bustype = CHIP_BUSTYPE_SPI,
5628 .manufacture_id = SANYO_ID,
5629 .model_id = SANYO_LE25FW203A,
5630 .total_size = 2048,
5631 .page_size = 256,
5632 .tested = TEST_UNTESTED,
5633 .probe = probe_spi_rdid,
5634 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005635 .block_erasers =
5636 {
5637 {
5638 .eraseblocks = { {64 * 1024, 32} },
5639 .block_erase = spi_block_erase_d8,
5640 }, {
5641 .eraseblocks = { {2 * 1024 * 1024, 1} },
5642 .block_erase = spi_block_erase_c7,
5643 }
5644 },
hailfingerb9560ee2010-07-14 20:21:22 +00005645 .unlock = spi_disable_blockprotect,
hailfingerf6aa9cc2009-11-24 02:11:08 +00005646 .write = spi_chip_write_256,
5647 .read = spi_chip_read,
5648 },
5649
5650 {
hailfinger286829b2009-01-08 03:40:17 +00005651 .vendor = "Sharp",
5652 .name = "LHF00L04",
hailfingera5245512009-06-28 19:19:25 +00005653 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00005654 .manufacture_id = SHARP_ID,
5655 .model_id = SHARP_LHF00L04,
5656 .total_size = 1024,
5657 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00005658 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00005659 .tested = TEST_UNTESTED,
hailfingerb8e4e212010-03-15 03:48:42 +00005660 .probe = probe_82802ab,
hailfinger4481d9d2010-01-07 21:23:45 +00005661 .probe_timing = TIMING_ZERO,
hailfinger4481d9d2010-01-07 21:23:45 +00005662 .block_erasers =
5663 {
5664 {
5665 .eraseblocks = {
5666 {64 * 1024, 15},
5667 {8 * 1024, 8}
5668 },
snelsonc0acbeb2010-03-19 18:47:06 +00005669 .block_erase = erase_block_82802ab,
hailfinger4481d9d2010-01-07 21:23:45 +00005670 }, {
5671 .eraseblocks = {
5672 {1024 * 1024, 1}
5673 },
snelson264e57c2010-01-20 20:55:53 +00005674 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
hailfinger4481d9d2010-01-07 21:23:45 +00005675 },
5676 },
snelsonc0acbeb2010-03-19 18:47:06 +00005677 .unlock = unlock_82802ab,
5678 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00005679 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00005680 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005681 },
5682
hailfinger286829b2009-01-08 03:40:17 +00005683 {
5684 .vendor = "Spansion",
hailfinger5fece212010-11-29 00:37:49 +00005685 .name = "S25FL004A",
5686 .bustype = CHIP_BUSTYPE_SPI,
5687 .manufacture_id = SPANSION_ID,
5688 .model_id = SPANSION_S25FL004A,
5689 .total_size = 512,
5690 .page_size = 256,
5691 .tested = TEST_UNTESTED,
5692 .probe = probe_spi_rdid,
5693 .probe_timing = TIMING_ZERO,
5694 .block_erasers =
5695 {
5696 {
5697 .eraseblocks = { {64 * 1024, 8} },
5698 .block_erase = spi_block_erase_d8,
5699 }, {
5700 .eraseblocks = { {512 * 1024, 1} },
5701 .block_erase = spi_block_erase_c7,
5702 }
5703 },
5704 .unlock = spi_disable_blockprotect,
5705 .write = spi_chip_write_256,
5706 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00005707 .voltage = {2700, 3600},
hailfinger5fece212010-11-29 00:37:49 +00005708 },
5709
5710 {
5711 .vendor = "Spansion",
David Hendricks668f29d2011-01-27 18:51:45 -08005712 .name = "S25FL004A",
5713 .bustype = CHIP_BUSTYPE_SPI,
5714 .manufacture_id = SPANSION_ID,
5715 .model_id = SPANSION_S25FL004A,
5716 .total_size = 512,
5717 .page_size = 256,
5718 .tested = TEST_UNTESTED,
5719 .probe = probe_spi_rdid,
5720 .probe_timing = TIMING_ZERO,
5721 .block_erasers =
5722 {
5723 {
5724 .eraseblocks = { {64 * 1024, 8} },
5725 .block_erase = spi_block_erase_d8,
5726 }, {
5727 .eraseblocks = { {512 * 1024, 1} },
5728 .block_erase = spi_block_erase_c7,
5729 }
5730 },
5731 .unlock = spi_disable_blockprotect,
5732 .write = spi_chip_write_256,
5733 .read = spi_chip_read,
5734 },
5735
5736 {
5737 .vendor = "Spansion",
mkarcher7b3a9152010-01-12 23:29:30 +00005738 .name = "S25FL008A",
5739 .bustype = CHIP_BUSTYPE_SPI,
5740 .manufacture_id = SPANSION_ID,
5741 .model_id = SPANSION_S25FL008A,
5742 .total_size = 1024,
5743 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +00005744 .tested = TEST_OK_PRE,
mkarcher7b3a9152010-01-12 23:29:30 +00005745 .probe = probe_spi_rdid,
5746 .probe_timing = TIMING_ZERO,
mkarcher7b3a9152010-01-12 23:29:30 +00005747 .block_erasers =
5748 {
5749 {
5750 .eraseblocks = { {64 * 1024, 16} },
5751 .block_erase = spi_block_erase_d8,
5752 }, {
5753 .eraseblocks = { {1024 * 1024, 1} },
5754 .block_erase = spi_block_erase_c7,
5755 }
5756 },
hailfingerb9560ee2010-07-14 20:21:22 +00005757 .unlock = spi_disable_blockprotect,
mkarcher7b3a9152010-01-12 23:29:30 +00005758 .write = spi_chip_write_256,
5759 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005760 .voltage = {2700, 3600},
mkarcher7b3a9152010-01-12 23:29:30 +00005761 },
5762
5763 {
5764 .vendor = "Spansion",
hailfinger286829b2009-01-08 03:40:17 +00005765 .name = "S25FL016A",
hailfinger40167462009-05-31 17:57:34 +00005766 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005767 .manufacture_id = SPANSION_ID,
5768 .model_id = SPANSION_S25FL016A,
5769 .total_size = 2048,
5770 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +00005771 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00005772 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005773 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00005774 .block_erasers =
5775 {
5776 {
5777 .eraseblocks = { {64 * 1024, 32} },
5778 .block_erase = spi_block_erase_d8,
5779 }, {
5780 .eraseblocks = { {2 * 1024 * 1024, 1} },
5781 .block_erase = spi_block_erase_c7,
5782 }
5783 },
hailfingerb9560ee2010-07-14 20:21:22 +00005784 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005785 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005786 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005787 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005788 },
5789
hailfinger286829b2009-01-08 03:40:17 +00005790 {
hailfinger5fece212010-11-29 00:37:49 +00005791 .vendor = "Spansion",
5792 .name = "S25FL032A",
5793 .bustype = CHIP_BUSTYPE_SPI,
5794 .manufacture_id = SPANSION_ID,
5795 .model_id = SPANSION_S25FL032A,
5796 .total_size = 4096,
5797 .page_size = 256,
5798 .tested = TEST_UNTESTED,
5799 .probe = probe_spi_rdid,
5800 .probe_timing = TIMING_ZERO,
5801 .block_erasers =
5802 {
5803 {
5804 .eraseblocks = { {64 * 1024, 64} },
5805 .block_erase = spi_block_erase_d8,
5806 }, {
5807 .eraseblocks = { {4 * 1024 * 1024, 1} },
5808 .block_erase = spi_block_erase_c7,
5809 }
5810 },
5811 .unlock = spi_disable_blockprotect,
5812 .write = spi_chip_write_256,
5813 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00005814 .voltage = {2700, 3600},
hailfinger5fece212010-11-29 00:37:49 +00005815 },
5816
5817 {
5818 .vendor = "Spansion",
5819 .name = "S25FL064A",
5820 .bustype = CHIP_BUSTYPE_SPI,
5821 .manufacture_id = SPANSION_ID,
5822 .model_id = SPANSION_S25FL064A,
5823 .total_size = 8192,
5824 .page_size = 256,
5825 .tested = TEST_OK_PREW,
5826 .probe = probe_spi_rdid,
5827 .probe_timing = TIMING_ZERO,
5828 .block_erasers =
5829 {
5830 {
5831 .eraseblocks = { {64 * 1024, 128} },
5832 .block_erase = spi_block_erase_d8,
5833 }, {
5834 .eraseblocks = { {8 * 1024 * 1024, 1} },
5835 .block_erase = spi_block_erase_c7,
5836 }
5837 },
5838 .unlock = spi_disable_blockprotect,
5839 .write = spi_chip_write_256,
5840 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00005841 .voltage = {2700, 3600},
hailfinger5fece212010-11-29 00:37:49 +00005842 },
5843
5844 {
hailfinger286829b2009-01-08 03:40:17 +00005845 .vendor = "SST",
hailfingerfb1f31f2010-12-03 14:48:11 +00005846 .name = "SST25VF010.REMS",
5847 .bustype = CHIP_BUSTYPE_SPI,
5848 .manufacture_id = SST_ID,
5849 .model_id = SST_SST25VF010_REMS,
5850 .total_size = 128,
5851 .page_size = 256,
5852 .tested = TEST_OK_PREW,
5853 .probe = probe_spi_rems,
5854 .probe_timing = TIMING_ZERO,
5855 .block_erasers =
5856 {
5857 {
5858 .eraseblocks = { {4 * 1024, 32} },
5859 .block_erase = spi_block_erase_20,
5860 }, {
5861 .eraseblocks = { {32 * 1024, 4} },
5862 .block_erase = spi_block_erase_52,
5863 }, {
5864 .eraseblocks = { {128 * 1024, 1} },
5865 .block_erase = spi_block_erase_60,
5866 },
5867 },
5868 .unlock = spi_disable_blockprotect,
5869 .write = spi_chip_write_1,
5870 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00005871 .voltage = {2700, 3600},
hailfingerfb1f31f2010-12-03 14:48:11 +00005872 },
5873
5874 {
David Hendricks668f29d2011-01-27 18:51:45 -08005875 .vendor = "Spansion",
5876 .name = "S25FL032A",
5877 .bustype = CHIP_BUSTYPE_SPI,
5878 .manufacture_id = SPANSION_ID,
5879 .model_id = SPANSION_S25FL032A,
5880 .total_size = 4096,
5881 .page_size = 256,
5882 .tested = TEST_UNTESTED,
5883 .probe = probe_spi_rdid,
5884 .probe_timing = TIMING_ZERO,
5885 .block_erasers =
5886 {
5887 {
5888 .eraseblocks = { {64 * 1024, 64} },
5889 .block_erase = spi_block_erase_d8,
5890 }, {
5891 .eraseblocks = { {4 * 1024 * 1024, 1} },
5892 .block_erase = spi_block_erase_c7,
5893 }
5894 },
5895 .unlock = spi_disable_blockprotect,
5896 .write = spi_chip_write_256,
5897 .read = spi_chip_read,
5898 },
5899
5900 {
5901 .vendor = "Spansion",
5902 .name = "S25FL064A",
5903 .bustype = CHIP_BUSTYPE_SPI,
5904 .manufacture_id = SPANSION_ID,
5905 .model_id = SPANSION_S25FL064A,
5906 .total_size = 8192,
5907 .page_size = 256,
5908 .tested = TEST_OK_PREW,
5909 .probe = probe_spi_rdid,
5910 .probe_timing = TIMING_ZERO,
5911 .block_erasers =
5912 {
5913 {
5914 .eraseblocks = { {64 * 1024, 128} },
5915 .block_erase = spi_block_erase_d8,
5916 }, {
5917 .eraseblocks = { {8 * 1024 * 1024, 1} },
5918 .block_erase = spi_block_erase_c7,
5919 }
5920 },
5921 .unlock = spi_disable_blockprotect,
5922 .write = spi_chip_write_256,
5923 .read = spi_chip_read,
5924 },
5925
5926 {
5927 .vendor = "SST",
5928 .name = "SST25VF010.REMS",
5929 .bustype = CHIP_BUSTYPE_SPI,
5930 .manufacture_id = SST_ID,
5931 .model_id = SST_SST25VF010_REMS,
5932 .total_size = 128,
5933 .page_size = 256,
5934 .tested = TEST_OK_PREW,
5935 .probe = probe_spi_rems,
5936 .probe_timing = TIMING_ZERO,
5937 .block_erasers =
5938 {
5939 {
5940 .eraseblocks = { {4 * 1024, 32} },
5941 .block_erase = spi_block_erase_20,
5942 }, {
5943 .eraseblocks = { {32 * 1024, 4} },
5944 .block_erase = spi_block_erase_52,
5945 }, {
5946 .eraseblocks = { {128 * 1024, 1} },
5947 .block_erase = spi_block_erase_60,
5948 },
5949 },
5950 .unlock = spi_disable_blockprotect,
5951 .write = spi_chip_write_1,
5952 .read = spi_chip_read,
5953 },
5954
5955 {
hailfingerfb1f31f2010-12-03 14:48:11 +00005956 .vendor = "SST",
hailfinger286829b2009-01-08 03:40:17 +00005957 .name = "SST25VF016B",
hailfinger40167462009-05-31 17:57:34 +00005958 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005959 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00005960 .model_id = SST_SST25VF016B,
hailfinger286829b2009-01-08 03:40:17 +00005961 .total_size = 2048,
5962 .page_size = 256,
hailfingerfb1f31f2010-12-03 14:48:11 +00005963 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00005964 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005965 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00005966 .block_erasers =
5967 {
5968 {
5969 .eraseblocks = { {4 * 1024, 512} },
5970 .block_erase = spi_block_erase_20,
5971 }, {
5972 .eraseblocks = { {32 * 1024, 64} },
5973 .block_erase = spi_block_erase_52,
5974 }, {
5975 .eraseblocks = { {64 * 1024, 32} },
5976 .block_erase = spi_block_erase_d8,
5977 }, {
5978 .eraseblocks = { {2 * 1024 * 1024, 1} },
5979 .block_erase = spi_block_erase_60,
5980 }, {
5981 .eraseblocks = { {2 * 1024 * 1024, 1} },
5982 .block_erase = spi_block_erase_c7,
5983 },
5984 },
hailfingerb9560ee2010-07-14 20:21:22 +00005985 .unlock = spi_disable_blockprotect,
hailfinger065ae122009-05-13 22:19:12 +00005986 .write = spi_chip_write_1,
hailfinger286829b2009-01-08 03:40:17 +00005987 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00005988 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00005989 },
5990
hailfinger286829b2009-01-08 03:40:17 +00005991 {
5992 .vendor = "SST",
5993 .name = "SST25VF032B",
hailfinger40167462009-05-31 17:57:34 +00005994 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005995 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00005996 .model_id = SST_SST25VF032B,
hailfinger286829b2009-01-08 03:40:17 +00005997 .total_size = 4096,
5998 .page_size = 256,
stefanct7fbb3e32011-05-18 01:32:00 +00005999 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00006000 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00006001 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00006002 .block_erasers =
6003 {
6004 {
6005 .eraseblocks = { {4 * 1024, 1024} },
6006 .block_erase = spi_block_erase_20,
6007 }, {
6008 .eraseblocks = { {32 * 1024, 128} },
6009 .block_erase = spi_block_erase_52,
6010 }, {
6011 .eraseblocks = { {64 * 1024, 64} },
6012 .block_erase = spi_block_erase_d8,
6013 }, {
6014 .eraseblocks = { {4 * 1024 * 1024, 1} },
6015 .block_erase = spi_block_erase_60,
6016 }, {
6017 .eraseblocks = { {4 * 1024 * 1024, 1} },
6018 .block_erase = spi_block_erase_c7,
6019 },
6020 },
hailfingerb9560ee2010-07-14 20:21:22 +00006021 .unlock = spi_disable_blockprotect,
hailfinger081e3512010-10-05 22:29:08 +00006022 .write = spi_aai_write,
hailfinger3aa0df12009-12-23 12:16:47 +00006023 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00006024 .voltage = {2700, 3600},
hailfinger3aa0df12009-12-23 12:16:47 +00006025 },
6026
6027 {
6028 .vendor = "SST",
hailfingerea6fc922010-07-21 15:02:22 +00006029 .name = "SST25VF064C",
6030 .bustype = CHIP_BUSTYPE_SPI,
6031 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006032 .model_id = SST_SST25VF064C,
hailfingerea6fc922010-07-21 15:02:22 +00006033 .total_size = 8192,
6034 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08006035 .tested = TEST_OK_PRE,
hailfingerea6fc922010-07-21 15:02:22 +00006036 .probe = probe_spi_rdid,
6037 .probe_timing = TIMING_ZERO,
6038 .block_erasers =
6039 {
6040 {
6041 .eraseblocks = { {4 * 1024, 2048} },
6042 .block_erase = spi_block_erase_20,
6043 }, {
6044 .eraseblocks = { {32 * 1024, 256} },
6045 .block_erase = spi_block_erase_52,
6046 }, {
6047 .eraseblocks = { {64 * 1024, 128} },
6048 .block_erase = spi_block_erase_d8,
6049 }, {
6050 .eraseblocks = { {8 * 1024 * 1024, 1} },
6051 .block_erase = spi_block_erase_60,
6052 }, {
6053 .eraseblocks = { {8 * 1024 * 1024, 1} },
6054 .block_erase = spi_block_erase_c7,
6055 },
6056 },
6057 .unlock = spi_disable_blockprotect,
hailfinger081e3512010-10-05 22:29:08 +00006058 .write = spi_chip_write_256,
hailfingerea6fc922010-07-21 15:02:22 +00006059 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00006060 .voltage = {2700, 3600},
hailfingerea6fc922010-07-21 15:02:22 +00006061 },
6062
6063 {
6064 .vendor = "SST",
hailfinger3aa0df12009-12-23 12:16:47 +00006065 .name = "SST25VF040.REMS",
6066 .bustype = CHIP_BUSTYPE_SPI,
6067 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006068 .model_id = SST_SST25VF040_REMS,
hailfinger3aa0df12009-12-23 12:16:47 +00006069 .total_size = 512,
6070 .page_size = 256,
6071 .tested = TEST_OK_PR,
6072 .probe = probe_spi_rems,
6073 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00006074 .block_erasers =
6075 {
6076 {
6077 .eraseblocks = { {4 * 1024, 128} },
6078 .block_erase = spi_block_erase_20,
6079 }, {
6080 .eraseblocks = { {32 * 1024, 16} },
6081 .block_erase = spi_block_erase_52,
6082 }, {
6083 .eraseblocks = { {512 * 1024, 1} },
6084 .block_erase = spi_block_erase_60,
6085 },
6086 },
hailfingerb9560ee2010-07-14 20:21:22 +00006087 .unlock = spi_disable_blockprotect,
hailfinger065ae122009-05-13 22:19:12 +00006088 .write = spi_chip_write_1,
hailfinger286829b2009-01-08 03:40:17 +00006089 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00006090 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006091 },
6092
hailfinger286829b2009-01-08 03:40:17 +00006093 {
6094 .vendor = "SST",
6095 .name = "SST25VF040B",
hailfinger40167462009-05-31 17:57:34 +00006096 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00006097 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006098 .model_id = SST_SST25VF040B,
hailfinger286829b2009-01-08 03:40:17 +00006099 .total_size = 512,
6100 .page_size = 256,
6101 .tested = TEST_UNTESTED,
6102 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00006103 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00006104 .block_erasers =
6105 {
6106 {
6107 .eraseblocks = { {4 * 1024, 128} },
6108 .block_erase = spi_block_erase_20,
6109 }, {
6110 .eraseblocks = { {32 * 1024, 16} },
6111 .block_erase = spi_block_erase_52,
6112 }, {
6113 .eraseblocks = { {64 * 1024, 8} },
6114 .block_erase = spi_block_erase_d8,
6115 }, {
6116 .eraseblocks = { {512 * 1024, 1} },
6117 .block_erase = spi_block_erase_60,
6118 }, {
6119 .eraseblocks = { {512 * 1024, 1} },
6120 .block_erase = spi_block_erase_c7,
6121 },
6122 },
hailfingerb9560ee2010-07-14 20:21:22 +00006123 .unlock = spi_disable_blockprotect,
hailfinger065ae122009-05-13 22:19:12 +00006124 .write = spi_chip_write_1,
stuge48dda5c2009-02-25 08:07:33 +00006125 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00006126 .voltage = {2700, 3600},
stuge48dda5c2009-02-25 08:07:33 +00006127 },
6128
6129 {
6130 .vendor = "SST",
hailfinger0782b1e2010-06-14 12:58:06 +00006131 .name = "SST25LF040A.RES",
6132 .bustype = CHIP_BUSTYPE_SPI,
6133 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006134 .model_id = SST_SST25VF040_REMS,
hailfinger0782b1e2010-06-14 12:58:06 +00006135 .total_size = 512,
6136 .page_size = 256,
6137 .tested = TEST_OK_PROBE,
6138 .probe = probe_spi_res2,
6139 .probe_timing = TIMING_ZERO,
6140 .block_erasers =
6141 {
6142 {
6143 .eraseblocks = { {4 * 1024, 128} },
6144 .block_erase = spi_block_erase_20,
6145 }, {
6146 .eraseblocks = { {32 * 1024, 16} },
6147 .block_erase = spi_block_erase_52,
6148 }, {
6149 .eraseblocks = { {512 * 1024, 1} },
6150 .block_erase = spi_block_erase_60,
6151 },
6152 },
hailfingerb9560ee2010-07-14 20:21:22 +00006153 .unlock = spi_disable_blockprotect,
hailfinger0782b1e2010-06-14 12:58:06 +00006154 .write = spi_chip_write_1,
6155 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00006156 .voltage = {3000, 3600},
hailfinger0782b1e2010-06-14 12:58:06 +00006157 },
6158
6159 {
6160 .vendor = "SST",
stuge712ce862009-01-26 03:37:40 +00006161 .name = "SST25VF040B.REMS",
hailfinger40167462009-05-31 17:57:34 +00006162 .bustype = CHIP_BUSTYPE_SPI,
hailfingerc391ccb2009-06-12 11:45:10 +00006163 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006164 .model_id = SST_SST25VF040B_REMS,
stuge712ce862009-01-26 03:37:40 +00006165 .total_size = 512,
hailfinger3aa0df12009-12-23 12:16:47 +00006166 .page_size = 256,
stuge712ce862009-01-26 03:37:40 +00006167 .tested = TEST_OK_PR,
6168 .probe = probe_spi_rems,
hailfingere3095d92009-06-05 13:46:17 +00006169 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00006170 .block_erasers =
6171 {
6172 {
6173 .eraseblocks = { {4 * 1024, 128} },
6174 .block_erase = spi_block_erase_20,
6175 }, {
6176 .eraseblocks = { {32 * 1024, 16} },
6177 .block_erase = spi_block_erase_52,
6178 }, {
6179 .eraseblocks = { {64 * 1024, 8} },
6180 .block_erase = spi_block_erase_d8,
6181 }, {
6182 .eraseblocks = { {512 * 1024, 1} },
6183 .block_erase = spi_block_erase_60,
6184 }, {
6185 .eraseblocks = { {512 * 1024, 1} },
6186 .block_erase = spi_block_erase_c7,
6187 },
6188 },
hailfingerb9560ee2010-07-14 20:21:22 +00006189 .unlock = spi_disable_blockprotect,
hailfinger065ae122009-05-13 22:19:12 +00006190 .write = spi_chip_write_1,
stuge712ce862009-01-26 03:37:40 +00006191 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00006192 .voltage = {2700, 3600},
stuge712ce862009-01-26 03:37:40 +00006193 },
6194
6195 {
6196 .vendor = "SST",
hailfinger286829b2009-01-08 03:40:17 +00006197 .name = "SST25VF080B",
hailfinger40167462009-05-31 17:57:34 +00006198 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00006199 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006200 .model_id = SST_SST25VF080B,
hailfinger286829b2009-01-08 03:40:17 +00006201 .total_size = 1024,
6202 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08006203 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006204 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00006205 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00006206 .block_erasers =
6207 {
6208 {
6209 .eraseblocks = { {4 * 1024, 256} },
6210 .block_erase = spi_block_erase_20,
6211 }, {
6212 .eraseblocks = { {32 * 1024, 32} },
6213 .block_erase = spi_block_erase_52,
6214 }, {
6215 .eraseblocks = { {64 * 1024, 16} },
6216 .block_erase = spi_block_erase_d8,
6217 }, {
6218 .eraseblocks = { {1024 * 1024, 1} },
6219 .block_erase = spi_block_erase_60,
6220 }, {
6221 .eraseblocks = { {1024 * 1024, 1} },
6222 .block_erase = spi_block_erase_c7,
6223 },
6224 },
hailfingerb9560ee2010-07-14 20:21:22 +00006225 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00006226 .write = spi_chip_write_1,
hailfinger286829b2009-01-08 03:40:17 +00006227 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00006228 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006229 },
6230
hailfinger286829b2009-01-08 03:40:17 +00006231 {
6232 .vendor = "SST",
6233 .name = "SST28SF040A",
hailfingera5245512009-06-28 19:19:25 +00006234 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006235 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006236 .model_id = SST_SST28SF040,
hailfinger286829b2009-01-08 03:40:17 +00006237 .total_size = 512,
6238 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00006239 .feature_bits = 0,
hailfinger286829b2009-01-08 03:40:17 +00006240 .tested = TEST_UNTESTED,
hailfingerb8e4e212010-03-15 03:48:42 +00006241 .probe = probe_82802ab,
uwe37f43422011-06-19 17:23:55 +00006242 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst28sf040.c) */
snelson264e57c2010-01-20 20:55:53 +00006243 .block_erasers =
6244 {
6245 {
6246 .eraseblocks = { {128, 4096} },
6247 .block_erase = erase_sector_28sf040,
6248 }, {
6249 .eraseblocks = { {512 * 1024, 1} },
6250 .block_erase = erase_chip_28sf040,
6251 }
6252 },
hailfinger86bf3b52010-10-13 21:49:30 +00006253 .unlock = unprotect_28sf040,
hailfinger286829b2009-01-08 03:40:17 +00006254 .write = write_28sf040,
hailfinger23060112009-05-08 12:49:03 +00006255 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006256 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00006257 },
6258
hailfinger286829b2009-01-08 03:40:17 +00006259 {
6260 .vendor = "SST",
6261 .name = "SST29EE010",
hailfingera5245512009-06-28 19:19:25 +00006262 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006263 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006264 .model_id = SST_SST29EE010,
hailfinger286829b2009-01-08 03:40:17 +00006265 .total_size = 128,
6266 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00006267 .feature_bits = FEATURE_LONG_RESET,
hailfingerd217d122010-10-08 18:52:29 +00006268 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00006269 .probe = probe_jedec,
hailfingerc391ccb2009-06-12 11:45:10 +00006270 .probe_timing = 10,
snelson264e57c2010-01-20 20:55:53 +00006271 .block_erasers =
6272 {
6273 {
6274 .eraseblocks = { {128 * 1024, 1} },
6275 .block_erase = erase_chip_block_jedec,
6276 }
6277 },
hailfinger286829b2009-01-08 03:40:17 +00006278 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00006279 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006280 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00006281 },
6282
hailfinger286829b2009-01-08 03:40:17 +00006283 {
6284 .vendor = "SST",
6285 .name = "SST29LE010",
hailfingera5245512009-06-28 19:19:25 +00006286 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006287 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006288 .model_id = SST_SST29LE010,
hailfinger286829b2009-01-08 03:40:17 +00006289 .total_size = 128,
6290 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00006291 .feature_bits = FEATURE_LONG_RESET,
hailfinger286829b2009-01-08 03:40:17 +00006292 .tested = TEST_UNTESTED,
6293 .probe = probe_jedec,
hailfingerc391ccb2009-06-12 11:45:10 +00006294 .probe_timing = 10,
snelson264e57c2010-01-20 20:55:53 +00006295 .block_erasers =
6296 {
6297 {
6298 .eraseblocks = { {128 * 1024, 1} },
6299 .block_erase = erase_chip_block_jedec,
6300 }
6301 },
hailfinger286829b2009-01-08 03:40:17 +00006302 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00006303 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006304 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006305 },
6306
hailfinger286829b2009-01-08 03:40:17 +00006307 {
6308 .vendor = "SST",
6309 .name = "SST29EE020A",
hailfingera5245512009-06-28 19:19:25 +00006310 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006311 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006312 .model_id = SST_SST29EE020A,
hailfinger286829b2009-01-08 03:40:17 +00006313 .total_size = 256,
6314 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00006315 .feature_bits = FEATURE_LONG_RESET,
hailfingerd217d122010-10-08 18:52:29 +00006316 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006317 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00006318 .probe_timing = 10,
snelson264e57c2010-01-20 20:55:53 +00006319 .block_erasers =
6320 {
6321 {
6322 .eraseblocks = { {256 * 1024, 1} },
6323 .block_erase = erase_chip_block_jedec,
6324 }
6325 },
hailfinger286829b2009-01-08 03:40:17 +00006326 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00006327 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006328 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00006329 },
6330
hailfinger286829b2009-01-08 03:40:17 +00006331 {
6332 .vendor = "SST",
6333 .name = "SST29LE020",
hailfingera5245512009-06-28 19:19:25 +00006334 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006335 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006336 .model_id = SST_SST29LE020,
hailfinger286829b2009-01-08 03:40:17 +00006337 .total_size = 256,
6338 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00006339 .feature_bits = FEATURE_LONG_RESET,
hailfingerd217d122010-10-08 18:52:29 +00006340 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006341 .probe = probe_jedec,
hailfingerc391ccb2009-06-12 11:45:10 +00006342 .probe_timing = 10,
snelson264e57c2010-01-20 20:55:53 +00006343 .block_erasers =
6344 {
6345 {
6346 .eraseblocks = { {256 * 1024, 1} },
6347 .block_erase = erase_chip_block_jedec,
6348 }
6349 },
hailfinger286829b2009-01-08 03:40:17 +00006350 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00006351 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006352 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006353 },
6354
hailfinger286829b2009-01-08 03:40:17 +00006355 {
6356 .vendor = "SST",
uwe2c909142010-01-23 15:15:19 +00006357 .name = "SST39SF512",
6358 .bustype = CHIP_BUSTYPE_PARALLEL,
6359 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006360 .model_id = SST_SST39SF512,
uwe2c909142010-01-23 15:15:19 +00006361 .total_size = 64,
6362 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00006363 .feature_bits = FEATURE_EITHER_RESET,
hailfingerf35c3932011-03-07 15:32:58 +00006364 .tested = TEST_OK_PREW,
uwe2c909142010-01-23 15:15:19 +00006365 .probe = probe_jedec,
6366 .probe_timing = 1, /* 150 ns */
uwe2c909142010-01-23 15:15:19 +00006367 .block_erasers =
6368 {
6369 {
6370 .eraseblocks = { {4 * 1024, 16} },
6371 .block_erase = erase_sector_jedec,
6372 }, {
6373 .eraseblocks = { {64 * 1024, 1} },
6374 .block_erase = erase_chip_block_jedec,
6375 }
6376 },
snelsonc6855342010-01-28 23:55:12 +00006377 .write = write_jedec_1,
uwe2c909142010-01-23 15:15:19 +00006378 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006379 .voltage = {4500, 5500},
uwe2c909142010-01-23 15:15:19 +00006380 },
6381
6382 {
6383 .vendor = "SST",
hailfinger286829b2009-01-08 03:40:17 +00006384 .name = "SST39SF010A",
hailfingera5245512009-06-28 19:19:25 +00006385 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006386 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006387 .model_id = SST_SST39SF010,
hailfinger286829b2009-01-08 03:40:17 +00006388 .total_size = 128,
6389 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00006390 .feature_bits = FEATURE_EITHER_RESET,
stefanct371e7e82011-07-07 19:56:58 +00006391 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00006392 .probe = probe_jedec,
hailfingerc391ccb2009-06-12 11:45:10 +00006393 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006394 .block_erasers =
6395 {
6396 {
6397 .eraseblocks = { {4 * 1024, 32} },
6398 .block_erase = erase_sector_jedec,
6399 }, {
6400 .eraseblocks = { {128 * 1024, 1} },
6401 .block_erase = erase_chip_block_jedec,
6402 }
6403 },
snelsonc6855342010-01-28 23:55:12 +00006404 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006405 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006406 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00006407 },
6408
hailfinger286829b2009-01-08 03:40:17 +00006409 {
6410 .vendor = "SST",
6411 .name = "SST39SF020A",
hailfingera5245512009-06-28 19:19:25 +00006412 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006413 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006414 .model_id = SST_SST39SF020,
hailfinger286829b2009-01-08 03:40:17 +00006415 .total_size = 256,
6416 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00006417 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08006418 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006419 .probe = probe_jedec,
uwe81d75ab2010-09-05 12:41:25 +00006420 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006421 .block_erasers =
6422 {
6423 {
6424 .eraseblocks = { {4 * 1024, 64} },
6425 .block_erase = erase_sector_jedec,
6426 }, {
6427 .eraseblocks = { {256 * 1024, 1} },
6428 .block_erase = erase_chip_block_jedec,
6429 }
6430 },
snelsonc6855342010-01-28 23:55:12 +00006431 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006432 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006433 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00006434 },
6435
hailfinger286829b2009-01-08 03:40:17 +00006436 {
6437 .vendor = "SST",
6438 .name = "SST39SF040",
hailfingera5245512009-06-28 19:19:25 +00006439 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006440 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006441 .model_id = SST_SST39SF040,
hailfinger286829b2009-01-08 03:40:17 +00006442 .total_size = 512,
6443 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00006444 .feature_bits = FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00006445 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006446 .probe = probe_jedec,
uwe81d75ab2010-09-05 12:41:25 +00006447 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006448 .block_erasers =
6449 {
6450 {
6451 .eraseblocks = { {4 * 1024, 128} },
6452 .block_erase = erase_sector_jedec,
6453 }, {
6454 .eraseblocks = { {512 * 1024, 1} },
6455 .block_erase = erase_chip_block_jedec,
6456 }
6457 },
snelsonc6855342010-01-28 23:55:12 +00006458 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006459 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006460 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00006461 },
6462
hailfinger286829b2009-01-08 03:40:17 +00006463 {
6464 .vendor = "SST",
6465 .name = "SST39VF512",
hailfingera5245512009-06-28 19:19:25 +00006466 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006467 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006468 .model_id = SST_SST39VF512,
hailfinger286829b2009-01-08 03:40:17 +00006469 .total_size = 64,
6470 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00006471 .feature_bits = FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00006472 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006473 .probe = probe_jedec,
uwe81d75ab2010-09-05 12:41:25 +00006474 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006475 .block_erasers =
6476 {
6477 {
6478 .eraseblocks = { {4 * 1024, 16} },
6479 .block_erase = erase_sector_jedec,
6480 }, {
6481 .eraseblocks = { {64 * 1024, 1} },
6482 .block_erase = erase_chip_block_jedec,
6483 }
6484 },
snelsonc6855342010-01-28 23:55:12 +00006485 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006486 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006487 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006488 },
6489
hailfinger286829b2009-01-08 03:40:17 +00006490 {
6491 .vendor = "SST",
6492 .name = "SST39VF010",
hailfingera5245512009-06-28 19:19:25 +00006493 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006494 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006495 .model_id = SST_SST39VF010,
hailfinger286829b2009-01-08 03:40:17 +00006496 .total_size = 128,
6497 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00006498 .feature_bits = FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00006499 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006500 .probe = probe_jedec,
uwe81d75ab2010-09-05 12:41:25 +00006501 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006502 .block_erasers =
6503 {
6504 {
6505 .eraseblocks = { {4 * 1024, 32} },
6506 .block_erase = erase_sector_jedec,
6507 }, {
6508 .eraseblocks = { {128 * 1024, 1} },
6509 .block_erase = erase_chip_block_jedec,
6510 }
6511 },
snelsonc6855342010-01-28 23:55:12 +00006512 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006513 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006514 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006515 },
6516
hailfinger286829b2009-01-08 03:40:17 +00006517 {
6518 .vendor = "SST",
6519 .name = "SST39VF020",
hailfingera5245512009-06-28 19:19:25 +00006520 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006521 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006522 .model_id = SST_SST39VF020,
hailfinger286829b2009-01-08 03:40:17 +00006523 .total_size = 256,
6524 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00006525 .feature_bits = FEATURE_EITHER_RESET,
6526 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00006527 .probe = probe_jedec,
uwe81d75ab2010-09-05 12:41:25 +00006528 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006529 .block_erasers =
6530 {
6531 {
6532 .eraseblocks = { {4 * 1024, 64} },
6533 .block_erase = erase_sector_jedec,
6534 }, {
6535 .eraseblocks = { {256 * 1024, 1} },
6536 .block_erase = erase_chip_block_jedec,
6537 }
6538 },
snelsonc6855342010-01-28 23:55:12 +00006539 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006540 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006541 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006542 },
6543
hailfinger286829b2009-01-08 03:40:17 +00006544 {
6545 .vendor = "SST",
6546 .name = "SST39VF040",
hailfingera5245512009-06-28 19:19:25 +00006547 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006548 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006549 .model_id = SST_SST39VF040,
hailfinger286829b2009-01-08 03:40:17 +00006550 .total_size = 512,
6551 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00006552 .feature_bits = FEATURE_EITHER_RESET,
6553 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00006554 .probe = probe_jedec,
uwe81d75ab2010-09-05 12:41:25 +00006555 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006556 .block_erasers =
6557 {
6558 {
6559 .eraseblocks = { {4 * 1024, 128} },
6560 .block_erase = erase_sector_jedec,
6561 }, {
6562 .eraseblocks = { {512 * 1024, 1} },
6563 .block_erase = erase_chip_block_jedec,
6564 }
6565 },
snelsonc6855342010-01-28 23:55:12 +00006566 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006567 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006568 .voltage = {2700, 3600},
hailfingerdfa338f2008-12-08 23:51:45 +00006569 },
stepanaa1b6a22008-12-08 18:15:10 +00006570
hailfinger286829b2009-01-08 03:40:17 +00006571 {
6572 .vendor = "SST",
stuged9f66152009-01-25 23:55:12 +00006573 .name = "SST39VF080",
hailfingera5245512009-06-28 19:19:25 +00006574 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingerc391ccb2009-06-12 11:45:10 +00006575 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006576 .model_id = SST_SST39VF080,
stuged9f66152009-01-25 23:55:12 +00006577 .total_size = 1024,
6578 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00006579 .feature_bits = FEATURE_EITHER_RESET,
stuged9f66152009-01-25 23:55:12 +00006580 .tested = TEST_UNTESTED,
6581 .probe = probe_jedec,
uwe81d75ab2010-09-05 12:41:25 +00006582 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006583 .block_erasers =
6584 {
6585 {
6586 .eraseblocks = { {4 * 1024, 256} },
6587 .block_erase = erase_sector_jedec,
6588 }, {
6589 .eraseblocks = { {64 * 1024, 16} },
6590 .block_erase = erase_block_jedec,
6591 }, {
6592 .eraseblocks = { {1024 * 1024, 1} },
6593 .block_erase = erase_chip_block_jedec,
6594 }
6595 },
snelsonc6855342010-01-28 23:55:12 +00006596 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006597 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006598 .voltage = {2700, 3600},
stuged9f66152009-01-25 23:55:12 +00006599 },
6600
6601 {
6602 .vendor = "SST",
hailfinger286829b2009-01-08 03:40:17 +00006603 .name = "SST49LF002A/B",
hailfingera5245512009-06-28 19:19:25 +00006604 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006605 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006606 .model_id = SST_SST49LF002A,
hailfinger286829b2009-01-08 03:40:17 +00006607 .total_size = 256,
6608 .page_size = 16 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006609 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08006610 .tested = TEST_OK_PRE,
hailfingerb8e4e212010-03-15 03:48:42 +00006611 .probe = probe_jedec,
6612 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006613 .block_erasers =
6614 {
6615 {
6616 .eraseblocks = { {4 * 1024, 64} },
snelson712e72d2010-03-16 03:09:10 +00006617 .block_erase = erase_sector_jedec,
snelson264e57c2010-01-20 20:55:53 +00006618 }, {
6619 .eraseblocks = { {16 * 1024, 16} },
snelson712e72d2010-03-16 03:09:10 +00006620 .block_erase = erase_block_jedec,
snelson264e57c2010-01-20 20:55:53 +00006621 }, {
6622 .eraseblocks = { {256 * 1024, 1} },
6623 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
6624 }
6625 },
hailfingerb8e4e212010-03-15 03:48:42 +00006626 .printlock = printlock_sst_fwhub,
snelson712e72d2010-03-16 03:09:10 +00006627 .unlock = unlock_sst_fwhub,
6628 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006629 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006630 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006631 },
6632
hailfinger286829b2009-01-08 03:40:17 +00006633 {
6634 .vendor = "SST",
6635 .name = "SST49LF003A/B",
hailfingera5245512009-06-28 19:19:25 +00006636 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006637 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006638 .model_id = SST_SST49LF003A,
hailfinger286829b2009-01-08 03:40:17 +00006639 .total_size = 384,
6640 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006641 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
uwe63555e62009-09-25 01:09:18 +00006642 .tested = TEST_OK_PR,
hailfingerb8e4e212010-03-15 03:48:42 +00006643 .probe = probe_jedec,
6644 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006645 .block_erasers =
6646 {
6647 {
6648 .eraseblocks = { {4 * 1024, 96} },
snelson712e72d2010-03-16 03:09:10 +00006649 .block_erase = erase_sector_jedec,
snelson264e57c2010-01-20 20:55:53 +00006650 }, {
6651 .eraseblocks = { {64 * 1024, 6} },
snelson712e72d2010-03-16 03:09:10 +00006652 .block_erase = erase_block_jedec,
snelson264e57c2010-01-20 20:55:53 +00006653 }, {
6654 .eraseblocks = { {384 * 1024, 1} },
6655 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
6656 }
6657 },
hailfingerb8e4e212010-03-15 03:48:42 +00006658 .printlock = printlock_sst_fwhub,
snelson712e72d2010-03-16 03:09:10 +00006659 .unlock = unlock_sst_fwhub,
6660 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006661 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006662 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006663 },
6664
hailfinger286829b2009-01-08 03:40:17 +00006665 {
hailfinger80f48682009-09-23 22:01:33 +00006666 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
6667 * and is only honored for 64k block erase, but not 4k sector erase.
6668 */
hailfinger286829b2009-01-08 03:40:17 +00006669 .vendor = "SST",
6670 .name = "SST49LF004A/B",
hailfingera5245512009-06-28 19:19:25 +00006671 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006672 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006673 .model_id = SST_SST49LF004A,
hailfinger286829b2009-01-08 03:40:17 +00006674 .total_size = 512,
6675 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006676 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08006677 .tested = TEST_OK_PRE,
hailfingerb8e4e212010-03-15 03:48:42 +00006678 .probe = probe_jedec,
6679 .probe_timing = 1, /* 150 ns */
hailfinger80f48682009-09-23 22:01:33 +00006680 .block_erasers =
6681 {
6682 {
6683 .eraseblocks = { {4 * 1024, 128} },
snelson712e72d2010-03-16 03:09:10 +00006684 .block_erase = erase_sector_jedec,
hailfinger80f48682009-09-23 22:01:33 +00006685 }, {
6686 .eraseblocks = { {64 * 1024, 8} },
snelson712e72d2010-03-16 03:09:10 +00006687 .block_erase = erase_block_jedec,
hailfinger80f48682009-09-23 22:01:33 +00006688 }, {
6689 .eraseblocks = { {512 * 1024, 1} },
snelson264e57c2010-01-20 20:55:53 +00006690 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
hailfinger80f48682009-09-23 22:01:33 +00006691 },
6692 },
hailfingerb8e4e212010-03-15 03:48:42 +00006693 .printlock = printlock_sst_fwhub,
snelson712e72d2010-03-16 03:09:10 +00006694 .unlock = unlock_sst_fwhub,
6695 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006696 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006697 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006698 },
6699
hailfinger286829b2009-01-08 03:40:17 +00006700 {
6701 .vendor = "SST",
6702 .name = "SST49LF004C",
hailfingera5245512009-06-28 19:19:25 +00006703 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00006704 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006705 .model_id = SST_SST49LF004C,
hailfinger286829b2009-01-08 03:40:17 +00006706 .total_size = 512,
6707 .page_size = 4 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006708 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00006709 .tested = TEST_UNTESTED,
hailfingerb8e4e212010-03-15 03:48:42 +00006710 .probe = probe_82802ab,
uwe37f43422011-06-19 17:23:55 +00006711 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
snelson264e57c2010-01-20 20:55:53 +00006712 .block_erasers =
6713 {
6714 {
6715 .eraseblocks = { {4 * 1024, 128} },
6716 .block_erase = erase_sector_49lfxxxc,
6717 }, {
6718 .eraseblocks = {
6719 {64 * 1024, 7},
6720 {32 * 1024, 1},
6721 {8 * 1024, 2},
6722 {16 * 1024, 1},
6723 },
snelson3a69e422010-03-23 17:10:28 +00006724 .block_erase = erase_block_82802ab,
snelson264e57c2010-01-20 20:55:53 +00006725 }
6726 },
snelson3a69e422010-03-23 17:10:28 +00006727 .unlock = unlock_49lfxxxc,
hailfinger86bf3b52010-10-13 21:49:30 +00006728 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006729 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006730 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006731 },
6732
hailfinger286829b2009-01-08 03:40:17 +00006733 {
6734 .vendor = "SST",
6735 .name = "SST49LF008A",
hailfingera5245512009-06-28 19:19:25 +00006736 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006737 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006738 .model_id = SST_SST49LF008A,
hailfinger286829b2009-01-08 03:40:17 +00006739 .total_size = 1024,
6740 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006741 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00006742 .tested = TEST_OK_PRE,
hailfingerb8e4e212010-03-15 03:48:42 +00006743 .probe = probe_jedec,
6744 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006745 .block_erasers =
6746 {
6747 {
6748 .eraseblocks = { {4 * 1024, 256} },
snelson712e72d2010-03-16 03:09:10 +00006749 .block_erase = erase_sector_jedec,
snelson264e57c2010-01-20 20:55:53 +00006750 }, {
6751 .eraseblocks = { {64 * 1024, 16} },
snelson712e72d2010-03-16 03:09:10 +00006752 .block_erase = erase_block_jedec,
snelson264e57c2010-01-20 20:55:53 +00006753 }, {
6754 .eraseblocks = { {1024 * 1024, 1} },
6755 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
6756 }
6757 },
hailfingerb8e4e212010-03-15 03:48:42 +00006758 .printlock = printlock_sst_fwhub,
snelson712e72d2010-03-16 03:09:10 +00006759 .unlock = unlock_sst_fwhub,
6760 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006761 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006762 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006763 },
6764
hailfinger286829b2009-01-08 03:40:17 +00006765 {
6766 .vendor = "SST",
6767 .name = "SST49LF008C",
hailfingera5245512009-06-28 19:19:25 +00006768 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00006769 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006770 .model_id = SST_SST49LF008C,
hailfinger286829b2009-01-08 03:40:17 +00006771 .total_size = 1024,
6772 .page_size = 4 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006773 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00006774 .tested = TEST_UNTESTED,
hailfingerb8e4e212010-03-15 03:48:42 +00006775 .probe = probe_82802ab,
uwe37f43422011-06-19 17:23:55 +00006776 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
snelson264e57c2010-01-20 20:55:53 +00006777 .block_erasers =
6778 {
6779 {
6780 .eraseblocks = { {4 * 1024, 256} },
6781 .block_erase = erase_sector_49lfxxxc,
6782 }, {
6783 .eraseblocks = {
6784 {64 * 1024, 15},
6785 {32 * 1024, 1},
6786 {8 * 1024, 2},
6787 {16 * 1024, 1},
6788 },
snelson3a69e422010-03-23 17:10:28 +00006789 .block_erase = erase_block_82802ab,
snelson264e57c2010-01-20 20:55:53 +00006790 }
6791 },
snelson3a69e422010-03-23 17:10:28 +00006792 .unlock = unlock_49lfxxxc,
hailfinger86bf3b52010-10-13 21:49:30 +00006793 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006794 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006795 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006796 },
6797
hailfinger286829b2009-01-08 03:40:17 +00006798 {
6799 .vendor = "SST",
6800 .name = "SST49LF016C",
hailfingera5245512009-06-28 19:19:25 +00006801 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00006802 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006803 .model_id = SST_SST49LF016C,
hailfinger286829b2009-01-08 03:40:17 +00006804 .total_size = 2048,
6805 .page_size = 4 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006806 .feature_bits = FEATURE_REGISTERMAP,
hailfingerd217d122010-10-08 18:52:29 +00006807 .tested = TEST_OK_PR,
hailfingerb8e4e212010-03-15 03:48:42 +00006808 .probe = probe_82802ab,
uwe37f43422011-06-19 17:23:55 +00006809 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
snelson264e57c2010-01-20 20:55:53 +00006810 .block_erasers =
6811 {
6812 {
6813 .eraseblocks = { {4 * 1024, 512} },
6814 .block_erase = erase_sector_49lfxxxc,
6815 }, {
6816 .eraseblocks = {
6817 {64 * 1024, 31},
6818 {32 * 1024, 1},
6819 {8 * 1024, 2},
6820 {16 * 1024, 1},
6821 },
snelson3a69e422010-03-23 17:10:28 +00006822 .block_erase = erase_block_82802ab,
snelson264e57c2010-01-20 20:55:53 +00006823 }
6824 },
snelson3a69e422010-03-23 17:10:28 +00006825 .unlock = unlock_49lfxxxc,
hailfinger86bf3b52010-10-13 21:49:30 +00006826 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006827 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006828 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006829 },
6830
hailfinger286829b2009-01-08 03:40:17 +00006831 {
6832 .vendor = "SST",
6833 .name = "SST49LF020",
hailfingerc391ccb2009-06-12 11:45:10 +00006834 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00006835 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006836 .model_id = SST_SST49LF020,
hailfinger286829b2009-01-08 03:40:17 +00006837 .total_size = 256,
6838 .page_size = 16 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006839 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08006840 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006841 .probe = probe_jedec,
uwe81d75ab2010-09-05 12:41:25 +00006842 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006843 .block_erasers =
6844 {
6845 {
6846 .eraseblocks = { {4 * 1024, 64} },
6847 .block_erase = erase_sector_jedec,
6848 }, {
6849 .eraseblocks = { {16 * 1024, 16} },
6850 .block_erase = erase_block_jedec,
6851 }, {
6852 .eraseblocks = { {256 * 1024, 1} },
6853 .block_erase = NULL,
6854 }
6855 },
snelsonc6855342010-01-28 23:55:12 +00006856 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006857 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006858 .voltage = {3000, 3600},
uwebf4a9a92009-01-07 12:35:09 +00006859 },
6860
hailfinger286829b2009-01-08 03:40:17 +00006861 {
6862 .vendor = "SST",
6863 .name = "SST49LF020A",
hailfingerc391ccb2009-06-12 11:45:10 +00006864 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00006865 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006866 .model_id = SST_SST49LF020A,
hailfinger286829b2009-01-08 03:40:17 +00006867 .total_size = 256,
hailfinger73134c42009-07-23 01:44:38 +00006868 .page_size = 4 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006869 .feature_bits = FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00006870 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006871 .probe = probe_jedec,
uwe81d75ab2010-09-05 12:41:25 +00006872 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006873 .block_erasers =
6874 {
6875 {
6876 .eraseblocks = { {4 * 1024, 64} },
6877 .block_erase = erase_sector_jedec,
6878 }, {
6879 .eraseblocks = { {16 * 1024, 16} },
6880 .block_erase = erase_block_jedec,
6881 }, {
6882 .eraseblocks = { {256 * 1024, 1} },
6883 .block_erase = NULL,
6884 }
6885 },
snelsonc6855342010-01-28 23:55:12 +00006886 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006887 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006888 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006889 },
6890
hailfinger286829b2009-01-08 03:40:17 +00006891 {
6892 .vendor = "SST",
6893 .name = "SST49LF040",
hailfingerc391ccb2009-06-12 11:45:10 +00006894 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00006895 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006896 .model_id = SST_SST49LF040,
hailfinger286829b2009-01-08 03:40:17 +00006897 .total_size = 512,
6898 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00006899 .feature_bits = FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00006900 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006901 .probe = probe_jedec,
uwe81d75ab2010-09-05 12:41:25 +00006902 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00006903 .block_erasers =
6904 {
6905 {
6906 .eraseblocks = { {4 * 1024, 128} },
6907 .block_erase = erase_sector_jedec,
6908 }, {
6909 .eraseblocks = { {64 * 1024, 8} },
6910 .block_erase = erase_block_jedec,
6911 }, {
6912 .eraseblocks = { {512 * 1024, 1} },
6913 .block_erase = NULL,
6914 }
6915 },
snelsonc6855342010-01-28 23:55:12 +00006916 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006917 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006918 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006919 },
6920
hailfinger286829b2009-01-08 03:40:17 +00006921 {
6922 .vendor = "SST",
6923 .name = "SST49LF040B",
hailfingera5245512009-06-28 19:19:25 +00006924 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006925 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006926 .model_id = SST_SST49LF040B,
hailfinger286829b2009-01-08 03:40:17 +00006927 .total_size = 512,
6928 .page_size = 64 * 1024,
mkarcher83414fc2010-08-16 22:12:39 +00006929 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
hailfingerd217d122010-10-08 18:52:29 +00006930 .tested = TEST_OK_PRE,
snelson264e57c2010-01-20 20:55:53 +00006931 .probe = probe_jedec,
hailfingerb8e4e212010-03-15 03:48:42 +00006932 .probe_timing = 1, /* 150ns */
snelson264e57c2010-01-20 20:55:53 +00006933 .block_erasers =
6934 {
6935 {
6936 .eraseblocks = { {4 * 1024, 128} },
6937 .block_erase = erase_sector_jedec,
6938 }, {
6939 .eraseblocks = { {64 * 1024, 8} },
6940 .block_erase = erase_block_jedec,
6941 }, {
6942 .eraseblocks = { {512 * 1024, 1} },
6943 .block_erase = NULL,
6944 }
6945 },
mkarcher83414fc2010-08-16 22:12:39 +00006946 .unlock = unlock_82802ab,
snelsonc6855342010-01-28 23:55:12 +00006947 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006948 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006949 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006950 },
6951
hailfinger286829b2009-01-08 03:40:17 +00006952 {
6953 .vendor = "SST",
6954 .name = "SST49LF080A",
hailfingera5245512009-06-28 19:19:25 +00006955 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006956 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006957 .model_id = SST_SST49LF080A,
hailfinger286829b2009-01-08 03:40:17 +00006958 .total_size = 1024,
6959 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00006960 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08006961 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006962 .probe = probe_jedec,
hailfingerd5b35922009-06-03 14:46:22 +00006963 .probe_timing = TIMING_FIXME,
snelson264e57c2010-01-20 20:55:53 +00006964 .block_erasers =
6965 {
6966 {
6967 .eraseblocks = { {4 * 1024, 256} },
6968 .block_erase = erase_sector_jedec,
6969 }, {
6970 .eraseblocks = { {64 * 1024, 16} },
6971 .block_erase = erase_block_jedec,
6972 }, {
6973 .eraseblocks = { {1024 * 1024, 1} },
6974 .block_erase = NULL,
6975 }
6976 },
snelsonc6855342010-01-28 23:55:12 +00006977 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006978 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00006979 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00006980 },
6981
hailfinger286829b2009-01-08 03:40:17 +00006982 {
6983 .vendor = "SST",
6984 .name = "SST49LF160C",
hailfingera5245512009-06-28 19:19:25 +00006985 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00006986 .manufacture_id = SST_ID,
mhmd3c80cd2010-09-15 23:31:03 +00006987 .model_id = SST_SST49LF160C,
hailfinger286829b2009-01-08 03:40:17 +00006988 .total_size = 2048,
6989 .page_size = 4 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006990 .feature_bits = FEATURE_REGISTERMAP,
hailfingerd217d122010-10-08 18:52:29 +00006991 .tested = TEST_OK_PRE,
hailfingerb8e4e212010-03-15 03:48:42 +00006992 .probe = probe_82802ab,
uwe37f43422011-06-19 17:23:55 +00006993 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
snelson264e57c2010-01-20 20:55:53 +00006994 .block_erasers =
6995 {
6996 {
6997 .eraseblocks = { {4 * 1024, 512} },
6998 .block_erase = erase_sector_49lfxxxc,
6999 }, {
7000 .eraseblocks = {
7001 {64 * 1024, 31},
7002 {32 * 1024, 1},
7003 {8 * 1024, 2},
7004 {16 * 1024, 1},
7005 },
snelson3a69e422010-03-23 17:10:28 +00007006 .block_erase = erase_block_82802ab,
snelson264e57c2010-01-20 20:55:53 +00007007 }
7008 },
snelson1ee293c2010-02-19 00:52:10 +00007009 .unlock = unlock_49lfxxxc,
hailfinger86bf3b52010-10-13 21:49:30 +00007010 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00007011 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007012 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007013 },
7014
hailfinger286829b2009-01-08 03:40:17 +00007015 {
7016 .vendor = "ST",
7017 .name = "M25P05-A",
hailfinger40167462009-05-31 17:57:34 +00007018 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007019 .manufacture_id = ST_ID,
7020 .model_id = ST_M25P05A,
7021 .total_size = 64,
7022 .page_size = 256,
7023 .tested = TEST_UNTESTED,
7024 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007025 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007026 .block_erasers =
7027 {
7028 {
7029 .eraseblocks = { {32 * 1024, 2} },
7030 .block_erase = spi_block_erase_d8,
7031 }, {
7032 .eraseblocks = { {64 * 1024, 1} },
7033 .block_erase = spi_block_erase_c7,
7034 }
7035 },
hailfingerb9560ee2010-07-14 20:21:22 +00007036 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007037 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007038 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00007039 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007040 },
7041
hailfingerfb513de2009-07-23 01:40:20 +00007042 /* The ST M25P05 is a bit of a problem. It has the same ID as the
7043 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
hailfinger59a83572010-05-28 17:07:57 +00007044 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
hailfingerfb513de2009-07-23 01:40:20 +00007045 * only is successful if RDID does not work.
7046 */
7047 {
7048 .vendor = "ST",
7049 .name = "M25P05.RES",
7050 .bustype = CHIP_BUSTYPE_SPI,
hailfinger59a83572010-05-28 17:07:57 +00007051 .manufacture_id = 0, /* Not used. */
hailfingerfb513de2009-07-23 01:40:20 +00007052 .model_id = ST_M25P05_RES,
7053 .total_size = 64,
7054 .page_size = 256,
7055 .tested = TEST_UNTESTED,
hailfinger59a83572010-05-28 17:07:57 +00007056 .probe = probe_spi_res1,
hailfingerfb513de2009-07-23 01:40:20 +00007057 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007058 .block_erasers =
7059 {
7060 {
7061 .eraseblocks = { {32 * 1024, 2} },
7062 .block_erase = spi_block_erase_d8,
7063 }, {
7064 .eraseblocks = { {64 * 1024, 1} },
7065 .block_erase = spi_block_erase_c7,
7066 }
7067 },
hailfingerb9560ee2010-07-14 20:21:22 +00007068 .unlock = spi_disable_blockprotect,
hailfingerfb513de2009-07-23 01:40:20 +00007069 .write = spi_chip_write_1, /* 128 */
7070 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00007071 .voltage = {2700, 3600},
hailfingerfb513de2009-07-23 01:40:20 +00007072 },
7073
hailfinger286829b2009-01-08 03:40:17 +00007074 {
7075 .vendor = "ST",
7076 .name = "M25P10-A",
hailfinger40167462009-05-31 17:57:34 +00007077 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007078 .manufacture_id = ST_ID,
7079 .model_id = ST_M25P10A,
7080 .total_size = 128,
7081 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +00007082 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00007083 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007084 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007085 .block_erasers =
7086 {
7087 {
7088 .eraseblocks = { {32 * 1024, 4} },
7089 .block_erase = spi_block_erase_d8,
7090 }, {
7091 .eraseblocks = { {128 * 1024, 1} },
7092 .block_erase = spi_block_erase_c7,
7093 }
7094 },
hailfingerb9560ee2010-07-14 20:21:22 +00007095 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007096 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007097 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00007098 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007099 },
7100
hailfingerfb513de2009-07-23 01:40:20 +00007101 /* The ST M25P10 has the same problem as the M25P05. */
7102 {
7103 .vendor = "ST",
7104 .name = "M25P10.RES",
7105 .bustype = CHIP_BUSTYPE_SPI,
hailfinger59a83572010-05-28 17:07:57 +00007106 .manufacture_id = 0, /* Not used. */
hailfingerfb513de2009-07-23 01:40:20 +00007107 .model_id = ST_M25P10_RES,
7108 .total_size = 128,
7109 .page_size = 256,
7110 .tested = TEST_UNTESTED,
hailfinger59a83572010-05-28 17:07:57 +00007111 .probe = probe_spi_res1,
hailfingerfb513de2009-07-23 01:40:20 +00007112 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007113 .block_erasers =
7114 {
7115 {
7116 .eraseblocks = { {32 * 1024, 4} },
7117 .block_erase = spi_block_erase_d8,
7118 }, {
7119 .eraseblocks = { {128 * 1024, 1} },
7120 .block_erase = spi_block_erase_c7,
7121 }
7122 },
hailfingerb9560ee2010-07-14 20:21:22 +00007123 .unlock = spi_disable_blockprotect,
hailfingerfb513de2009-07-23 01:40:20 +00007124 .write = spi_chip_write_1, /* 128 */
7125 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00007126 .voltage = {2700, 3600},
hailfingerfb513de2009-07-23 01:40:20 +00007127 },
7128
hailfinger286829b2009-01-08 03:40:17 +00007129 {
7130 .vendor = "ST",
7131 .name = "M25P20",
hailfinger40167462009-05-31 17:57:34 +00007132 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007133 .manufacture_id = ST_ID,
7134 .model_id = ST_M25P20,
7135 .total_size = 256,
7136 .page_size = 256,
7137 .tested = TEST_UNTESTED,
7138 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007139 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007140 .block_erasers =
7141 {
7142 {
7143 .eraseblocks = { {64 * 1024, 4} },
7144 .block_erase = spi_block_erase_d8,
7145 }, {
7146 .eraseblocks = { {256 * 1024, 1} },
7147 .block_erase = spi_block_erase_c7,
7148 }
7149 },
hailfingerb9560ee2010-07-14 20:21:22 +00007150 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007151 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007152 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00007153 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007154 },
7155
hailfinger286829b2009-01-08 03:40:17 +00007156 {
7157 .vendor = "ST",
7158 .name = "M25P40",
hailfinger40167462009-05-31 17:57:34 +00007159 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007160 .manufacture_id = ST_ID,
7161 .model_id = ST_M25P40,
7162 .total_size = 512,
7163 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +00007164 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00007165 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007166 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007167 .block_erasers =
7168 {
7169 {
7170 .eraseblocks = { {64 * 1024, 8} },
7171 .block_erase = spi_block_erase_d8,
7172 }, {
7173 .eraseblocks = { {512 * 1024, 1} },
7174 .block_erase = spi_block_erase_c7,
7175 }
7176 },
hailfingerb9560ee2010-07-14 20:21:22 +00007177 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007178 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007179 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00007180 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007181 },
7182
hailfinger286829b2009-01-08 03:40:17 +00007183 {
7184 .vendor = "ST",
7185 .name = "M25P40-old",
hailfinger40167462009-05-31 17:57:34 +00007186 .bustype = CHIP_BUSTYPE_SPI,
hailfinger59a83572010-05-28 17:07:57 +00007187 .manufacture_id = 0, /* Not used. */
hailfinger286829b2009-01-08 03:40:17 +00007188 .model_id = ST_M25P40_RES,
7189 .total_size = 512,
7190 .page_size = 256,
7191 .tested = TEST_UNTESTED,
hailfinger59a83572010-05-28 17:07:57 +00007192 .probe = probe_spi_res1,
hailfingere3095d92009-06-05 13:46:17 +00007193 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007194 .block_erasers =
7195 {
7196 {
7197 .eraseblocks = { {64 * 1024, 8} },
7198 .block_erase = spi_block_erase_d8,
7199 }, {
7200 .eraseblocks = { {512 * 1024, 1} },
7201 .block_erase = spi_block_erase_c7,
7202 }
7203 },
hailfingerb9560ee2010-07-14 20:21:22 +00007204 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007205 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007206 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00007207 },
7208
hailfinger286829b2009-01-08 03:40:17 +00007209 {
7210 .vendor = "ST",
7211 .name = "M25P80",
hailfinger40167462009-05-31 17:57:34 +00007212 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007213 .manufacture_id = ST_ID,
7214 .model_id = ST_M25P80,
7215 .total_size = 1024,
7216 .page_size = 256,
uwef3cfd542011-06-18 22:56:14 +00007217 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00007218 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007219 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007220 .block_erasers =
7221 {
7222 {
7223 .eraseblocks = { {64 * 1024, 16} },
7224 .block_erase = spi_block_erase_d8,
7225 }, {
7226 .eraseblocks = { {1024 * 1024, 1} },
7227 .block_erase = spi_block_erase_c7,
7228 }
7229 },
hailfingerb9560ee2010-07-14 20:21:22 +00007230 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007231 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007232 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00007233 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007234 },
7235
hailfinger286829b2009-01-08 03:40:17 +00007236 {
7237 .vendor = "ST",
7238 .name = "M25P16",
hailfinger40167462009-05-31 17:57:34 +00007239 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007240 .manufacture_id = ST_ID,
7241 .model_id = ST_M25P16,
7242 .total_size = 2048,
7243 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +00007244 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00007245 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007246 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007247 .block_erasers =
7248 {
7249 {
7250 .eraseblocks = { {64 * 1024, 32} },
7251 .block_erase = spi_block_erase_d8,
7252 }, {
7253 .eraseblocks = { {2 * 1024 * 1024, 1} },
7254 .block_erase = spi_block_erase_c7,
7255 }
7256 },
hailfingerb9560ee2010-07-14 20:21:22 +00007257 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007258 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007259 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00007260 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007261 },
7262
hailfinger286829b2009-01-08 03:40:17 +00007263 {
7264 .vendor = "ST",
7265 .name = "M25P32",
hailfinger40167462009-05-31 17:57:34 +00007266 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007267 .manufacture_id = ST_ID,
7268 .model_id = ST_M25P32,
7269 .total_size = 4096,
7270 .page_size = 256,
stefancte0e52902011-05-26 14:28:51 +00007271 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00007272 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007273 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007274 .block_erasers =
7275 {
7276 {
7277 .eraseblocks = { {64 * 1024, 64} },
7278 .block_erase = spi_block_erase_d8,
7279 }, {
7280 .eraseblocks = { {4 * 1024 * 1024, 1} },
7281 .block_erase = spi_block_erase_c7,
7282 }
7283 },
hailfingerb9560ee2010-07-14 20:21:22 +00007284 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007285 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007286 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00007287 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007288 },
7289
hailfinger286829b2009-01-08 03:40:17 +00007290 {
7291 .vendor = "ST",
7292 .name = "M25P64",
hailfinger40167462009-05-31 17:57:34 +00007293 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007294 .manufacture_id = ST_ID,
7295 .model_id = ST_M25P64,
7296 .total_size = 8192,
7297 .page_size = 256,
7298 .tested = TEST_UNTESTED,
7299 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007300 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007301 .block_erasers =
7302 {
7303 {
7304 .eraseblocks = { {64 * 1024, 128} },
7305 .block_erase = spi_block_erase_d8,
7306 }, {
7307 .eraseblocks = { {8 * 1024 * 1024, 1} },
7308 .block_erase = spi_block_erase_c7,
7309 }
7310 },
hailfingerb9560ee2010-07-14 20:21:22 +00007311 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007312 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007313 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00007314 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007315 },
7316
hailfinger286829b2009-01-08 03:40:17 +00007317 {
7318 .vendor = "ST",
7319 .name = "M25P128",
hailfinger40167462009-05-31 17:57:34 +00007320 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007321 .manufacture_id = ST_ID,
7322 .model_id = ST_M25P128,
7323 .total_size = 16384,
7324 .page_size = 256,
stefanct371e7e82011-07-07 19:56:58 +00007325 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00007326 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007327 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00007328 .block_erasers =
7329 {
7330 {
7331 .eraseblocks = { {256 * 1024, 64} },
7332 .block_erase = spi_block_erase_d8,
7333 }, {
7334 .eraseblocks = { {16 * 1024 * 1024, 1} },
7335 .block_erase = spi_block_erase_c7,
7336 }
7337 },
hailfingerb9560ee2010-07-14 20:21:22 +00007338 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007339 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007340 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00007341 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007342 },
7343
hailfinger286829b2009-01-08 03:40:17 +00007344 {
7345 .vendor = "ST",
hailfinger38fd4992011-03-06 18:45:40 +00007346 .name = "M25PX16",
7347 .bustype = CHIP_BUSTYPE_SPI,
7348 .manufacture_id = ST_ID,
7349 .model_id = ST_M25PX16,
7350 .total_size = 2048,
7351 .page_size = 256,
7352 .tested = TEST_OK_PREW,
7353 .probe = probe_spi_rdid,
7354 .probe_timing = TIMING_ZERO,
7355 .block_erasers =
7356 {
7357 {
7358 .eraseblocks = { { 4 * 1024, 512 } },
7359 .block_erase = spi_block_erase_20,
7360 }, {
7361 .eraseblocks = { {64 * 1024, 32} },
7362 .block_erase = spi_block_erase_d8,
7363 }, {
7364 .eraseblocks = { {2 * 1024 * 1024, 1} },
7365 .block_erase = spi_block_erase_c7,
7366 }
7367 },
7368 .unlock = spi_disable_blockprotect,
7369 .write = spi_chip_write_256,
7370 .read = spi_chip_read,
7371 },
7372
7373 {
7374 .vendor = "ST",
uwe8b50b592010-09-14 13:16:01 +00007375 .name = "M25PX32",
7376 .bustype = CHIP_BUSTYPE_SPI,
7377 .manufacture_id = ST_ID,
7378 .model_id = ST_M25PX32,
7379 .total_size = 4096,
7380 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +00007381 .tested = TEST_OK_PRE,
uwe8b50b592010-09-14 13:16:01 +00007382 .probe = probe_spi_rdid,
7383 .probe_timing = TIMING_ZERO,
7384 .block_erasers =
7385 {
7386 {
7387 .eraseblocks = { { 4 * 1024, 1024 } },
7388 .block_erase = spi_block_erase_20,
7389 }, {
7390 .eraseblocks = { {64 * 1024, 64} },
7391 .block_erase = spi_block_erase_d8,
7392 }, {
7393 .eraseblocks = { {4 * 1024 * 1024, 1} },
7394 .block_erase = spi_block_erase_c7,
7395 }
7396 },
7397 .unlock = spi_disable_blockprotect,
7398 .write = spi_chip_write_256,
7399 .read = spi_chip_read,
stefanct66c8c1b2011-07-19 08:50:18 +00007400 .voltage = {2700, 3600},
uwe8b50b592010-09-14 13:16:01 +00007401 },
7402
7403 {
7404 .vendor = "ST",
7405 .name = "M25PX64",
7406 .bustype = CHIP_BUSTYPE_SPI,
7407 .manufacture_id = ST_ID,
7408 .model_id = ST_M25PX64,
7409 .total_size = 8192,
7410 .page_size = 256,
hailfingerd217d122010-10-08 18:52:29 +00007411 .tested = TEST_OK_PRE,
uwe8b50b592010-09-14 13:16:01 +00007412 .probe = probe_spi_rdid,
7413 .probe_timing = TIMING_ZERO,
7414 .block_erasers =
7415 {
7416 {
7417 .eraseblocks = { { 4 * 1024, 2048 } },
7418 .block_erase = spi_block_erase_20,
7419 }, {
7420 .eraseblocks = { {64 * 1024, 128} },
7421 .block_erase = spi_block_erase_d8,
7422 }, {
7423 .eraseblocks = { {8 * 1024 * 1024, 1} },
7424 .block_erase = spi_block_erase_c7,
7425 }
7426 },
7427 .unlock = spi_disable_blockprotect,
7428 .write = spi_chip_write_256,
7429 .read = spi_chip_read,
7430 },
7431
7432 {
7433 .vendor = "ST",
David Hendricksc801adb2010-12-09 16:58:56 -08007434 .name = "M25PX32",
7435 .bustype = CHIP_BUSTYPE_SPI,
7436 .manufacture_id = ST_ID,
7437 .model_id = ST_M25PX32,
7438 .total_size = 4096,
7439 .page_size = 256,
7440 .tested = TEST_OK_PRE,
7441 .probe = probe_spi_rdid,
7442 .probe_timing = TIMING_ZERO,
7443 .block_erasers =
7444 {
7445 {
7446 .eraseblocks = { { 4 * 1024, 1024 } },
7447 .block_erase = spi_block_erase_20,
7448 }, {
7449 .eraseblocks = { {64 * 1024, 64} },
7450 .block_erase = spi_block_erase_d8,
7451 }, {
7452 .eraseblocks = { {4 * 1024 * 1024, 1} },
7453 .block_erase = spi_block_erase_c7,
7454 }
7455 },
7456 .unlock = spi_disable_blockprotect,
7457 .write = spi_chip_write_256,
7458 .read = spi_chip_read,
7459 },
7460
7461 {
7462 .vendor = "ST",
7463 .name = "M25PX64",
7464 .bustype = CHIP_BUSTYPE_SPI,
7465 .manufacture_id = ST_ID,
7466 .model_id = ST_M25PX64,
7467 .total_size = 8192,
7468 .page_size = 256,
7469 .tested = TEST_OK_PRE,
7470 .probe = probe_spi_rdid,
7471 .probe_timing = TIMING_ZERO,
7472 .block_erasers =
7473 {
7474 {
7475 .eraseblocks = { { 4 * 1024, 2048 } },
7476 .block_erase = spi_block_erase_20,
7477 }, {
7478 .eraseblocks = { {64 * 1024, 128} },
7479 .block_erase = spi_block_erase_d8,
7480 }, {
7481 .eraseblocks = { {8 * 1024 * 1024, 1} },
7482 .block_erase = spi_block_erase_c7,
7483 }
7484 },
7485 .unlock = spi_disable_blockprotect,
7486 .write = spi_chip_write_256,
7487 .read = spi_chip_read,
7488 },
7489
7490 {
7491 .vendor = "ST",
hailfinger286829b2009-01-08 03:40:17 +00007492 .name = "M29F002B",
hailfingera5245512009-06-28 19:19:25 +00007493 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00007494 .manufacture_id = ST_ID,
7495 .model_id = ST_M29F002B,
7496 .total_size = 256,
7497 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007498 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00007499 .tested = TEST_UNTESTED,
7500 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00007501 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00007502 .block_erasers =
7503 {
7504 {
7505 .eraseblocks = {
7506 {16 * 1024, 1},
7507 {8 * 1024, 2},
7508 {32 * 1024, 1},
7509 {64 * 1024, 3},
7510 },
7511 .block_erase = erase_sector_jedec,
7512 }, {
7513 .eraseblocks = { {256 * 1024, 1} },
7514 .block_erase = erase_chip_block_jedec,
7515 }
7516 },
snelsonc6855342010-01-28 23:55:12 +00007517 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007518 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00007519 .voltage = {4750, 5250}, /* 4.75-5.25V for type -X, others 4.5-5.5V */
stepanaa1b6a22008-12-08 18:15:10 +00007520 },
7521
hailfinger286829b2009-01-08 03:40:17 +00007522 {
7523 .vendor = "ST",
7524 .name = "M29F002T/NT",
hailfingera5245512009-06-28 19:19:25 +00007525 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00007526 .manufacture_id = ST_ID,
7527 .model_id = ST_M29F002T,
7528 .total_size = 256,
7529 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007530 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
7531 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00007532 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00007533 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00007534 .block_erasers =
7535 {
7536 {
7537 .eraseblocks = {
7538 {64 * 1024, 3},
7539 {32 * 1024, 1},
7540 {8 * 1024, 2},
7541 {16 * 1024, 1},
7542 },
7543 .block_erase = erase_sector_jedec,
7544 }, {
7545 .eraseblocks = { {256 * 1024, 1} },
7546 .block_erase = erase_chip_block_jedec,
7547 }
7548 },
snelsonc6855342010-01-28 23:55:12 +00007549 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007550 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00007551 .voltage = {4750, 5250}, /* 4.75-5.25V for type -X, others 4.5-5.5V */
stepanaa1b6a22008-12-08 18:15:10 +00007552 },
7553
hailfinger286829b2009-01-08 03:40:17 +00007554 {
7555 .vendor = "ST",
7556 .name = "M29F040B",
hailfingera5245512009-06-28 19:19:25 +00007557 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00007558 .manufacture_id = ST_ID,
7559 .model_id = ST_M29F040B,
7560 .total_size = 512,
7561 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007562 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
7563 .tested = TEST_UNTESTED,
7564 .probe = probe_jedec,
hailfinger8ddaff32010-12-04 03:26:40 +00007565 .probe_timing = TIMING_ZERO, /* datasheet specifies no timing */
snelsone0c56352010-01-19 16:08:51 +00007566 .block_erasers =
7567 {
7568 {
7569 .eraseblocks = { {64 * 1024, 8}, },
snelsonc6855342010-01-28 23:55:12 +00007570 .block_erase = erase_sector_jedec,
snelsone0c56352010-01-19 16:08:51 +00007571 }, {
7572 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00007573 .block_erase = erase_chip_block_jedec,
snelsone0c56352010-01-19 16:08:51 +00007574 }
7575 },
snelsonc6855342010-01-28 23:55:12 +00007576 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007577 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007578 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00007579 },
7580
hailfinger286829b2009-01-08 03:40:17 +00007581 {
snelsonc6855342010-01-28 23:55:12 +00007582 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
hailfinger286829b2009-01-08 03:40:17 +00007583 .vendor = "ST",
hailfingerfa513302010-07-16 22:07:20 +00007584 .name = "M29F400BB",
7585 .bustype = CHIP_BUSTYPE_PARALLEL,
7586 .manufacture_id = ST_ID,
7587 .model_id = ST_M29F400BB,
7588 .total_size = 512,
7589 .page_size = 64 * 1024,
7590 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
hailfinger86bf3b52010-10-13 21:49:30 +00007591 .tested = TEST_UNTESTED,
hailfingerfa513302010-07-16 22:07:20 +00007592 .probe = probe_m29f400bt,
7593 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
7594 .block_erasers =
7595 {
7596 {
7597 .eraseblocks = {
7598 {16 * 1024, 1},
7599 {8 * 1024, 2},
7600 {32 * 1024, 1},
7601 {64 * 1024, 7},
7602 },
7603 .block_erase = block_erase_m29f400bt,
7604 }, {
7605 .eraseblocks = { {512 * 1024, 1} },
7606 .block_erase = block_erase_chip_m29f400bt,
7607 }
7608 },
hailfinger86bf3b52010-10-13 21:49:30 +00007609 .write = write_m29f400bt,
hailfingerfa513302010-07-16 22:07:20 +00007610 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007611 .voltage = {4500, 5500},
hailfingerfa513302010-07-16 22:07:20 +00007612 },
7613 {
7614 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
7615 .vendor = "ST",
hailfinger286829b2009-01-08 03:40:17 +00007616 .name = "M29F400BT",
hailfingera5245512009-06-28 19:19:25 +00007617 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00007618 .manufacture_id = ST_ID,
7619 .model_id = ST_M29F400BT,
7620 .total_size = 512,
7621 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007622 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00007623 .tested = TEST_UNTESTED,
7624 .probe = probe_m29f400bt,
uwe37f43422011-06-19 17:23:55 +00007625 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
snelsone0c56352010-01-19 16:08:51 +00007626 .block_erasers =
7627 {
7628 {
7629 .eraseblocks = {
7630 {64 * 1024, 7},
7631 {32 * 1024, 1},
7632 {8 * 1024, 2},
7633 {16 * 1024, 1},
7634 },
7635 .block_erase = block_erase_m29f400bt,
7636 }, {
7637 .eraseblocks = { {512 * 1024, 1} },
7638 .block_erase = block_erase_chip_m29f400bt,
7639 }
7640 },
hailfingerfa513302010-07-16 22:07:20 +00007641 .write = write_m29f400bt,
hailfinger23060112009-05-08 12:49:03 +00007642 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007643 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00007644 },
7645
hailfinger286829b2009-01-08 03:40:17 +00007646 {
7647 .vendor = "ST",
7648 .name = "M29W010B",
hailfingera5245512009-06-28 19:19:25 +00007649 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00007650 .manufacture_id = ST_ID,
7651 .model_id = ST_M29W010B,
7652 .total_size = 128,
7653 .page_size = 16 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007654 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00007655 .tested = TEST_UNTESTED,
7656 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00007657 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00007658 .block_erasers =
7659 {
7660 {
7661 .eraseblocks = { {16 * 1024, 8}, },
7662 .block_erase = erase_sector_jedec,
7663 }, {
7664 .eraseblocks = { {128 * 1024, 1} },
7665 .block_erase = erase_chip_block_jedec,
7666 }
7667 },
snelsonc6855342010-01-28 23:55:12 +00007668 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007669 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007670 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007671 },
7672
hailfinger286829b2009-01-08 03:40:17 +00007673 {
7674 .vendor = "ST",
7675 .name = "M29W040B",
hailfingera5245512009-06-28 19:19:25 +00007676 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00007677 .manufacture_id = ST_ID,
7678 .model_id = ST_M29W040B,
7679 .total_size = 512,
7680 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007681 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00007682 .tested = TEST_UNTESTED,
7683 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00007684 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00007685 .block_erasers =
7686 {
7687 {
7688 .eraseblocks = { {64 * 1024, 8}, },
7689 .block_erase = erase_sector_jedec,
7690 }, {
7691 .eraseblocks = { {512 * 1024, 1} },
7692 .block_erase = erase_chip_block_jedec,
7693 }
7694 },
snelsonc6855342010-01-28 23:55:12 +00007695 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007696 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007697 .voltage = {2700, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00007698 },
7699
snelson91cd0662010-02-01 05:49:46 +00007700 {
7701 .vendor = "ST",
7702 .name = "M29W512B",
7703 .bustype = CHIP_BUSTYPE_PARALLEL,
7704 .manufacture_id = ST_ID,
7705 .model_id = ST_M29W512B,
7706 .total_size = 64,
7707 .page_size = 64 * 1024,
7708 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00007709 .tested = TEST_OK_PRE,
snelson91cd0662010-02-01 05:49:46 +00007710 .probe = probe_jedec,
7711 .probe_timing = TIMING_ZERO,
snelson91cd0662010-02-01 05:49:46 +00007712 .block_erasers =
7713 {
7714 {
7715 .eraseblocks = { {64 * 1024, 1} },
7716 .block_erase = erase_chip_block_jedec,
7717 }
7718 },
7719 .write = write_jedec_1,
7720 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007721 .voltage = {2700, 3600},
snelson91cd0662010-02-01 05:49:46 +00007722 },
7723
hailfinger286829b2009-01-08 03:40:17 +00007724 {
7725 .vendor = "ST",
7726 .name = "M50FLW040A",
snelsonc6855342010-01-28 23:55:12 +00007727 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00007728 .manufacture_id = ST_ID,
7729 .model_id = ST_M50FLW040A,
7730 .total_size = 512,
7731 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00007732 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00007733 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00007734 .probe = probe_82802ab,
hailfinger4d547032010-01-10 01:34:00 +00007735 .probe_timing = TIMING_FIXME,
snelsone0c56352010-01-19 16:08:51 +00007736 .block_erasers =
7737 {
7738 {
snelsonf88616b2010-01-19 16:39:19 +00007739 .eraseblocks = {
uwe81d75ab2010-09-05 12:41:25 +00007740 {4 * 1024, 16}, /* sector */
snelsonf88616b2010-01-19 16:39:19 +00007741 {64 * 1024, 5}, /* block */
7742 {4 * 1024, 16}, /* sector */
7743 {4 * 1024, 16}, /* sector */
7744 },
7745 .block_erase = NULL,
7746 }, {
snelsone0c56352010-01-19 16:08:51 +00007747 .eraseblocks = { {64 * 1024, 8}, },
snelsonc0acbeb2010-03-19 18:47:06 +00007748 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00007749 }
7750 },
snelsonc0acbeb2010-03-19 18:47:06 +00007751 .unlock = unlock_stm50flw0x0x,
7752 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00007753 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007754 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
stepanaa1b6a22008-12-08 18:15:10 +00007755 },
7756
hailfinger286829b2009-01-08 03:40:17 +00007757 {
7758 .vendor = "ST",
7759 .name = "M50FLW040B",
snelsonc6855342010-01-28 23:55:12 +00007760 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00007761 .manufacture_id = ST_ID,
7762 .model_id = ST_M50FLW040B,
7763 .total_size = 512,
7764 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00007765 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00007766 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00007767 .probe = probe_82802ab,
hailfinger4d547032010-01-10 01:34:00 +00007768 .probe_timing = TIMING_FIXME,
snelsone0c56352010-01-19 16:08:51 +00007769 .block_erasers =
7770 {
7771 {
snelsonf88616b2010-01-19 16:39:19 +00007772 .eraseblocks = {
uwe81d75ab2010-09-05 12:41:25 +00007773 {4 * 1024, 16}, /* sector */
snelsonf88616b2010-01-19 16:39:19 +00007774 {4 * 1024, 16}, /* sector */
7775 {64 * 1024, 5}, /* block */
7776 {4 * 1024, 16}, /* sector */
7777 },
7778 .block_erase = NULL,
7779 }, {
snelsone0c56352010-01-19 16:08:51 +00007780 .eraseblocks = { {64 * 1024, 8}, },
snelsonc0acbeb2010-03-19 18:47:06 +00007781 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00007782 }
7783 },
snelsonc0acbeb2010-03-19 18:47:06 +00007784 .unlock = unlock_stm50flw0x0x,
7785 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00007786 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007787 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
stepanaa1b6a22008-12-08 18:15:10 +00007788 },
7789
hailfinger286829b2009-01-08 03:40:17 +00007790 {
7791 .vendor = "ST",
7792 .name = "M50FLW080A",
snelsonc6855342010-01-28 23:55:12 +00007793 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00007794 .manufacture_id = ST_ID,
7795 .model_id = ST_M50FLW080A,
7796 .total_size = 1024,
7797 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00007798 .feature_bits = FEATURE_REGISTERMAP,
hailfingerd217d122010-10-08 18:52:29 +00007799 .tested = TEST_OK_PRE,
snelsonc6855342010-01-28 23:55:12 +00007800 .probe = probe_82802ab,
hailfinger4d547032010-01-10 01:34:00 +00007801 .probe_timing = TIMING_FIXME,
snelsone0c56352010-01-19 16:08:51 +00007802 .block_erasers =
7803 {
7804 {
snelsonf88616b2010-01-19 16:39:19 +00007805 .eraseblocks = {
uwe81d75ab2010-09-05 12:41:25 +00007806 {4 * 1024, 16}, /* sector */
snelsonf88616b2010-01-19 16:39:19 +00007807 {64 * 1024, 13}, /* block */
7808 {4 * 1024, 16}, /* sector */
7809 {4 * 1024, 16}, /* sector */
7810 },
7811 .block_erase = NULL,
7812 }, {
snelsone0c56352010-01-19 16:08:51 +00007813 .eraseblocks = { {64 * 1024, 16}, },
snelsonc0acbeb2010-03-19 18:47:06 +00007814 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00007815 }
7816 },
snelsonc0acbeb2010-03-19 18:47:06 +00007817 .unlock = unlock_stm50flw0x0x,
7818 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00007819 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007820 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
stepanaa1b6a22008-12-08 18:15:10 +00007821 },
7822
hailfinger286829b2009-01-08 03:40:17 +00007823 {
7824 .vendor = "ST",
7825 .name = "M50FLW080B",
snelsonc6855342010-01-28 23:55:12 +00007826 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00007827 .manufacture_id = ST_ID,
7828 .model_id = ST_M50FLW080B,
7829 .total_size = 1024,
7830 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00007831 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00007832 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00007833 .probe = probe_82802ab,
hailfinger4d547032010-01-10 01:34:00 +00007834 .probe_timing = TIMING_FIXME,
snelsone0c56352010-01-19 16:08:51 +00007835 .block_erasers =
7836 {
7837 {
snelsonf88616b2010-01-19 16:39:19 +00007838 .eraseblocks = {
uwe81d75ab2010-09-05 12:41:25 +00007839 {4 * 1024, 16}, /* sector */
snelsonf88616b2010-01-19 16:39:19 +00007840 {4 * 1024, 16}, /* sector */
7841 {64 * 1024, 13}, /* block */
7842 {4 * 1024, 16}, /* sector */
7843 },
7844 .block_erase = NULL,
7845 }, {
snelsone0c56352010-01-19 16:08:51 +00007846 .eraseblocks = { {64 * 1024, 16}, },
snelsonc0acbeb2010-03-19 18:47:06 +00007847 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00007848 }
7849 },
snelsonc0acbeb2010-03-19 18:47:06 +00007850 .unlock = unlock_stm50flw0x0x,
7851 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00007852 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007853 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
stepanaa1b6a22008-12-08 18:15:10 +00007854 },
7855
hailfinger286829b2009-01-08 03:40:17 +00007856 {
7857 .vendor = "ST",
7858 .name = "M50FW002",
hailfingera5245512009-06-28 19:19:25 +00007859 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00007860 .manufacture_id = ST_ID,
7861 .model_id = ST_M50FW002,
7862 .total_size = 256,
7863 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00007864 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00007865 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00007866 .probe = probe_82802ab,
uwe37f43422011-06-19 17:23:55 +00007867 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (sst49lfxxxc.c) */
snelsone0c56352010-01-19 16:08:51 +00007868 .block_erasers =
7869 {
7870 {
7871 .eraseblocks = {
7872 {64 * 1024, 3},
7873 {32 * 1024, 1},
7874 {8 * 1024, 2},
7875 {16 * 1024, 1},
7876 },
snelsonc0acbeb2010-03-19 18:47:06 +00007877 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00007878 }
7879 },
snelsonc0acbeb2010-03-19 18:47:06 +00007880 .unlock = unlock_stm50flw0x0x,
7881 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00007882 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007883 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
stepanaa1b6a22008-12-08 18:15:10 +00007884 },
7885
hailfinger286829b2009-01-08 03:40:17 +00007886 {
7887 .vendor = "ST",
7888 .name = "M50FW016",
hailfingera5245512009-06-28 19:19:25 +00007889 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00007890 .manufacture_id = ST_ID,
7891 .model_id = ST_M50FW016,
7892 .total_size = 2048,
7893 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00007894 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00007895 .tested = TEST_UNTESTED,
7896 .probe = probe_82802ab,
uwe37f43422011-06-19 17:23:55 +00007897 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
snelsone0c56352010-01-19 16:08:51 +00007898 .block_erasers =
7899 {
7900 {
7901 .eraseblocks = { {64 * 1024, 32}, },
snelsonc0acbeb2010-03-19 18:47:06 +00007902 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00007903 }
7904 },
snelsonc0acbeb2010-03-19 18:47:06 +00007905 .unlock = unlock_stm50flw0x0x,
7906 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00007907 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007908 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
stepanaa1b6a22008-12-08 18:15:10 +00007909 },
7910
hailfinger286829b2009-01-08 03:40:17 +00007911 {
7912 .vendor = "ST",
7913 .name = "M50FW040",
hailfingera5245512009-06-28 19:19:25 +00007914 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00007915 .manufacture_id = ST_ID,
7916 .model_id = ST_M50FW040,
7917 .total_size = 512,
7918 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00007919 .feature_bits = FEATURE_REGISTERMAP,
snelsonc0acbeb2010-03-19 18:47:06 +00007920 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00007921 .probe = probe_82802ab,
uwe37f43422011-06-19 17:23:55 +00007922 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
snelsone0c56352010-01-19 16:08:51 +00007923 .block_erasers =
7924 {
7925 {
7926 .eraseblocks = { {64 * 1024, 8}, },
snelsonc0acbeb2010-03-19 18:47:06 +00007927 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00007928 }
7929 },
snelsonc0acbeb2010-03-19 18:47:06 +00007930 .unlock = unlock_stm50flw0x0x,
7931 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00007932 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007933 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
stepanaa1b6a22008-12-08 18:15:10 +00007934 },
7935
hailfinger286829b2009-01-08 03:40:17 +00007936 {
7937 .vendor = "ST",
7938 .name = "M50FW080",
hailfingera5245512009-06-28 19:19:25 +00007939 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00007940 .manufacture_id = ST_ID,
7941 .model_id = ST_M50FW080,
7942 .total_size = 1024,
7943 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00007944 .feature_bits = FEATURE_REGISTERMAP,
stefancte0e52902011-05-26 14:28:51 +00007945 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00007946 .probe = probe_82802ab,
uwe37f43422011-06-19 17:23:55 +00007947 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (82802ab.c) */
snelsone0c56352010-01-19 16:08:51 +00007948 .block_erasers =
7949 {
7950 {
7951 .eraseblocks = { {64 * 1024, 16}, },
snelsonc0acbeb2010-03-19 18:47:06 +00007952 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00007953 }
7954 },
snelsonc0acbeb2010-03-19 18:47:06 +00007955 .unlock = unlock_stm50flw0x0x,
7956 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00007957 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007958 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
stepanaa1b6a22008-12-08 18:15:10 +00007959 },
7960
hailfinger286829b2009-01-08 03:40:17 +00007961 {
7962 .vendor = "ST",
7963 .name = "M50LPW116",
hailfingera5245512009-06-28 19:19:25 +00007964 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00007965 .manufacture_id = ST_ID,
7966 .model_id = ST_M50LPW116,
7967 .total_size = 2048,
7968 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00007969 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00007970 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00007971 .probe = probe_82802ab,
hailfinger94466802009-09-05 01:31:32 +00007972 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00007973 .block_erasers =
7974 {
7975 {
7976 .eraseblocks = {
7977 {4 * 1024, 16},
7978 {64 * 1024, 30},
7979 {32 * 1024, 1},
7980 {8 * 1024, 2},
7981 {16 * 1024, 1},
7982 },
snelsonc0acbeb2010-03-19 18:47:06 +00007983 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00007984 }
7985 },
snelsonc0acbeb2010-03-19 18:47:06 +00007986 .unlock = unlock_stm50flw0x0x,
7987 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00007988 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00007989 .voltage = {3000, 3600}, /* Also has 12V fast program & erase */
stepanaa1b6a22008-12-08 18:15:10 +00007990 },
7991
hailfinger286829b2009-01-08 03:40:17 +00007992 {
hailfinger0ae231d2010-07-29 20:01:13 +00007993 .vendor = "SyncMOS/MoselVitelic",
7994 .name = "{F,S,V}29C51001B",
hailfingera5245512009-06-28 19:19:25 +00007995 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger0ae231d2010-07-29 20:01:13 +00007996 .manufacture_id = SYNCMOS_MVC_ID,
7997 .model_id = SM_MVC_29C51001B,
hailfinger286829b2009-01-08 03:40:17 +00007998 .total_size = 128,
hailfinger0ae231d2010-07-29 20:01:13 +00007999 .page_size = 512,
snelsonc6855342010-01-28 23:55:12 +00008000 .feature_bits = FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00008001 .tested = TEST_UNTESTED,
8002 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00008003 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00008004 .block_erasers =
8005 {
8006 {
8007 .eraseblocks = { {512, 256} },
8008 .block_erase = erase_sector_jedec,
8009 }, {
8010 .eraseblocks = { {128 * 1024, 1} },
8011 .block_erase = erase_chip_block_jedec,
8012 },
8013 },
snelsonc6855342010-01-28 23:55:12 +00008014 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00008015 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008016 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00008017 },
8018
hailfinger286829b2009-01-08 03:40:17 +00008019 {
hailfinger0ae231d2010-07-29 20:01:13 +00008020 .vendor = "SyncMOS/MoselVitelic",
8021 .name = "{F,S,V}29C51001T",
hailfingera5245512009-06-28 19:19:25 +00008022 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger0ae231d2010-07-29 20:01:13 +00008023 .manufacture_id = SYNCMOS_MVC_ID,
8024 .model_id = SM_MVC_29C51001T,
8025 .total_size = 128,
8026 .page_size = 512,
snelsonc6855342010-01-28 23:55:12 +00008027 .feature_bits = FEATURE_EITHER_RESET,
hailfinger0ae231d2010-07-29 20:01:13 +00008028 .tested = TEST_UNTESTED,
8029 .probe = probe_jedec,
8030 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8031 .block_erasers =
8032 {
8033 {
8034 .eraseblocks = { {512, 256} },
8035 .block_erase = erase_sector_jedec,
8036 }, {
8037 .eraseblocks = { {128 * 1024, 1} },
8038 .block_erase = erase_chip_block_jedec,
8039 },
8040 },
8041 .write = write_jedec_1,
8042 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008043 .voltage = {4500, 5500},
hailfinger0ae231d2010-07-29 20:01:13 +00008044 },
8045
8046 {
8047 .vendor = "SyncMOS/MoselVitelic",
8048 .name = "{F,S,V}29C51002B",
8049 .bustype = CHIP_BUSTYPE_PARALLEL,
8050 .manufacture_id = SYNCMOS_MVC_ID,
8051 .model_id = SM_MVC_29C51002B,
8052 .total_size = 256,
8053 .page_size = 512,
8054 .feature_bits = FEATURE_EITHER_RESET,
8055 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00008056 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00008057 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00008058 .block_erasers =
8059 {
8060 {
8061 .eraseblocks = { {512, 512} },
8062 .block_erase = erase_sector_jedec,
8063 }, {
8064 .eraseblocks = { {256 * 1024, 1} },
8065 .block_erase = erase_chip_block_jedec,
8066 },
8067 },
snelsonc6855342010-01-28 23:55:12 +00008068 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00008069 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00008070 },
8071
hailfinger286829b2009-01-08 03:40:17 +00008072 {
hailfinger0ae231d2010-07-29 20:01:13 +00008073 .vendor = "SyncMOS/MoselVitelic",
8074 .name = "{F,S,V}29C51002T",
hailfingera5245512009-06-28 19:19:25 +00008075 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger0ae231d2010-07-29 20:01:13 +00008076 .manufacture_id = SYNCMOS_MVC_ID,
8077 .model_id = SM_MVC_29C51002T,
8078 .total_size = 256,
8079 .page_size = 512,
8080 .feature_bits = FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00008081 .tested = TEST_OK_PRE,
hailfinger0ae231d2010-07-29 20:01:13 +00008082 .probe = probe_jedec,
8083 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8084 .block_erasers =
8085 {
8086 {
8087 .eraseblocks = { {512, 512} },
8088 .block_erase = erase_sector_jedec,
8089 }, {
8090 .eraseblocks = { {256 * 1024, 1} },
8091 .block_erase = erase_chip_block_jedec,
8092 },
8093 },
8094 .write = write_jedec_1,
8095 .read = read_memmapped,
8096 },
8097
8098 {
8099 .vendor = "SyncMOS/MoselVitelic",
8100 .name = "{F,S,V}29C51004B",
8101 .bustype = CHIP_BUSTYPE_PARALLEL,
8102 .manufacture_id = SYNCMOS_MVC_ID,
8103 .model_id = SM_MVC_29C51004B,
hailfinger286829b2009-01-08 03:40:17 +00008104 .total_size = 512,
hailfinger0ae231d2010-07-29 20:01:13 +00008105 .page_size = 1024,
snelsonc6855342010-01-28 23:55:12 +00008106 .feature_bits = FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00008107 .tested = TEST_UNTESTED,
8108 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00008109 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00008110 .block_erasers =
8111 {
8112 {
hailfinger0ae231d2010-07-29 20:01:13 +00008113 .eraseblocks = { {1024, 512} },
8114 .block_erase = erase_sector_jedec,
8115 }, {
8116 .eraseblocks = { {512 * 1024, 1} },
8117 .block_erase = erase_chip_block_jedec,
8118 },
8119 },
8120 .write = write_jedec_1,
8121 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008122 .voltage = {4500, 5500},
hailfinger0ae231d2010-07-29 20:01:13 +00008123 },
8124
8125 {
8126 .vendor = "SyncMOS/MoselVitelic",
8127 .name = "{F,S,V}29C51004T",
8128 .bustype = CHIP_BUSTYPE_PARALLEL,
8129 .manufacture_id = SYNCMOS_MVC_ID,
8130 .model_id = SM_MVC_29C51004T,
8131 .total_size = 512,
8132 .page_size = 1024,
8133 .feature_bits = FEATURE_EITHER_RESET,
8134 .tested = TEST_UNTESTED,
8135 .probe = probe_jedec,
8136 .probe_timing = TIMING_ZERO,
8137 .block_erasers =
8138 {
8139 {
8140 .eraseblocks = { {1024, 512} },
8141 .block_erase = erase_sector_jedec,
8142 }, {
8143 .eraseblocks = { {512 * 1024, 1} },
8144 .block_erase = erase_chip_block_jedec,
8145 },
8146 },
8147 .write = write_jedec_1,
8148 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008149 .voltage = {4500, 5500},
hailfinger0ae231d2010-07-29 20:01:13 +00008150 },
8151
8152 {
8153 .vendor = "SyncMOS/MoselVitelic",
8154 .name = "{S,V}29C31004B",
8155 .bustype = CHIP_BUSTYPE_PARALLEL,
8156 .manufacture_id = SYNCMOS_MVC_ID,
8157 .model_id = SM_MVC_29C31004B,
8158 .total_size = 512,
8159 .page_size = 1024,
8160 .feature_bits = FEATURE_EITHER_RESET,
8161 .tested = TEST_UNTESTED,
8162 .probe = probe_jedec,
8163 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8164 .block_erasers =
8165 {
8166 {
8167 .eraseblocks = { {1024, 512} },
8168 .block_erase = erase_sector_jedec,
8169 }, {
8170 .eraseblocks = { {512 * 1024, 1} },
8171 .block_erase = erase_chip_block_jedec,
8172 },
8173 },
8174 .write = write_jedec_1,
8175 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008176 .voltage = {3000, 3600},
hailfinger0ae231d2010-07-29 20:01:13 +00008177 },
8178
8179 {
8180 .vendor = "SyncMOS/MoselVitelic",
8181 .name = "{S,V}29C31004T",
8182 .bustype = CHIP_BUSTYPE_PARALLEL,
8183 .manufacture_id = SYNCMOS_MVC_ID,
8184 .model_id = SM_MVC_29C31004T,
8185 .total_size = 512,
8186 .page_size = 1024,
8187 .feature_bits = FEATURE_EITHER_RESET,
8188 .tested = TEST_UNTESTED,
8189 .probe = probe_jedec,
8190 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
8191 .block_erasers =
8192 {
8193 {
8194 .eraseblocks = { {1024, 512} },
snelsone0c56352010-01-19 16:08:51 +00008195 .block_erase = erase_sector_jedec,
8196 }, {
8197 .eraseblocks = { {512 * 1024, 1} },
8198 .block_erase = erase_chip_block_jedec,
8199 },
8200 },
snelsonc6855342010-01-28 23:55:12 +00008201 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00008202 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008203 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00008204 },
8205
hailfinger286829b2009-01-08 03:40:17 +00008206 {
uwe77048c72009-05-27 23:17:40 +00008207 .vendor = "TI",
hailfingerf66fa232009-05-26 21:26:23 +00008208 .name = "TMS29F002RB",
hailfingera5245512009-06-28 19:19:25 +00008209 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingerf66fa232009-05-26 21:26:23 +00008210 .manufacture_id = TI_OLD_ID,
8211 .model_id = TI_TMS29F002RB,
8212 .total_size = 256,
8213 .page_size = 16384, /* Non-uniform sectors */
snelsonc6855342010-01-28 23:55:12 +00008214 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfingerf66fa232009-05-26 21:26:23 +00008215 .tested = TEST_UNTESTED,
8216 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00008217 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00008218 .block_erasers =
8219 {
8220 {
8221 .eraseblocks = {
8222 {16 * 1024, 1},
8223 {8 * 1024, 2},
8224 {32 * 1024, 1},
8225 {64 * 1024, 3},
8226 },
8227 .block_erase = erase_sector_jedec,
8228 }, {
8229 .eraseblocks = { {256 * 1024, 1} },
8230 .block_erase = erase_chip_block_jedec,
8231 },
8232 },
snelsonc6855342010-01-28 23:55:12 +00008233 .write = write_jedec_1,
hailfingerf66fa232009-05-26 21:26:23 +00008234 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008235 .voltage = {4500, 5500},
hailfingerf66fa232009-05-26 21:26:23 +00008236 },
8237
8238 {
uwe77048c72009-05-27 23:17:40 +00008239 .vendor = "TI",
hailfingerf66fa232009-05-26 21:26:23 +00008240 .name = "TMS29F002RT",
hailfingera5245512009-06-28 19:19:25 +00008241 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingerf66fa232009-05-26 21:26:23 +00008242 .manufacture_id = TI_OLD_ID,
8243 .model_id = TI_TMS29F002RT,
8244 .total_size = 256,
8245 .page_size = 16384, /* Non-uniform sectors */
snelsonc6855342010-01-28 23:55:12 +00008246 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfingerf66fa232009-05-26 21:26:23 +00008247 .tested = TEST_UNTESTED,
8248 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00008249 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00008250 .block_erasers =
8251 {
8252 {
8253 .eraseblocks = {
8254 {64 * 1024, 3},
8255 {32 * 1024, 1},
8256 {8 * 1024, 2},
8257 {16 * 1024, 1},
8258 },
8259 .block_erase = erase_sector_jedec,
8260 }, {
8261 .eraseblocks = { {256 * 1024, 1} },
8262 .block_erase = erase_chip_block_jedec,
8263 },
8264 },
snelsonc6855342010-01-28 23:55:12 +00008265 .write = write_jedec_1,
hailfingerf66fa232009-05-26 21:26:23 +00008266 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008267 .voltage = {4500, 5500},
hailfingerf66fa232009-05-26 21:26:23 +00008268 },
8269
8270 {
hailfinger286829b2009-01-08 03:40:17 +00008271 .vendor = "Winbond",
ruikfbf40532010-04-20 19:34:31 +00008272 .name = "W25Q80",
8273 .bustype = CHIP_BUSTYPE_SPI,
8274 .manufacture_id = WINBOND_NEX_ID,
mhm38e577e2010-09-14 23:56:56 +00008275 .model_id = WINBOND_NEX_W25Q80,
ruikfbf40532010-04-20 19:34:31 +00008276 .total_size = 1024,
8277 .page_size = 256,
hailfinger41968332010-09-03 03:06:07 +00008278 .feature_bits = FEATURE_WRSR_WREN,
dhendrix0ab17e72010-12-13 23:54:59 +00008279 .tested = TEST_OK_PREW,
ruikfbf40532010-04-20 19:34:31 +00008280 .probe = probe_spi_rdid,
8281 .probe_timing = TIMING_ZERO,
8282 .block_erasers =
8283 {
8284 {
8285 .eraseblocks = { {4 * 1024, 256} },
8286 .block_erase = spi_block_erase_20,
8287 }, {
8288 .eraseblocks = { {32 * 1024, 32} },
8289 .block_erase = spi_block_erase_52,
8290 }, {
8291 .eraseblocks = { {64 * 1024, 16} },
8292 .block_erase = spi_block_erase_d8,
8293 }, {
8294 .eraseblocks = { {1024 * 1024, 1} },
8295 .block_erase = spi_block_erase_60,
8296 }, {
8297 .eraseblocks = { {1024 * 1024, 1} },
8298 .block_erase = spi_block_erase_c7,
8299 }
8300 },
hailfingerb9560ee2010-07-14 20:21:22 +00008301 .unlock = spi_disable_blockprotect,
ruikfbf40532010-04-20 19:34:31 +00008302 .write = spi_chip_write_256,
8303 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00008304 .voltage = {2700, 3600},
David Hendrickse7272b02010-08-16 21:59:22 -07008305 .wp = &wp_w25,
ruikfbf40532010-04-20 19:34:31 +00008306 },
8307
8308 {
8309 .vendor = "Winbond",
8310 .name = "W25Q16",
8311 .bustype = CHIP_BUSTYPE_SPI,
8312 .manufacture_id = WINBOND_NEX_ID,
mhm38e577e2010-09-14 23:56:56 +00008313 .model_id = WINBOND_NEX_W25Q16,
ruikfbf40532010-04-20 19:34:31 +00008314 .total_size = 2048,
8315 .page_size = 256,
hailfinger41968332010-09-03 03:06:07 +00008316 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks46332702010-12-29 11:09:46 -08008317 .tested = TEST_OK_PREW,
ruikfbf40532010-04-20 19:34:31 +00008318 .probe = probe_spi_rdid,
8319 .probe_timing = TIMING_ZERO,
8320 .block_erasers =
8321 {
8322 {
8323 .eraseblocks = { {4 * 1024, 512} },
8324 .block_erase = spi_block_erase_20,
8325 }, {
8326 .eraseblocks = { {32 * 1024, 64} },
8327 .block_erase = spi_block_erase_52,
8328 }, {
8329 .eraseblocks = { {64 * 1024, 32} },
8330 .block_erase = spi_block_erase_d8,
8331 }, {
8332 .eraseblocks = { {2 * 1024 * 1024, 1} },
8333 .block_erase = spi_block_erase_60,
8334 }, {
8335 .eraseblocks = { {2 * 1024 * 1024, 1} },
8336 .block_erase = spi_block_erase_c7,
8337 }
8338 },
hailfingerb9560ee2010-07-14 20:21:22 +00008339 .unlock = spi_disable_blockprotect,
ruikfbf40532010-04-20 19:34:31 +00008340 .write = spi_chip_write_256,
8341 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00008342 .voltage = {2700, 3600},
David Hendricks46332702010-12-29 11:09:46 -08008343 .wp = &wp_w25,
ruikfbf40532010-04-20 19:34:31 +00008344 },
8345
8346 {
8347 .vendor = "Winbond",
8348 .name = "W25Q32",
8349 .bustype = CHIP_BUSTYPE_SPI,
8350 .manufacture_id = WINBOND_NEX_ID,
mhm38e577e2010-09-14 23:56:56 +00008351 .model_id = WINBOND_NEX_W25Q32,
ruikfbf40532010-04-20 19:34:31 +00008352 .total_size = 4096,
8353 .page_size = 256,
hailfinger41968332010-09-03 03:06:07 +00008354 .feature_bits = FEATURE_WRSR_WREN,
dhendrix0ab17e72010-12-13 23:54:59 +00008355 .tested = TEST_OK_PREW,
ruikfbf40532010-04-20 19:34:31 +00008356 .probe = probe_spi_rdid,
8357 .probe_timing = TIMING_ZERO,
8358 .block_erasers =
8359 {
8360 {
8361 .eraseblocks = { {4 * 1024, 1024} },
8362 .block_erase = spi_block_erase_20,
8363 }, {
8364 .eraseblocks = { {32 * 1024, 128} },
8365 .block_erase = spi_block_erase_52,
8366 }, {
8367 .eraseblocks = { {64 * 1024, 64} },
8368 .block_erase = spi_block_erase_d8,
8369 }, {
8370 .eraseblocks = { {4 * 1024 * 1024, 1} },
8371 .block_erase = spi_block_erase_60,
8372 }, {
8373 .eraseblocks = { {4 * 1024 * 1024, 1} },
8374 .block_erase = spi_block_erase_c7,
8375 }
8376 },
hailfingerb9560ee2010-07-14 20:21:22 +00008377 .unlock = spi_disable_blockprotect,
ruikfbf40532010-04-20 19:34:31 +00008378 .write = spi_chip_write_256,
8379 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00008380 .voltage = {2700, 3600},
David Hendricksf7924d12010-06-10 21:26:44 -07008381 .wp = &wp_w25,
ruikfbf40532010-04-20 19:34:31 +00008382 },
8383
8384 {
8385 .vendor = "Winbond",
hailfingerceb59bb2010-06-24 11:39:57 +00008386 .name = "W25Q64",
8387 .bustype = CHIP_BUSTYPE_SPI,
8388 .manufacture_id = WINBOND_NEX_ID,
mhm38e577e2010-09-14 23:56:56 +00008389 .model_id = WINBOND_NEX_W25Q64,
hailfingerceb59bb2010-06-24 11:39:57 +00008390 .total_size = 8192,
8391 .page_size = 256,
hailfinger41968332010-09-03 03:06:07 +00008392 .feature_bits = FEATURE_WRSR_WREN,
dhendrix0ab17e72010-12-13 23:54:59 +00008393 .tested = TEST_OK_PREW,
hailfingerceb59bb2010-06-24 11:39:57 +00008394 .probe = probe_spi_rdid,
8395 .probe_timing = TIMING_ZERO,
8396 .block_erasers =
8397 {
8398 {
8399 .eraseblocks = { {4 * 1024, 2048} },
8400 .block_erase = spi_block_erase_20,
8401 }, {
8402 .eraseblocks = { {32 * 1024, 256} },
8403 .block_erase = spi_block_erase_52,
8404 }, {
8405 .eraseblocks = { {64 * 1024, 128} },
8406 .block_erase = spi_block_erase_d8,
8407 }, {
8408 .eraseblocks = { {8 * 1024 * 1024, 1} },
8409 .block_erase = spi_block_erase_60,
8410 }, {
8411 .eraseblocks = { {8 * 1024 * 1024, 1} },
8412 .block_erase = spi_block_erase_c7,
8413 }
8414 },
hailfingerb9560ee2010-07-14 20:21:22 +00008415 .unlock = spi_disable_blockprotect,
hailfingerceb59bb2010-06-24 11:39:57 +00008416 .write = spi_chip_write_256,
8417 .read = spi_chip_read,
David Hendrickse7272b02010-08-16 21:59:22 -07008418 .wp = &wp_w25,
hailfingerceb59bb2010-06-24 11:39:57 +00008419 },
8420
8421 {
8422 .vendor = "Winbond",
stefancte0e52902011-05-26 14:28:51 +00008423 .name = "W25Q128",
8424 .bustype = CHIP_BUSTYPE_SPI,
8425 .manufacture_id = WINBOND_NEX_ID,
8426 .model_id = WINBOND_NEX_W25Q128,
8427 .total_size = 16384,
8428 .page_size = 256,
8429 .feature_bits = FEATURE_WRSR_WREN,
8430 .tested = TEST_OK_PROBE,
8431 .probe = probe_spi_rdid,
8432 .probe_timing = TIMING_ZERO,
8433 .block_erasers =
8434 {
8435 {
8436 .eraseblocks = { {4 * 1024, 4096} },
8437 .block_erase = spi_block_erase_20,
8438 }, {
8439 .eraseblocks = { {32 * 1024, 512} },
8440 .block_erase = spi_block_erase_52,
8441 }, {
8442 .eraseblocks = { {64 * 1024, 256} },
8443 .block_erase = spi_block_erase_d8,
8444 }, {
8445 .eraseblocks = { {16 * 1024 * 1024, 1} },
8446 .block_erase = spi_block_erase_60,
8447 }, {
8448 .eraseblocks = { {16 * 1024 * 1024, 1} },
8449 .block_erase = spi_block_erase_c7,
8450 }
8451 },
8452 .unlock = spi_disable_blockprotect,
8453 .write = spi_chip_write_256,
8454 .read = spi_chip_read,
8455 },
8456
8457 {
8458 .vendor = "Winbond",
stefanct371e7e82011-07-07 19:56:58 +00008459 .name = "W25X10",
hailfinger40167462009-05-31 17:57:34 +00008460 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00008461 .manufacture_id = WINBOND_NEX_ID,
mhm38e577e2010-09-14 23:56:56 +00008462 .model_id = WINBOND_NEX_W25X10,
hailfinger286829b2009-01-08 03:40:17 +00008463 .total_size = 128,
8464 .page_size = 256,
hailfinger41968332010-09-03 03:06:07 +00008465 .feature_bits = FEATURE_WRSR_WREN,
David Hendricksfa20ad82010-10-08 11:03:10 -07008466 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00008467 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00008468 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00008469 .block_erasers =
8470 {
8471 {
8472 .eraseblocks = { {4 * 1024, 32} },
8473 .block_erase = spi_block_erase_20,
8474 }, {
snelson376060c2010-01-19 03:24:55 +00008475 .eraseblocks = { {64 * 1024, 2} },
8476 .block_erase = spi_block_erase_d8,
8477 }, {
8478 .eraseblocks = { {128 * 1024, 1} },
snelson376060c2010-01-19 03:24:55 +00008479 .block_erase = spi_block_erase_c7,
8480 }
8481 },
hailfingerb9560ee2010-07-14 20:21:22 +00008482 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00008483 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00008484 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00008485 .voltage = {2700, 3600},
Louis Yung-Chieh Lo232951f2010-09-16 11:30:00 +08008486 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00008487 },
8488
hailfinger286829b2009-01-08 03:40:17 +00008489 {
8490 .vendor = "Winbond",
stefanct371e7e82011-07-07 19:56:58 +00008491 .name = "W25X20",
hailfinger40167462009-05-31 17:57:34 +00008492 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00008493 .manufacture_id = WINBOND_NEX_ID,
mhm38e577e2010-09-14 23:56:56 +00008494 .model_id = WINBOND_NEX_W25X20,
hailfinger286829b2009-01-08 03:40:17 +00008495 .total_size = 256,
8496 .page_size = 256,
hailfinger41968332010-09-03 03:06:07 +00008497 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00008498 .tested = TEST_UNTESTED,
8499 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00008500 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00008501 .block_erasers =
8502 {
8503 {
8504 .eraseblocks = { {4 * 1024, 64} },
8505 .block_erase = spi_block_erase_20,
8506 }, {
snelson376060c2010-01-19 03:24:55 +00008507 .eraseblocks = { {64 * 1024, 4} },
8508 .block_erase = spi_block_erase_d8,
8509 }, {
8510 .eraseblocks = { {256 * 1024, 1} },
snelson376060c2010-01-19 03:24:55 +00008511 .block_erase = spi_block_erase_c7,
8512 }
8513 },
hailfingerb9560ee2010-07-14 20:21:22 +00008514 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00008515 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00008516 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00008517 .voltage = {2700, 3600},
Louis Yung-Chieh Lo232951f2010-09-16 11:30:00 +08008518 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00008519 },
8520
hailfinger286829b2009-01-08 03:40:17 +00008521 {
8522 .vendor = "Winbond",
stefanct371e7e82011-07-07 19:56:58 +00008523 .name = "W25X40",
hailfinger40167462009-05-31 17:57:34 +00008524 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00008525 .manufacture_id = WINBOND_NEX_ID,
mhm38e577e2010-09-14 23:56:56 +00008526 .model_id = WINBOND_NEX_W25X40,
hailfinger286829b2009-01-08 03:40:17 +00008527 .total_size = 512,
8528 .page_size = 256,
hailfinger41968332010-09-03 03:06:07 +00008529 .feature_bits = FEATURE_WRSR_WREN,
stefanctf4eea092011-05-18 01:31:03 +00008530 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00008531 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00008532 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00008533 .block_erasers =
8534 {
8535 {
8536 .eraseblocks = { {4 * 1024, 128} },
8537 .block_erase = spi_block_erase_20,
8538 }, {
snelson376060c2010-01-19 03:24:55 +00008539 .eraseblocks = { {64 * 1024, 8} },
8540 .block_erase = spi_block_erase_d8,
8541 }, {
8542 .eraseblocks = { {512 * 1024, 1} },
snelson376060c2010-01-19 03:24:55 +00008543 .block_erase = spi_block_erase_c7,
8544 }
8545 },
hailfingerb9560ee2010-07-14 20:21:22 +00008546 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00008547 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00008548 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00008549 .voltage = {2700, 3600},
Louis Yung-Chieh Lo232951f2010-09-16 11:30:00 +08008550 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00008551 },
8552
hailfinger286829b2009-01-08 03:40:17 +00008553 {
8554 .vendor = "Winbond",
stefanct371e7e82011-07-07 19:56:58 +00008555 .name = "W25X80",
hailfinger40167462009-05-31 17:57:34 +00008556 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00008557 .manufacture_id = WINBOND_NEX_ID,
mhm38e577e2010-09-14 23:56:56 +00008558 .model_id = WINBOND_NEX_W25X80,
hailfinger286829b2009-01-08 03:40:17 +00008559 .total_size = 1024,
8560 .page_size = 256,
hailfinger41968332010-09-03 03:06:07 +00008561 .feature_bits = FEATURE_WRSR_WREN,
hailfingercb43dea2011-03-05 16:31:57 +00008562 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00008563 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00008564 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00008565 .block_erasers =
8566 {
8567 {
8568 .eraseblocks = { {4 * 1024, 256} },
8569 .block_erase = spi_block_erase_20,
8570 }, {
snelson376060c2010-01-19 03:24:55 +00008571 .eraseblocks = { {64 * 1024, 16} },
8572 .block_erase = spi_block_erase_d8,
8573 }, {
8574 .eraseblocks = { {1024 * 1024, 1} },
snelson376060c2010-01-19 03:24:55 +00008575 .block_erase = spi_block_erase_c7,
8576 }
8577 },
hailfingerb9560ee2010-07-14 20:21:22 +00008578 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00008579 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00008580 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00008581 .voltage = {2700, 3600},
Louis Yung-Chieh Lo232951f2010-09-16 11:30:00 +08008582 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00008583 },
8584
hailfinger286829b2009-01-08 03:40:17 +00008585 {
8586 .vendor = "Winbond",
stefanct371e7e82011-07-07 19:56:58 +00008587 .name = "W25X16",
hailfingerea04a9e2009-07-11 19:39:11 +00008588 .bustype = CHIP_BUSTYPE_SPI,
8589 .manufacture_id = WINBOND_NEX_ID,
mhm38e577e2010-09-14 23:56:56 +00008590 .model_id = WINBOND_NEX_W25X16,
hailfingerea04a9e2009-07-11 19:39:11 +00008591 .total_size = 2048,
8592 .page_size = 256,
hailfinger41968332010-09-03 03:06:07 +00008593 .feature_bits = FEATURE_WRSR_WREN,
stefanct896d61e2011-06-04 13:13:34 +00008594 .tested = TEST_OK_PREW,
hailfingerea04a9e2009-07-11 19:39:11 +00008595 .probe = probe_spi_rdid,
8596 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00008597 .block_erasers =
8598 {
8599 {
8600 .eraseblocks = { {4 * 1024, 512} },
8601 .block_erase = spi_block_erase_20,
8602 }, {
8603 .eraseblocks = { {32 * 1024, 64} },
8604 .block_erase = spi_block_erase_52,
8605 }, {
8606 .eraseblocks = { {64 * 1024, 32} },
8607 .block_erase = spi_block_erase_d8,
8608 }, {
8609 .eraseblocks = { {2 * 1024 * 1024, 1} },
8610 .block_erase = spi_block_erase_60,
8611 }, {
8612 .eraseblocks = { {2 * 1024 * 1024, 1} },
8613 .block_erase = spi_block_erase_c7,
8614 }
8615 },
hailfingerb9560ee2010-07-14 20:21:22 +00008616 .unlock = spi_disable_blockprotect,
hailfingerea04a9e2009-07-11 19:39:11 +00008617 .write = spi_chip_write_256,
8618 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00008619 .voltage = {2700, 3600},
hailfingerea04a9e2009-07-11 19:39:11 +00008620 },
8621
8622 {
8623 .vendor = "Winbond",
stefanct371e7e82011-07-07 19:56:58 +00008624 .name = "W25X32",
hailfingerd5431fb2009-11-26 11:05:01 +00008625 .bustype = CHIP_BUSTYPE_SPI,
8626 .manufacture_id = WINBOND_NEX_ID,
mhm38e577e2010-09-14 23:56:56 +00008627 .model_id = WINBOND_NEX_W25X32,
hailfingerd5431fb2009-11-26 11:05:01 +00008628 .total_size = 4096,
8629 .page_size = 256,
hailfinger41968332010-09-03 03:06:07 +00008630 .feature_bits = FEATURE_WRSR_WREN,
hailfingerd5431fb2009-11-26 11:05:01 +00008631 .tested = TEST_OK_PROBE,
8632 .probe = probe_spi_rdid,
8633 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00008634 .block_erasers =
8635 {
8636 {
8637 .eraseblocks = { {4 * 1024, 1024} },
8638 .block_erase = spi_block_erase_20,
8639 }, {
8640 .eraseblocks = { {32 * 1024, 128} },
8641 .block_erase = spi_block_erase_52,
8642 }, {
8643 .eraseblocks = { {64 * 1024, 64} },
8644 .block_erase = spi_block_erase_d8,
8645 }, {
8646 .eraseblocks = { {4 * 1024 * 1024, 1} },
8647 .block_erase = spi_block_erase_60,
8648 }, {
8649 .eraseblocks = { {4 * 1024 * 1024, 1} },
8650 .block_erase = spi_block_erase_c7,
8651 }
8652 },
hailfingerb9560ee2010-07-14 20:21:22 +00008653 .unlock = spi_disable_blockprotect,
hailfingerd5431fb2009-11-26 11:05:01 +00008654 .write = spi_chip_write_256,
8655 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00008656 .voltage = {2700, 3600},
hailfingerd5431fb2009-11-26 11:05:01 +00008657 },
8658
8659 {
8660 .vendor = "Winbond",
stefanct371e7e82011-07-07 19:56:58 +00008661 .name = "W25X64",
hailfingerd5431fb2009-11-26 11:05:01 +00008662 .bustype = CHIP_BUSTYPE_SPI,
8663 .manufacture_id = WINBOND_NEX_ID,
mhm38e577e2010-09-14 23:56:56 +00008664 .model_id = WINBOND_NEX_W25X64,
hailfingerd5431fb2009-11-26 11:05:01 +00008665 .total_size = 8192,
8666 .page_size = 256,
hailfinger41968332010-09-03 03:06:07 +00008667 .feature_bits = FEATURE_WRSR_WREN,
stefancte0e52902011-05-26 14:28:51 +00008668 .tested = TEST_OK_PROBE,
hailfingerd5431fb2009-11-26 11:05:01 +00008669 .probe = probe_spi_rdid,
8670 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00008671 .block_erasers =
8672 {
8673 {
8674 .eraseblocks = { {4 * 1024, 2048} },
8675 .block_erase = spi_block_erase_20,
8676 }, {
8677 .eraseblocks = { {32 * 1024, 256} },
8678 .block_erase = spi_block_erase_52,
8679 }, {
8680 .eraseblocks = { {64 * 1024, 128} },
8681 .block_erase = spi_block_erase_d8,
8682 }, {
8683 .eraseblocks = { {8 * 1024 * 1024, 1} },
8684 .block_erase = spi_block_erase_60,
8685 }, {
8686 .eraseblocks = { {8 * 1024 * 1024, 1} },
8687 .block_erase = spi_block_erase_c7,
8688 }
8689 },
hailfingerb9560ee2010-07-14 20:21:22 +00008690 .unlock = spi_disable_blockprotect,
hailfingerd5431fb2009-11-26 11:05:01 +00008691 .write = spi_chip_write_256,
8692 .read = spi_chip_read,
stefanct7e00e222011-06-03 07:26:31 +00008693 .voltage = {2700, 3600},
hailfingerd5431fb2009-11-26 11:05:01 +00008694 },
8695
8696 {
8697 .vendor = "Winbond",
hailfingere51a2012011-07-26 14:18:52 +00008698 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012-old",
8699 .bustype = CHIP_BUSTYPE_PARALLEL,
8700 .manufacture_id = WINBOND_ID,
8701 .model_id = WINBOND_W29C010,
8702 .total_size = 128,
8703 .page_size = 128,
8704 .feature_bits = FEATURE_LONG_RESET,
8705 .tested = TEST_OK_PRE,
8706 .probe = probe_w29ee011,
8707 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (w29ee011.c) */
8708 .block_erasers =
8709 {
8710 {
8711 .eraseblocks = { {128 * 1024, 1} },
8712 .block_erase = erase_chip_block_jedec,
8713 }
8714 },
8715 .write = write_jedec,
8716 .read = read_memmapped,
8717 },
8718
8719 {/* W29EE011, W29EE012, W29C010M, W29C011A do not support probe_jedec according to the datasheet, but it works for newer(?) steppings. */
8720 .vendor = "Winbond",
mhm38e577e2010-09-14 23:56:56 +00008721 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
hailfingera5245512009-06-28 19:19:25 +00008722 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00008723 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00008724 .model_id = WINBOND_W29C010,
hailfinger286829b2009-01-08 03:40:17 +00008725 .total_size = 128,
8726 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00008727 .feature_bits = FEATURE_LONG_RESET,
stefanctf4eea092011-05-18 01:31:03 +00008728 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00008729 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00008730 .probe_timing = 10, /* used datasheet for the W29C011A */
snelson376060c2010-01-19 03:24:55 +00008731 .block_erasers =
8732 {
8733 {
8734 .eraseblocks = { {128 * 1024, 1} },
8735 .block_erase = erase_chip_block_jedec,
8736 }
8737 },
hailfinger286829b2009-01-08 03:40:17 +00008738 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00008739 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00008740 },
8741
hailfinger286829b2009-01-08 03:40:17 +00008742 {
8743 .vendor = "Winbond",
mhm38e577e2010-09-14 23:56:56 +00008744 .name = "W29C020(C)/W29C022",
hailfingerdaecf7e2009-06-05 08:47:37 +00008745 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00008746 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00008747 .model_id = WINBOND_W29C020,
hailfinger286829b2009-01-08 03:40:17 +00008748 .total_size = 256,
8749 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00008750 .feature_bits = FEATURE_LONG_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08008751 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00008752 .probe = probe_jedec,
stefanct371e7e82011-07-07 19:56:58 +00008753 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00008754 .block_erasers =
8755 {
8756 {
8757 .eraseblocks = { {256 * 1024, 1} },
8758 .block_erase = erase_chip_block_jedec,
8759 }
8760 },
hailfinger286829b2009-01-08 03:40:17 +00008761 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00008762 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008763 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00008764 },
8765
hailfinger286829b2009-01-08 03:40:17 +00008766 {
8767 .vendor = "Winbond",
mhm38e577e2010-09-14 23:56:56 +00008768 .name = "W29C040/P",
hailfingerdaecf7e2009-06-05 08:47:37 +00008769 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00008770 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00008771 .model_id = WINBOND_W29C040,
hailfinger286829b2009-01-08 03:40:17 +00008772 .total_size = 512,
8773 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00008774 .feature_bits = FEATURE_LONG_RESET,
8775 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00008776 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00008777 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00008778 .block_erasers =
8779 {
8780 {
8781 .eraseblocks = { {512 * 1024, 1} },
8782 .block_erase = erase_chip_block_jedec,
8783 }
8784 },
hailfinger286829b2009-01-08 03:40:17 +00008785 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00008786 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008787 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00008788 },
8789
hailfinger286829b2009-01-08 03:40:17 +00008790 {
8791 .vendor = "Winbond",
mkarcherb8f55a62011-03-06 17:58:05 +00008792 .name = "W39L040",
8793 .bustype = CHIP_BUSTYPE_PARALLEL,
8794 .manufacture_id = WINBOND_ID,
8795 .model_id = WINBOND_W39L040,
8796 .total_size = 512,
8797 .page_size = 64 * 1024,
8798 .feature_bits = FEATURE_EITHER_RESET,
8799 .tested = TEST_OK_PR,
8800 .probe = probe_jedec,
8801 .probe_timing = 10,
8802 .block_erasers =
8803 {
8804 {
8805 .eraseblocks = { {4 * 1024, 128} },
8806 .block_erase = erase_block_jedec,
8807 }, {
8808 .eraseblocks = { {64 * 1024, 8} },
8809 .block_erase = erase_sector_jedec,
8810 }, {
8811 .eraseblocks = { {512 * 1024, 1} },
8812 .block_erase = erase_chip_block_jedec,
8813 }
8814 },
8815 .printlock = printlock_w39l040,
8816 .write = write_jedec_1,
8817 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00008818 .voltage = {3000, 3600},
mkarcherb8f55a62011-03-06 17:58:05 +00008819 },
8820
8821 {
8822 .vendor = "Winbond",
hailfinger286829b2009-01-08 03:40:17 +00008823 .name = "W39V040A",
hailfingerf850e0a2009-06-12 21:29:36 +00008824 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00008825 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00008826 .model_id = WINBOND_W39V040A,
hailfinger286829b2009-01-08 03:40:17 +00008827 .total_size = 512,
hailfingerc43afc92009-12-22 22:15:33 +00008828 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00008829 .feature_bits = FEATURE_EITHER_RESET,
stefanctdfd58832011-07-25 20:38:52 +00008830 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00008831 .probe = probe_jedec,
stefanctdfd58832011-07-25 20:38:52 +00008832 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00008833 .block_erasers =
8834 {
8835 {
8836 .eraseblocks = { {64 * 1024, 8} },
8837 .block_erase = erase_sector_jedec,
8838 }, {
8839 .eraseblocks = { {512 * 1024, 1} },
8840 .block_erase = erase_chip_block_jedec,
8841 }
8842 },
hailfingerf8993012010-12-05 16:33:59 +00008843 .printlock = printlock_w39v040a,
snelsonc6855342010-01-28 23:55:12 +00008844 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00008845 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008846 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00008847 },
8848
hailfinger286829b2009-01-08 03:40:17 +00008849 {
8850 .vendor = "Winbond",
hailfingerf8993012010-12-05 16:33:59 +00008851 .name = "W39V040B",
hailfingerf850e0a2009-06-12 21:29:36 +00008852 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00008853 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00008854 .model_id = WINBOND_W39V040B,
hailfinger286829b2009-01-08 03:40:17 +00008855 .total_size = 512,
hailfingerc43afc92009-12-22 22:15:33 +00008856 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00008857 .feature_bits = FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00008858 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00008859 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00008860 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00008861 .block_erasers =
8862 {
8863 {
8864 .eraseblocks = { {64 * 1024, 8} },
8865 .block_erase = erase_sector_jedec,
8866 }, {
8867 .eraseblocks = { {512 * 1024, 1} },
8868 .block_erase = erase_chip_block_jedec,
8869 }
8870 },
hailfingerf8993012010-12-05 16:33:59 +00008871 .printlock = printlock_w39v040b,
snelsonc6855342010-01-28 23:55:12 +00008872 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00008873 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008874 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00008875 },
8876
hailfinger286829b2009-01-08 03:40:17 +00008877 {
8878 .vendor = "Winbond",
hailfingerf8993012010-12-05 16:33:59 +00008879 .name = "W39V040C",
hailfingerf850e0a2009-06-12 21:29:36 +00008880 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00008881 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00008882 .model_id = WINBOND_W39V040C,
hailfinger286829b2009-01-08 03:40:17 +00008883 .total_size = 512,
hailfingerc43afc92009-12-22 22:15:33 +00008884 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00008885 .feature_bits = FEATURE_EITHER_RESET,
8886 .tested = TEST_UNTESTED,
8887 .probe = probe_jedec,
hailfingerf8993012010-12-05 16:33:59 +00008888 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00008889 .block_erasers =
8890 {
8891 {
8892 .eraseblocks = { {64 * 1024, 8} },
8893 .block_erase = erase_sector_jedec,
8894 }, {
8895 .eraseblocks = { {512 * 1024, 1} },
8896 .block_erase = erase_chip_block_jedec,
8897 }
8898 },
snelson1ee293c2010-02-19 00:52:10 +00008899 .printlock = printlock_w39v040c,
snelsonc6855342010-01-28 23:55:12 +00008900 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00008901 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008902 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00008903 },
8904
hailfinger286829b2009-01-08 03:40:17 +00008905 {
8906 .vendor = "Winbond",
8907 .name = "W39V040FA",
hailfingerf850e0a2009-06-12 21:29:36 +00008908 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00008909 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00008910 .model_id = WINBOND_W39V040FA,
hailfinger286829b2009-01-08 03:40:17 +00008911 .total_size = 512,
hailfingerc43afc92009-12-22 22:15:33 +00008912 .page_size = 64 * 1024,
mkarcher74173032010-05-30 16:55:18 +00008913 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08008914 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00008915 .probe = probe_jedec,
stefancte0e52902011-05-26 14:28:51 +00008916 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00008917 .block_erasers =
8918 {
8919 {
8920 .eraseblocks = { {4 * 1024, 128} },
8921 .block_erase = erase_block_jedec,
8922 }, {
8923 .eraseblocks = { {64 * 1024, 8} },
8924 .block_erase = erase_sector_jedec,
8925 }, {
8926 .eraseblocks = { {512 * 1024, 1} },
8927 .block_erase = erase_chip_block_jedec,
8928 }
8929 },
hailfingerf8993012010-12-05 16:33:59 +00008930 .printlock = printlock_w39v040fa,
mkarcher74173032010-05-30 16:55:18 +00008931 .unlock = unlock_sst_fwhub,
snelsonc6855342010-01-28 23:55:12 +00008932 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00008933 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00008934 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00008935 },
8936
hailfinger286829b2009-01-08 03:40:17 +00008937 {
8938 .vendor = "Winbond",
hailfingerf8993012010-12-05 16:33:59 +00008939 .name = "W39V040FB",
8940 .bustype = CHIP_BUSTYPE_FWH,
8941 .manufacture_id = WINBOND_ID,
8942 .model_id = WINBOND_W39V040B,
8943 .total_size = 512,
8944 .page_size = 64 * 1024,
8945 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
hailfingere29b25b2011-03-06 22:26:23 +00008946 .tested = TEST_OK_PREW,
hailfingerf8993012010-12-05 16:33:59 +00008947 .probe = probe_jedec,
8948 .probe_timing = 10,
8949 .block_erasers =
8950 {
8951 {
8952 .eraseblocks = { {64 * 1024, 8} },
8953 .block_erase = erase_sector_jedec,
8954 }, {
8955 .eraseblocks = { {512 * 1024, 1} },
8956 .block_erase = erase_chip_block_jedec,
8957 }
8958 },
8959 .printlock = printlock_w39v040fb,
mkarcher64dbd922010-12-26 23:55:12 +00008960 .unlock = unlock_w39v040fb,
hailfingerf8993012010-12-05 16:33:59 +00008961 .write = write_jedec_1,
8962 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00008963 .voltage = {3000, 3600}, /* Also has 12V fast program */
hailfingerf8993012010-12-05 16:33:59 +00008964 },
8965
8966 {
8967 .vendor = "Winbond",
8968 .name = "W39V040FC",
8969 .bustype = CHIP_BUSTYPE_FWH,
8970 .manufacture_id = WINBOND_ID,
8971 .model_id = WINBOND_W39V040C,
8972 .total_size = 512,
8973 .page_size = 64 * 1024,
8974 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
8975 .tested = TEST_UNTESTED,
8976 .probe = probe_jedec,
8977 .probe_timing = 10,
8978 .block_erasers =
8979 {
8980 {
8981 .eraseblocks = { {64 * 1024, 8} },
8982 .block_erase = erase_sector_jedec,
8983 }, {
8984 .eraseblocks = { {512 * 1024, 1} },
8985 .block_erase = erase_chip_block_jedec,
8986 }
8987 },
8988 .printlock = printlock_w39v040fc,
8989 .write = write_jedec_1,
8990 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00008991 .voltage = {3000, 3600}, /* Also has 12V fast program */
hailfingerf8993012010-12-05 16:33:59 +00008992 },
8993
8994 {
8995 .vendor = "Winbond",
David Hendricks668f29d2011-01-27 18:51:45 -08008996 .name = "W39V040FB",
8997 .bustype = CHIP_BUSTYPE_FWH,
8998 .manufacture_id = WINBOND_ID,
8999 .model_id = WINBOND_W39V040B,
9000 .total_size = 512,
9001 .page_size = 64 * 1024,
9002 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
9003 .tested = TEST_OK_PRE,
9004 .probe = probe_jedec,
9005 .probe_timing = 10,
9006 .block_erasers =
9007 {
9008 {
9009 .eraseblocks = { {64 * 1024, 8} },
9010 .block_erase = erase_sector_jedec,
9011 }, {
9012 .eraseblocks = { {512 * 1024, 1} },
9013 .block_erase = erase_chip_block_jedec,
9014 }
9015 },
9016 .printlock = printlock_w39v040fb,
9017 .unlock = unlock_w39v040fb,
9018 .write = write_jedec_1,
9019 .read = read_memmapped,
9020 },
9021
9022 {
9023 .vendor = "Winbond",
9024 .name = "W39V040FC",
9025 .bustype = CHIP_BUSTYPE_FWH,
9026 .manufacture_id = WINBOND_ID,
9027 .model_id = WINBOND_W39V040C,
9028 .total_size = 512,
9029 .page_size = 64 * 1024,
9030 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
9031 .tested = TEST_UNTESTED,
9032 .probe = probe_jedec,
9033 .probe_timing = 10,
9034 .block_erasers =
9035 {
9036 {
9037 .eraseblocks = { {64 * 1024, 8} },
9038 .block_erase = erase_sector_jedec,
9039 }, {
9040 .eraseblocks = { {512 * 1024, 1} },
9041 .block_erase = erase_chip_block_jedec,
9042 }
9043 },
9044 .printlock = printlock_w39v040fc,
9045 .write = write_jedec_1,
9046 .read = read_memmapped,
9047 },
9048
9049 {
9050 .vendor = "Winbond",
hailfinger286829b2009-01-08 03:40:17 +00009051 .name = "W39V080A",
hailfingerf850e0a2009-06-12 21:29:36 +00009052 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00009053 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00009054 .model_id = WINBOND_W39V080A,
hailfinger286829b2009-01-08 03:40:17 +00009055 .total_size = 1024,
hailfingerc43afc92009-12-22 22:15:33 +00009056 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00009057 .feature_bits = FEATURE_EITHER_RESET,
9058 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00009059 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00009060 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00009061 .block_erasers =
9062 {
9063 {
9064 .eraseblocks = { {64 * 1024, 16} },
9065 .block_erase = erase_sector_jedec,
9066 }, {
9067 .eraseblocks = { {1024 * 1024, 1} },
9068 .block_erase = erase_chip_block_jedec,
9069 }
9070 },
hailfingerf8993012010-12-05 16:33:59 +00009071 .printlock = printlock_w39v080a,
snelsonc6855342010-01-28 23:55:12 +00009072 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00009073 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00009074 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00009075 },
9076
hailfinger286829b2009-01-08 03:40:17 +00009077 {
9078 .vendor = "Winbond",
mhm38e577e2010-09-14 23:56:56 +00009079 .name = "W49F002U/N",
hailfingera5245512009-06-28 19:19:25 +00009080 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00009081 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00009082 .model_id = WINBOND_W49F002U,
hailfinger286829b2009-01-08 03:40:17 +00009083 .total_size = 256,
9084 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00009085 .feature_bits = FEATURE_EITHER_RESET,
stefanctdfd58832011-07-25 20:38:52 +00009086 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00009087 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00009088 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00009089 .block_erasers =
9090 {
9091 {
9092 .eraseblocks = {
9093 {128 * 1024, 1},
9094 {96 * 1024, 1},
9095 {8 * 1024, 2},
9096 {16 * 1024, 1},
9097 },
9098 .block_erase = erase_sector_jedec,
9099 }, {
9100 .eraseblocks = { {256 * 1024, 1} },
9101 .block_erase = erase_chip_block_jedec,
9102 }
9103 },
snelsonc6855342010-01-28 23:55:12 +00009104 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00009105 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00009106 .voltage = {4500, 5500},
stepanaa1b6a22008-12-08 18:15:10 +00009107 },
9108
hailfinger286829b2009-01-08 03:40:17 +00009109 {
9110 .vendor = "Winbond",
hailfinger808e6aa2010-07-17 13:45:42 +00009111 .name = "W49F020",
9112 .bustype = CHIP_BUSTYPE_PARALLEL,
9113 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00009114 .model_id = WINBOND_W49F020,
hailfinger808e6aa2010-07-17 13:45:42 +00009115 .total_size = 256,
9116 .page_size = 128,
9117 .feature_bits = FEATURE_EITHER_RESET,
9118 .tested = TEST_OK_PROBE,
9119 .probe = probe_jedec,
9120 .probe_timing = 10,
9121 .block_erasers =
9122 {
9123 {
9124 .eraseblocks = { {256 * 1024, 1} },
9125 .block_erase = erase_chip_block_jedec,
9126 }
9127 },
9128 .write = write_jedec_1,
9129 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00009130 .voltage = {4500, 5500},
hailfinger808e6aa2010-07-17 13:45:42 +00009131 },
9132
9133 {
9134 .vendor = "Winbond",
hailfinger286829b2009-01-08 03:40:17 +00009135 .name = "W49V002A",
hailfingerf850e0a2009-06-12 21:29:36 +00009136 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00009137 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00009138 .model_id = WINBOND_W49V002A,
hailfinger286829b2009-01-08 03:40:17 +00009139 .total_size = 256,
9140 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00009141 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08009142 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00009143 .probe = probe_jedec,
stefanct371e7e82011-07-07 19:56:58 +00009144 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00009145 .block_erasers =
9146 {
9147 {
9148 .eraseblocks = {
9149 {64 * 1024, 3},
9150 {32 * 1024, 1},
9151 {8 * 1024, 2},
9152 {16 * 1024, 1},
9153 },
9154 .block_erase = erase_sector_jedec,
9155 }, {
9156 .eraseblocks = { {256 * 1024, 1} },
9157 .block_erase = erase_chip_block_jedec,
9158 }
9159 },
snelsonc6855342010-01-28 23:55:12 +00009160 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00009161 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00009162 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00009163 },
9164
hailfinger286829b2009-01-08 03:40:17 +00009165 {
9166 .vendor = "Winbond",
9167 .name = "W49V002FA",
hailfingerf850e0a2009-06-12 21:29:36 +00009168 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00009169 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00009170 .model_id = WINBOND_W49V002FA,
hailfinger286829b2009-01-08 03:40:17 +00009171 .total_size = 256,
9172 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00009173 .feature_bits = FEATURE_EITHER_RESET,
hailfingerd217d122010-10-08 18:52:29 +00009174 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00009175 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00009176 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00009177 .block_erasers =
9178 {
9179 {
9180 .eraseblocks = {
9181 {64 * 1024, 3},
9182 {32 * 1024, 1},
9183 {8 * 1024, 2},
9184 {16 * 1024, 1},
9185 },
9186 .block_erase = erase_sector_jedec,
9187 }, {
9188 .eraseblocks = { {256 * 1024, 1} },
9189 .block_erase = erase_chip_block_jedec,
9190 }
9191 },
snelsonc6855342010-01-28 23:55:12 +00009192 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00009193 .read = read_memmapped,
stefanct7e00e222011-06-03 07:26:31 +00009194 .voltage = {3000, 3600},
stepanaa1b6a22008-12-08 18:15:10 +00009195 },
9196
hailfinger286829b2009-01-08 03:40:17 +00009197 {
9198 .vendor = "Winbond",
9199 .name = "W39V080FA",
hailfingerf850e0a2009-06-12 21:29:36 +00009200 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00009201 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00009202 .model_id = WINBOND_W39V080FA,
hailfinger286829b2009-01-08 03:40:17 +00009203 .total_size = 1024,
hailfingerc43afc92009-12-22 22:15:33 +00009204 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00009205 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
stefanctdfd58832011-07-25 20:38:52 +00009206 .tested = TEST_OK_PREW,
hailfingerafac00e2010-01-09 02:24:17 +00009207 .probe = probe_jedec,
hailfingerf8993012010-12-05 16:33:59 +00009208 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00009209 .block_erasers =
9210 {
9211 {
9212 .eraseblocks = { {64 * 1024, 16}, },
9213 .block_erase = erase_sector_jedec,
9214 }, {
9215 .eraseblocks = { {1024 * 1024, 1} },
9216 .block_erase = erase_chip_block_jedec,
9217 }
9218 },
hailfingerf8993012010-12-05 16:33:59 +00009219 .printlock = printlock_w39v080fa,
9220 .unlock = unlock_w39v080fa,
snelsonc6855342010-01-28 23:55:12 +00009221 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00009222 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00009223 .voltage = {3000, 3600}, /* Also has 12V fast program */
stepanaa1b6a22008-12-08 18:15:10 +00009224 },
9225
hailfinger286829b2009-01-08 03:40:17 +00009226 {
9227 .vendor = "Winbond",
9228 .name = "W39V080FA (dual mode)",
hailfingerf850e0a2009-06-12 21:29:36 +00009229 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00009230 .manufacture_id = WINBOND_ID,
mhm38e577e2010-09-14 23:56:56 +00009231 .model_id = WINBOND_W39V080FA_DM,
hailfinger286829b2009-01-08 03:40:17 +00009232 .total_size = 512,
hailfingerc43afc92009-12-22 22:15:33 +00009233 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00009234 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00009235 .tested = TEST_UNTESTED,
hailfingerafac00e2010-01-09 02:24:17 +00009236 .probe = probe_jedec,
hailfingerf8993012010-12-05 16:33:59 +00009237 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00009238 .block_erasers =
9239 {
9240 {
9241 .eraseblocks = { {64 * 1024, 8}, },
9242 .block_erase = erase_sector_jedec,
9243 }, {
9244 .eraseblocks = { {512 * 1024, 1} },
9245 .block_erase = erase_chip_block_jedec,
9246 }
9247 },
hailfingerf8993012010-12-05 16:33:59 +00009248 .printlock = printlock_w39v080fa_dual,
snelsonc6855342010-01-28 23:55:12 +00009249 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00009250 .read = read_memmapped,
stefanct66c8c1b2011-07-19 08:50:18 +00009251 .voltage = {3000, 3600}, /* Also has 12V fast program */
stepanaa1b6a22008-12-08 18:15:10 +00009252 },
David Hendricks07af3a42011-07-11 22:13:02 -07009253#if defined(CONFIG_INTERNAL) && (defined(__i386__) || defined(__x86_64__))
9254 {
9255 .vendor = "Intel",
9256 .name = "Hardware Sequencing",
9257 .bustype = CHIP_BUSTYPE_SPI,
9258 .manufacture_id = INTEL_ID,
9259 .model_id = INTEL_HWSEQ,
9260 .total_size = 0,
9261 .page_size = 256,
9262 .tested = TEST_OK_PREW,
9263 .probe = ich_hwseq_probe,
9264 .block_erasers =
9265 {
9266 { /* erase blocks will be set by the probing function */
9267 .block_erase = ich_hwseq_block_erase,
9268 }
9269 },
9270 .write = ich_hwseq_write_256,
9271 .read = ich_hwseq_read,
9272 },
9273#endif // defined(CONFIG_INTERNAL) && (defined(__i386__) || defined(__x86_64__))
hailfinger286829b2009-01-08 03:40:17 +00009274 {
hailfinger867df6b2010-07-22 11:44:38 +00009275 .vendor = "AMIC",
9276 .name = "unknown AMIC SPI chip",
9277 .bustype = CHIP_BUSTYPE_SPI,
9278 .manufacture_id = AMIC_ID,
9279 .model_id = GENERIC_DEVICE_ID,
9280 .total_size = 0,
9281 .page_size = 256,
9282 .tested = TEST_BAD_PREW,
9283 .probe = probe_spi_rdid4,
9284 .probe_timing = TIMING_ZERO,
9285 .write = NULL,
9286 .read = NULL,
9287 },
9288
9289 {
hailfinger286829b2009-01-08 03:40:17 +00009290 .vendor = "Atmel",
9291 .name = "unknown Atmel SPI chip",
hailfinger40167462009-05-31 17:57:34 +00009292 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00009293 .manufacture_id = ATMEL_ID,
9294 .model_id = GENERIC_DEVICE_ID,
9295 .total_size = 0,
9296 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00009297 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00009298 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00009299 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00009300 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00009301 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00009302 },
9303
hailfinger286829b2009-01-08 03:40:17 +00009304 {
hailfinger61958912010-07-28 22:20:20 +00009305 .vendor = "Eon",
9306 .name = "unknown Eon SPI chip",
hailfinger40167462009-05-31 17:57:34 +00009307 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00009308 .manufacture_id = EON_ID_NOPREFIX,
9309 .model_id = GENERIC_DEVICE_ID,
9310 .total_size = 0,
9311 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00009312 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00009313 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00009314 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00009315 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00009316 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00009317 },
9318
hailfinger286829b2009-01-08 03:40:17 +00009319 {
9320 .vendor = "Macronix",
9321 .name = "unknown Macronix SPI chip",
hailfinger40167462009-05-31 17:57:34 +00009322 .bustype = CHIP_BUSTYPE_SPI,
mhmd3c80cd2010-09-15 23:31:03 +00009323 .manufacture_id = MACRONIX_ID,
hailfinger286829b2009-01-08 03:40:17 +00009324 .model_id = GENERIC_DEVICE_ID,
9325 .total_size = 0,
9326 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00009327 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00009328 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00009329 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00009330 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00009331 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00009332 },
9333
hailfinger286829b2009-01-08 03:40:17 +00009334 {
9335 .vendor = "PMC",
9336 .name = "unknown PMC SPI chip",
hailfinger40167462009-05-31 17:57:34 +00009337 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00009338 .manufacture_id = PMC_ID,
9339 .model_id = GENERIC_DEVICE_ID,
9340 .total_size = 0,
9341 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00009342 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00009343 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00009344 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00009345 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00009346 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00009347 },
9348
hailfinger286829b2009-01-08 03:40:17 +00009349 {
9350 .vendor = "SST",
9351 .name = "unknown SST SPI chip",
hailfinger40167462009-05-31 17:57:34 +00009352 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00009353 .manufacture_id = SST_ID,
9354 .model_id = GENERIC_DEVICE_ID,
9355 .total_size = 0,
9356 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00009357 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00009358 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00009359 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00009360 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00009361 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00009362 },
9363
hailfinger286829b2009-01-08 03:40:17 +00009364 {
9365 .vendor = "ST",
9366 .name = "unknown ST SPI chip",
hailfinger40167462009-05-31 17:57:34 +00009367 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00009368 .manufacture_id = ST_ID,
9369 .model_id = GENERIC_DEVICE_ID,
9370 .total_size = 0,
9371 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00009372 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00009373 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00009374 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00009375 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00009376 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00009377 },
uwec93fbdb2008-03-16 02:06:25 +00009378
hailfinger63165602009-11-20 01:12:45 +00009379 {
hailfinger201f62f2009-11-24 02:08:11 +00009380 .vendor = "Sanyo",
9381 .name = "unknown Sanyo SPI chip",
9382 .bustype = CHIP_BUSTYPE_SPI,
9383 .manufacture_id = SANYO_ID,
9384 .model_id = GENERIC_DEVICE_ID,
9385 .total_size = 0,
9386 .page_size = 256,
9387 .tested = TEST_BAD_PREW,
9388 .probe = probe_spi_rdid,
9389 .probe_timing = TIMING_ZERO,
hailfinger201f62f2009-11-24 02:08:11 +00009390 .write = NULL,
9391 .read = NULL,
9392 },
9393
9394 {
hailfinger63165602009-11-20 01:12:45 +00009395 .vendor = "Generic",
Louis Yung-Chieh Loe53fa0f2011-04-11 17:18:41 +08009396 .name = "Variable Size SPI chip",
9397 .bustype = CHIP_BUSTYPE_SPI,
9398 .manufacture_id = VARIABLE_SIZE_MANUF_ID,
9399 .model_id = VARIABLE_SIZE_DEVICE_ID,
9400 .total_size = 64, /* This size is set temporarily */
9401 .page_size = 256,
9402 .tested = TEST_OK_PREW,
9403 .probe = probe_variable_size,
9404 .block_erasers =
9405 {
9406 {
9407 .eraseblocks = { {4 * 1024, 16} },
9408 .block_erase = spi_block_erase_20,
9409 }, {
9410 .eraseblocks = { {64 * 1024, 1} },
9411 .block_erase = spi_block_erase_d8,
9412 }
9413 },
9414 .write = spi_chip_write_256,
9415 .read = spi_chip_read,
9416 },
9417
9418 {
9419 .vendor = "Generic",
hailfinger63165602009-11-20 01:12:45 +00009420 .name = "unknown SPI chip (RDID)",
9421 .bustype = CHIP_BUSTYPE_SPI,
9422 .manufacture_id = GENERIC_MANUF_ID,
9423 .model_id = GENERIC_DEVICE_ID,
9424 .total_size = 0,
9425 .page_size = 256,
9426 .tested = TEST_BAD_PREW,
9427 .probe = probe_spi_rdid,
hailfinger63165602009-11-20 01:12:45 +00009428 .write = NULL,
9429 },
David Hendricks07af3a42011-07-11 22:13:02 -07009430
hailfinger63165602009-11-20 01:12:45 +00009431 {
9432 .vendor = "Generic",
9433 .name = "unknown SPI chip (REMS)",
9434 .bustype = CHIP_BUSTYPE_SPI,
9435 .manufacture_id = GENERIC_MANUF_ID,
9436 .model_id = GENERIC_DEVICE_ID,
9437 .total_size = 0,
9438 .page_size = 256,
9439 .tested = TEST_BAD_PREW,
9440 .probe = probe_spi_rems,
hailfinger63165602009-11-20 01:12:45 +00009441 .write = NULL,
9442 },
9443
hailfinger286829b2009-01-08 03:40:17 +00009444 { NULL }
stuge7be5d032009-04-21 01:46:07 +00009445};