blob: dca01a243fe4bc95e1fc9fd6f4d11e8bcf83b933 [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 */
ollie6a600992005-11-26 21:55:36 +000036struct 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
stepanaa1b6a22008-12-08 18:15:10 +000058 */
59
hailfinger286829b2009-01-08 03:40:17 +000060 {
61 .vendor = "AMD",
uwe82741f22009-06-19 15:54:39 +000062 .name = "Am29F010A/B",
63 .bustype = CHIP_BUSTYPE_PARALLEL,
64 .manufacture_id = AMD_ID,
David Hendricksc801adb2010-12-09 16:58:56 -080065 .model_id = AMD_AM29F010B, /* Same as Am29F010A */
uwe82741f22009-06-19 15:54:39 +000066 .total_size = 128,
67 .page_size = 16 * 1024,
snelsonc6855342010-01-28 23:55:12 +000068 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -080069 .tested = TEST_OK_PRE,
snelsonc6855342010-01-28 23:55:12 +000070 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +000071 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +000072 .block_erasers =
73 {
74 {
75 .eraseblocks = { {16 * 1024, 8} },
snelsonc6855342010-01-28 23:55:12 +000076 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +000077 }, {
78 .eraseblocks = { {128 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +000079 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +000080 },
81 },
snelsonc6855342010-01-28 23:55:12 +000082 .write = write_jedec_1,
uwe82741f22009-06-19 15:54:39 +000083 .read = read_memmapped,
84 },
85
86 {
87 .vendor = "AMD",
hailfinger286829b2009-01-08 03:40:17 +000088 .name = "Am29F002(N)BB",
hailfingera5245512009-06-28 19:19:25 +000089 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +000090 .manufacture_id = AMD_ID,
David Hendricksc801adb2010-12-09 16:58:56 -080091 .model_id = AMD_AM29F002BB,
hailfinger286829b2009-01-08 03:40:17 +000092 .total_size = 256,
93 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +000094 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
hailfinger286829b2009-01-08 03:40:17 +000095 .tested = TEST_UNTESTED,
96 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +000097 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +000098 .block_erasers =
99 {
100 {
101 .eraseblocks = {
102 {16 * 1024, 1},
103 {8 * 1024, 2},
104 {32 * 1024, 1},
105 {64 * 1024, 3},
106 },
107 .block_erase = erase_sector_jedec,
108 }, {
109 .eraseblocks = { {256 * 1024, 1} },
110 .block_erase = erase_chip_block_jedec,
111 },
112 },
hailfingerfff99532009-11-27 17:49:42 +0000113 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000114 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +0000115 },
116
hailfinger286829b2009-01-08 03:40:17 +0000117 {
118 .vendor = "AMD",
119 .name = "Am29F002(N)BT",
hailfingera5245512009-06-28 19:19:25 +0000120 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +0000121 .manufacture_id = AMD_ID,
David Hendricksc801adb2010-12-09 16:58:56 -0800122 .model_id = AMD_AM29F002BT,
hailfinger286829b2009-01-08 03:40:17 +0000123 .total_size = 256,
124 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +0000125 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
126 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +0000127 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +0000128 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000129 .block_erasers =
130 {
131 {
132 .eraseblocks = {
133 {64 * 1024, 3},
134 {32 * 1024, 1},
135 {8 * 1024, 2},
136 {16 * 1024, 1},
137 },
138 .block_erase = erase_sector_jedec,
139 }, {
140 .eraseblocks = { {256 * 1024, 1} },
141 .block_erase = erase_chip_block_jedec,
142 },
143 },
hailfingerfff99532009-11-27 17:49:42 +0000144 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000145 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +0000146 },
147
hailfinger286829b2009-01-08 03:40:17 +0000148 {
149 .vendor = "AMD",
150 .name = "Am29F016D",
hailfingera5245512009-06-28 19:19:25 +0000151 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +0000152 .manufacture_id = AMD_ID,
David Hendricksc801adb2010-12-09 16:58:56 -0800153 .model_id = AMD_AM29F016D,
hailfingerc43afc92009-12-22 22:15:33 +0000154 .total_size = 2 * 1024,
hailfinger286829b2009-01-08 03:40:17 +0000155 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +0000156 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
hailfinger286829b2009-01-08 03:40:17 +0000157 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +0000158 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -0800159 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000160 .block_erasers =
161 {
162 {
163 .eraseblocks = { {64 * 1024, 32} },
snelsonc6855342010-01-28 23:55:12 +0000164 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000165 }, {
166 .eraseblocks = { {2048 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +0000167 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000168 },
169 },
snelsonc6855342010-01-28 23:55:12 +0000170 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000171 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +0000172 },
173
hailfinger286829b2009-01-08 03:40:17 +0000174 {
175 .vendor = "AMD",
176 .name = "Am29F040B",
hailfingera5245512009-06-28 19:19:25 +0000177 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +0000178 .manufacture_id = AMD_ID,
David Hendricksc801adb2010-12-09 16:58:56 -0800179 .model_id = AMD_AM29F040B,
hailfinger286829b2009-01-08 03:40:17 +0000180 .total_size = 512,
181 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +0000182 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
183 .tested = TEST_UNTESTED,
184 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -0800185 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000186 .block_erasers =
187 {
188 {
189 .eraseblocks = { {64 * 1024, 8} },
snelsonc6855342010-01-28 23:55:12 +0000190 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000191 }, {
192 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +0000193 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000194 },
195 },
snelsonc6855342010-01-28 23:55:12 +0000196 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000197 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +0000198 },
199
hailfinger286829b2009-01-08 03:40:17 +0000200 {
201 .vendor = "AMD",
stuged9f66152009-01-25 23:55:12 +0000202 .name = "Am29F080B",
hailfingera5245512009-06-28 19:19:25 +0000203 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingeradd36042009-06-02 00:38:14 +0000204 .manufacture_id = AMD_ID,
David Hendricksc801adb2010-12-09 16:58:56 -0800205 .model_id = AMD_AM29F080B,
stuged9f66152009-01-25 23:55:12 +0000206 .total_size = 1024,
207 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +0000208 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
stuged9f66152009-01-25 23:55:12 +0000209 .tested = TEST_UNTESTED,
210 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +0000211 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000212 .block_erasers =
213 {
214 {
215 .eraseblocks = { {64 * 1024, 16} },
snelsonc6855342010-01-28 23:55:12 +0000216 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000217 }, {
218 .eraseblocks = { {1024 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +0000219 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000220 },
221 },
snelsonc6855342010-01-28 23:55:12 +0000222 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000223 .read = read_memmapped,
stuged9f66152009-01-25 23:55:12 +0000224 },
225
226 {
227 .vendor = "AMD",
hailfinger286829b2009-01-08 03:40:17 +0000228 .name = "Am29LV040B",
hailfingera5245512009-06-28 19:19:25 +0000229 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +0000230 .manufacture_id = AMD_ID,
David Hendricksc801adb2010-12-09 16:58:56 -0800231 .model_id = AMD_AM29LV040B,
hailfinger286829b2009-01-08 03:40:17 +0000232 .total_size = 512,
233 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +0000234 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -0800235 .tested = TEST_OK_PRE,
snelsonc6855342010-01-28 23:55:12 +0000236 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -0800237 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000238 .block_erasers =
239 {
240 {
241 .eraseblocks = { {64 * 1024, 8} },
snelsonc6855342010-01-28 23:55:12 +0000242 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000243 }, {
244 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +0000245 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000246 },
247 },
snelsonc6855342010-01-28 23:55:12 +0000248 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000249 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +0000250 },
251
hailfinger286829b2009-01-08 03:40:17 +0000252 {
stuged9f66152009-01-25 23:55:12 +0000253 .vendor = "AMD",
254 .name = "Am29LV081B",
hailfingera5245512009-06-28 19:19:25 +0000255 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingeradd36042009-06-02 00:38:14 +0000256 .manufacture_id = AMD_ID,
David Hendricksc801adb2010-12-09 16:58:56 -0800257 .model_id = AMD_AM29LV080B,
stuged9f66152009-01-25 23:55:12 +0000258 .total_size = 1024,
259 .page_size = 64 * 1024,
David Hendricks668f29d2011-01-27 18:51:45 -0800260 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET, /* datasheet specifies address as don't care */
stuged9f66152009-01-25 23:55:12 +0000261 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +0000262 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -0800263 .probe_timing = TIMING_ZERO,
hailfingerc43afc92009-12-22 22:15:33 +0000264 .block_erasers =
265 {
266 {
267 .eraseblocks = { {64 * 1024, 16} },
snelsonc6855342010-01-28 23:55:12 +0000268 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000269 }, {
270 .eraseblocks = { {1024 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +0000271 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +0000272 },
273 },
snelsonc6855342010-01-28 23:55:12 +0000274 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +0000275 .read = read_memmapped,
stuged9f66152009-01-25 23:55:12 +0000276 },
277
278 {
David Hendricks82fd8ae2010-08-04 14:34:54 -0700279 .vendor = "AMIC",
280 .name = "A25L05PT",
281 .bustype = CHIP_BUSTYPE_SPI,
282 .manufacture_id = AMIC_ID,
283 .model_id = AMIC_A25L05PT,
284 .total_size = 64,
285 .page_size = 256,
286 .tested = TEST_UNTESTED,
287 .probe = probe_spi_rdid4,
288 .probe_timing = TIMING_ZERO,
289 .block_erasers =
290 {
291 {
292 .eraseblocks = {
293 {32 * 1024, 1},
294 {16 * 1024, 1},
295 {8 * 1024, 1},
296 {4 * 1024, 2},
297 },
298 .block_erase = spi_block_erase_d8,
299 }, {
300 .eraseblocks = { {64 * 1024, 1} },
301 .block_erase = spi_block_erase_c7,
302 }
303 },
304 .unlock = spi_disable_blockprotect,
305 .write = spi_chip_write_256,
306 .read = spi_chip_read,
307 },
308
309 {
310 .vendor = "AMIC",
311 .name = "A25L05PU",
312 .bustype = CHIP_BUSTYPE_SPI,
313 .manufacture_id = AMIC_ID,
314 .model_id = AMIC_A25L05PU,
315 .total_size = 64,
316 .page_size = 256,
317 .tested = TEST_UNTESTED,
318 .probe = probe_spi_rdid4,
319 .probe_timing = TIMING_ZERO,
320 .block_erasers =
321 {
322 {
323 .eraseblocks = {
324 {4 * 1024, 2},
325 {8 * 1024, 1},
326 {16 * 1024, 1},
327 {32 * 1024, 1},
328 },
329 .block_erase = spi_block_erase_d8,
330 }, {
331 .eraseblocks = { {64 * 1024, 1} },
332 .block_erase = spi_block_erase_c7,
333 }
334 },
335 .unlock = spi_disable_blockprotect,
336 .write = spi_chip_write_256,
337 .read = spi_chip_read,
338 },
339
340 {
341 .vendor = "AMIC",
342 .name = "A25L10PT",
343 .bustype = CHIP_BUSTYPE_SPI,
344 .manufacture_id = AMIC_ID,
345 .model_id = AMIC_A25L10PT,
346 .total_size = 128,
347 .page_size = 256,
348 .tested = TEST_UNTESTED,
349 .probe = probe_spi_rdid4,
350 .probe_timing = TIMING_ZERO,
351 .block_erasers =
352 {
353 {
354 .eraseblocks = {
355 {64 * 1024, 1},
356 {32 * 1024, 1},
357 {16 * 1024, 1},
358 {8 * 1024, 1},
359 {4 * 1024, 2},
360 },
361 .block_erase = spi_block_erase_d8,
362 }, {
363 .eraseblocks = { {128 * 1024, 1} },
364 .block_erase = spi_block_erase_c7,
365 }
366 },
367 .unlock = spi_disable_blockprotect,
368 .write = spi_chip_write_256,
369 .read = spi_chip_read,
370 },
371
372 {
373 .vendor = "AMIC",
374 .name = "A25L10PU",
375 .bustype = CHIP_BUSTYPE_SPI,
376 .manufacture_id = AMIC_ID,
377 .model_id = AMIC_A25L10PU,
378 .total_size = 128,
379 .page_size = 256,
380 .tested = TEST_UNTESTED,
381 .probe = probe_spi_rdid4,
382 .probe_timing = TIMING_ZERO,
383 .block_erasers =
384 {
385 {
386 .eraseblocks = {
387 {4 * 1024, 2},
388 {8 * 1024, 1},
389 {16 * 1024, 1},
390 {32 * 1024, 1},
391 {64 * 1024, 1},
392 },
393 .block_erase = spi_block_erase_d8,
394 }, {
395 .eraseblocks = { {128 * 1024, 1} },
396 .block_erase = spi_block_erase_c7,
397 }
398 },
399 .unlock = spi_disable_blockprotect,
400 .write = spi_chip_write_256,
401 .read = spi_chip_read,
402 },
403
404 {
405 .vendor = "AMIC",
406 .name = "A25L20PT",
407 .bustype = CHIP_BUSTYPE_SPI,
408 .manufacture_id = AMIC_ID,
409 .model_id = AMIC_A25L20PT,
410 .total_size = 256,
411 .page_size = 256,
412 .tested = TEST_UNTESTED,
413 .probe = probe_spi_rdid4,
414 .probe_timing = TIMING_ZERO,
415 .block_erasers =
416 {
417 {
418 .eraseblocks = {
419 {64 * 1024, 3},
420 {32 * 1024, 1},
421 {16 * 1024, 1},
422 {8 * 1024, 1},
423 {4 * 1024, 2},
424 },
425 .block_erase = spi_block_erase_d8,
426 }, {
427 .eraseblocks = { {256 * 1024, 1} },
428 .block_erase = spi_block_erase_c7,
429 }
430 },
431 .unlock = spi_disable_blockprotect,
432 .write = spi_chip_write_256,
433 .read = spi_chip_read,
434 },
435
436 {
437 .vendor = "AMIC",
438 .name = "A25L20PU",
439 .bustype = CHIP_BUSTYPE_SPI,
440 .manufacture_id = AMIC_ID,
441 .model_id = AMIC_A25L20PU,
442 .total_size = 256,
443 .page_size = 256,
444 .tested = TEST_UNTESTED,
445 .probe = probe_spi_rdid4,
446 .probe_timing = TIMING_ZERO,
447 .block_erasers =
448 {
449 {
450 .eraseblocks = {
451 {4 * 1024, 2},
452 {8 * 1024, 1},
453 {16 * 1024, 1},
454 {32 * 1024, 1},
455 {64 * 1024, 3},
456 },
457 .block_erase = spi_block_erase_d8,
458 }, {
459 .eraseblocks = { {256 * 1024, 1} },
460 .block_erase = spi_block_erase_c7,
461 }
462 },
463 .unlock = spi_disable_blockprotect,
464 .write = spi_chip_write_256,
465 .read = spi_chip_read,
466 },
467
468 /* The A25L40P{T,U} chips are distinguished by their
469 * erase block layouts, but without any distinction in RDID.
470 * This inexplicable quirk was verified by Rudolf Marek
471 * and discussed on the flashrom mailing list on 2010-07-12.
472 */
473 {
474 .vendor = "AMIC",
475 .name = "A25L40PT",
476 .bustype = CHIP_BUSTYPE_SPI,
477 .manufacture_id = AMIC_ID,
478 .model_id = AMIC_A25L40PT,
479 .total_size = 512,
480 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800481 .tested = TEST_OK_PR,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700482 .probe = probe_spi_rdid4,
483 .probe_timing = TIMING_ZERO,
484 .block_erasers =
485 {
486 {
487 .eraseblocks = {
488 {64 * 1024, 7},
489 {32 * 1024, 1},
490 {16 * 1024, 1},
491 {8 * 1024, 1},
492 {4 * 1024, 2},
493 },
494 .block_erase = spi_block_erase_d8,
495 }, {
496 .eraseblocks = { {512 * 1024, 1} },
497 .block_erase = spi_block_erase_c7,
498 }
499 },
500 .unlock = spi_disable_blockprotect,
501 .write = spi_chip_write_256,
502 .read = spi_chip_read,
503 },
504
505 {
506 .vendor = "AMIC",
507 .name = "A25L40PU",
508 .bustype = CHIP_BUSTYPE_SPI,
509 .manufacture_id = AMIC_ID,
510 .model_id = AMIC_A25L40PU,
511 .total_size = 512,
512 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800513 .tested = TEST_OK_PR,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700514 .probe = probe_spi_rdid4,
515 .probe_timing = TIMING_ZERO,
516 .block_erasers =
517 {
518 {
519 .eraseblocks = {
520 {4 * 1024, 2},
521 {8 * 1024, 1},
522 {16 * 1024, 1},
523 {32 * 1024, 1},
524 {64 * 1024, 7},
525 },
526 .block_erase = spi_block_erase_d8,
527 }, {
528 .eraseblocks = { {512 * 1024, 1} },
529 .block_erase = spi_block_erase_c7,
530 }
531 },
532 .unlock = spi_disable_blockprotect,
533 .write = spi_chip_write_256,
534 .read = spi_chip_read,
535 },
536
537 {
538 .vendor = "AMIC",
539 .name = "A25L80P",
540 .bustype = CHIP_BUSTYPE_SPI,
541 .manufacture_id = AMIC_ID,
542 .model_id = AMIC_A25L80P,
543 .total_size = 1024,
544 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800545 .tested = TEST_OK_PRE,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700546 .probe = probe_spi_rdid4,
547 .probe_timing = TIMING_ZERO,
548 .block_erasers =
549 {
550 {
551 .eraseblocks = {
552 {4 * 1024, 2},
553 {8 * 1024, 1},
554 {16 * 1024, 1},
555 {32 * 1024, 1},
556 {64 * 1024, 15},
557 },
558 .block_erase = spi_block_erase_d8,
559 }, {
560 .eraseblocks = { {1024 * 1024, 1} },
561 .block_erase = spi_block_erase_c7,
562 }
563 },
564 .unlock = spi_disable_blockprotect,
565 .write = spi_chip_write_256,
566 .read = spi_chip_read,
567 },
568
569 {
570 .vendor = "AMIC",
571 .name = "A25L16PT",
572 .bustype = CHIP_BUSTYPE_SPI,
573 .manufacture_id = AMIC_ID,
574 .model_id = AMIC_A25L16PT,
575 .total_size = 2048,
576 .page_size = 256,
577 .tested = TEST_UNTESTED,
578 .probe = probe_spi_rdid4,
579 .probe_timing = TIMING_ZERO,
580 .block_erasers =
581 {
582 {
583 .eraseblocks = {
584 {64 * 1024, 31},
585 {32 * 1024, 1},
586 {16 * 1024, 1},
587 {8 * 1024, 1},
588 {4 * 1024, 2},
589 },
590 .block_erase = spi_block_erase_d8,
591 }, {
592 .eraseblocks = { {2048 * 1024, 1} },
593 .block_erase = spi_block_erase_60,
594 }, {
595 .eraseblocks = { {2048 * 1024, 1} },
596 .block_erase = spi_block_erase_c7,
597 }
598 },
599 .unlock = spi_disable_blockprotect,
600 .write = spi_chip_write_256,
601 .read = spi_chip_read,
602 },
603
604 {
605 .vendor = "AMIC",
606 .name = "A25L16PU",
607 .bustype = CHIP_BUSTYPE_SPI,
608 .manufacture_id = AMIC_ID,
609 .model_id = AMIC_A25L16PU,
610 .total_size = 2048,
611 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800612 .tested = TEST_OK_PR,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700613 .probe = probe_spi_rdid4,
614 .probe_timing = TIMING_ZERO,
615 .block_erasers =
616 {
617 {
618 .eraseblocks = {
619 {4 * 1024, 2},
620 {8 * 1024, 1},
621 {16 * 1024, 1},
622 {32 * 1024, 1},
623 {64 * 1024, 31},
624 },
625 .block_erase = spi_block_erase_d8,
626 }, {
627 .eraseblocks = { {2048 * 1024, 1} },
628 .block_erase = spi_block_erase_60,
629 }, {
630 .eraseblocks = { {2048 * 1024, 1} },
631 .block_erase = spi_block_erase_c7,
632 }
633 },
634 .unlock = spi_disable_blockprotect,
635 .write = spi_chip_write_256,
636 .read = spi_chip_read,
637 },
638
639 {
640 .vendor = "AMIC",
641 .name = "A25L512",
642 .bustype = CHIP_BUSTYPE_SPI,
643 .manufacture_id = AMIC_ID_NOPREFIX,
644 .model_id = AMIC_A25L512,
645 .total_size = 64,
646 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800647 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700648 .tested = TEST_UNTESTED,
649 .probe = probe_spi_rdid,
650 .probe_timing = TIMING_ZERO,
651 .block_erasers =
652 {
653 {
654 .eraseblocks = { { 4 * 1024, 16 } },
655 .block_erase = spi_block_erase_20,
656 }, {
657 .eraseblocks = { { 64 * 1024, 1 } },
658 .block_erase = spi_block_erase_d8,
659 }, {
660 .eraseblocks = { { 64 * 1024, 1 } },
661 .block_erase = spi_block_erase_c7,
662 }
663 },
664 .unlock = spi_disable_blockprotect,
665 .write = spi_chip_write_256,
666 .read = spi_chip_read,
667 },
668
669 {
670 .vendor = "AMIC",
671 .name = "A25L010",
672 .bustype = CHIP_BUSTYPE_SPI,
673 .manufacture_id = AMIC_ID_NOPREFIX,
674 .model_id = AMIC_A25L010,
675 .total_size = 128,
676 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800677 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700678 .tested = TEST_UNTESTED,
679 .probe = probe_spi_rdid,
680 .probe_timing = TIMING_ZERO,
681 .block_erasers =
682 {
683 {
684 .eraseblocks = { { 4 * 1024, 32 } },
685 .block_erase = spi_block_erase_20,
686 }, {
687 .eraseblocks = { { 64 * 1024, 2 } },
688 .block_erase = spi_block_erase_d8,
689 }, {
690 .eraseblocks = { { 128 * 1024, 1 } },
691 .block_erase = spi_block_erase_c7,
692 }
693 },
694 .unlock = spi_disable_blockprotect,
695 .write = spi_chip_write_256,
696 .read = spi_chip_read,
697 },
698
699 {
700 .vendor = "AMIC",
701 .name = "A25L020",
702 .bustype = CHIP_BUSTYPE_SPI,
703 .manufacture_id = AMIC_ID_NOPREFIX,
704 .model_id = AMIC_A25L020,
705 .total_size = 256,
706 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800707 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700708 .tested = TEST_UNTESTED,
709 .probe = probe_spi_rdid,
710 .probe_timing = TIMING_ZERO,
711 .block_erasers =
712 {
713 {
714 .eraseblocks = { { 4 * 1024, 64 } },
715 .block_erase = spi_block_erase_20,
716 }, {
717 .eraseblocks = { { 64 * 1024, 4 } },
718 .block_erase = spi_block_erase_d8,
719 }, {
720 .eraseblocks = { { 256 * 1024, 1 } },
721 .block_erase = spi_block_erase_c7,
722 }
723 },
724 .unlock = spi_disable_blockprotect,
725 .write = spi_chip_write_256,
726 .read = spi_chip_read,
727 },
728
729 {
730 .vendor = "AMIC",
731 .name = "A25L040",
732 .bustype = CHIP_BUSTYPE_SPI,
733 .manufacture_id = AMIC_ID_NOPREFIX,
734 .model_id = AMIC_A25L040,
735 .total_size = 512,
736 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800737 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700738 .tested = TEST_UNTESTED,
739 .probe = probe_spi_rdid,
740 .probe_timing = TIMING_ZERO,
741 .block_erasers =
742 {
743 {
744 .eraseblocks = { { 4 * 1024, 128 } },
745 .block_erase = spi_block_erase_20,
746 }, {
747 .eraseblocks = { { 64 * 1024, 8 } },
748 .block_erase = spi_block_erase_d8,
749 }, {
750 .eraseblocks = { { 512 * 1024, 1 } },
751 .block_erase = spi_block_erase_c7,
752 }
753 },
754 .unlock = spi_disable_blockprotect,
755 .write = spi_chip_write_256,
756 .read = spi_chip_read,
757 },
758
759 {
760 .vendor = "AMIC",
761 .name = "A25L080",
762 .bustype = CHIP_BUSTYPE_SPI,
763 .manufacture_id = AMIC_ID_NOPREFIX,
764 .model_id = AMIC_A25L080,
765 .total_size = 1024,
766 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800767 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700768 .tested = TEST_UNTESTED,
769 .probe = probe_spi_rdid,
770 .probe_timing = TIMING_ZERO,
771 .block_erasers =
772 {
773 {
774 .eraseblocks = { { 4 * 1024, 256 } },
775 .block_erase = spi_block_erase_20,
776 }, {
777 .eraseblocks = { { 64 * 1024, 16 } },
778 .block_erase = spi_block_erase_d8,
779 }, {
780 .eraseblocks = { { 1024 * 1024, 1 } },
781 .block_erase = spi_block_erase_c7,
782 }
783 },
784 .unlock = spi_disable_blockprotect,
785 .write = spi_chip_write_256,
786 .read = spi_chip_read,
787 },
788
789 {
790 .vendor = "AMIC",
791 .name = "A25L016",
792 .bustype = CHIP_BUSTYPE_SPI,
793 .manufacture_id = AMIC_ID_NOPREFIX,
794 .model_id = AMIC_A25L016,
795 .total_size = 2048,
796 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800797 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700798 .tested = TEST_UNTESTED,
799 .probe = probe_spi_rdid,
800 .probe_timing = TIMING_ZERO,
801 .block_erasers =
802 {
803 {
804 .eraseblocks = { { 4 * 1024, 512 } },
805 .block_erase = spi_block_erase_20,
806 }, {
807 .eraseblocks = { { 64 * 1024, 32 } },
808 .block_erase = spi_block_erase_d8,
809 }, {
810 .eraseblocks = { { 2048 * 1024, 1 } },
811 .block_erase = spi_block_erase_c7,
812 }
813 },
814 .unlock = spi_disable_blockprotect,
815 .write = spi_chip_write_256,
816 .read = spi_chip_read,
817 },
818
819 {
820 .vendor = "AMIC",
821 .name = "A25L032",
822 .bustype = CHIP_BUSTYPE_SPI,
823 .manufacture_id = AMIC_ID_NOPREFIX,
824 .model_id = AMIC_A25L032,
825 .total_size = 4096,
826 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800827 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700828 .tested = TEST_UNTESTED,
829 .probe = probe_spi_rdid,
830 .probe_timing = TIMING_ZERO,
831 .block_erasers =
832 {
833 {
834 .eraseblocks = { { 4 * 1024, 1024 } },
835 .block_erase = spi_block_erase_20,
836 }, {
837 .eraseblocks = { { 64 * 1024, 64 } },
838 .block_erase = spi_block_erase_52,
839 }, {
840 .eraseblocks = { { 64 * 1024, 64 } },
841 .block_erase = spi_block_erase_d8,
842 }, {
843 .eraseblocks = { { 4096 * 1024, 1 } },
844 .block_erase = spi_block_erase_60,
845 }, {
846 .eraseblocks = { { 4096 * 1024, 1 } },
847 .block_erase = spi_block_erase_c7,
848 }
849 },
850 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
851 .write = spi_chip_write_256,
852 .read = spi_chip_read,
853 },
854
855 {
856 .vendor = "AMIC",
857 .name = "A25LQ032",
858 .bustype = CHIP_BUSTYPE_SPI,
859 .manufacture_id = AMIC_ID_NOPREFIX,
860 .model_id = AMIC_A25LQ032,
861 .total_size = 4096,
862 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -0800863 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700864 .tested = TEST_UNTESTED,
865 .probe = probe_spi_rdid,
866 .probe_timing = TIMING_ZERO,
867 .block_erasers =
868 {
869 {
870 .eraseblocks = { { 4 * 1024, 1024 } },
871 .block_erase = spi_block_erase_20,
872 }, {
873 .eraseblocks = { { 64 * 1024, 64 } },
874 .block_erase = spi_block_erase_52,
875 }, {
876 .eraseblocks = { { 64 * 1024, 64 } },
877 .block_erase = spi_block_erase_d8,
878 }, {
879 .eraseblocks = { { 4096 * 1024, 1 } },
880 .block_erase = spi_block_erase_60,
881 }, {
882 .eraseblocks = { { 4096 * 1024, 1 } },
883 .block_erase = spi_block_erase_c7,
884 }
885 },
886 .unlock = NULL, /* Two status reg bytes (read with 0x35 and 0x05) */
887 .write = spi_chip_write_256,
888 .read = spi_chip_read,
889 },
890
891 {
892 .vendor = "AMIC",
893 .name = "A29002B",
894 .bustype = CHIP_BUSTYPE_PARALLEL,
895 .manufacture_id = AMIC_ID_NOPREFIX,
896 .model_id = AMIC_A29002B,
897 .total_size = 256,
898 .page_size = 64 * 1024,
899 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
900 .tested = TEST_UNTESTED,
901 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -0800902 .probe_timing = TIMING_ZERO,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700903 .block_erasers =
904 {
905 {
906 .eraseblocks = {
907 {16 * 1024, 1},
908 {8 * 1024, 2},
909 {32 * 1024, 1},
910 {64 * 1024, 3},
911 },
912 .block_erase = erase_sector_jedec,
913 }, {
914 .eraseblocks = { {256 * 1024, 1} },
915 .block_erase = erase_chip_block_jedec,
916 },
917 },
918 .write = write_jedec_1,
919 .read = read_memmapped,
920 },
921
922 {
923 .vendor = "AMIC",
924 .name = "A29002T",
925 .bustype = CHIP_BUSTYPE_PARALLEL,
926 .manufacture_id = AMIC_ID_NOPREFIX,
927 .model_id = AMIC_A29002T,
928 .total_size = 256,
929 .page_size = 64 * 1024,
930 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -0800931 .tested = TEST_OK_PR,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700932 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -0800933 .probe_timing = TIMING_ZERO,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700934 .block_erasers =
935 {
936 {
937 .eraseblocks = {
938 {64 * 1024, 3},
939 {32 * 1024, 1},
940 {8 * 1024, 2},
941 {16 * 1024, 1},
942 },
943 .block_erase = erase_sector_jedec,
944 }, {
945 .eraseblocks = { {256 * 1024, 1} },
946 .block_erase = erase_chip_block_jedec,
947 },
948 },
949 .write = write_jedec_1,
950 .read = read_memmapped,
951 },
952
953 {
954 .vendor = "AMIC",
955 .name = "A29040B",
956 .bustype = CHIP_BUSTYPE_PARALLEL,
957 .manufacture_id = AMIC_ID_NOPREFIX,
958 .model_id = AMIC_A29040B,
959 .total_size = 512,
960 .page_size = 64 * 1024,
961 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
962 .tested = TEST_UNTESTED,
963 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -0800964 .probe_timing = TIMING_ZERO,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700965 .block_erasers =
966 {
967 {
968 .eraseblocks = { {64 * 1024, 8} },
969 .block_erase = erase_sector_jedec,
970 }, {
971 .eraseblocks = { {512 * 1024, 1} },
972 .block_erase = erase_chip_block_jedec,
973 },
974 },
975 .write = write_jedec_1,
976 .read = read_memmapped,
977 },
978
979 {
980 .vendor = "AMIC",
981 .name = "A49LF040A",
982 .bustype = CHIP_BUSTYPE_LPC,
983 .manufacture_id = AMIC_ID_NOPREFIX,
984 .model_id = AMIC_A49LF040A,
985 .total_size = 512,
986 .page_size = 64 * 1024,
987 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -0800988 .tested = TEST_OK_PRE,
David Hendricks82fd8ae2010-08-04 14:34:54 -0700989 .probe = probe_jedec,
990 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
991 .block_erasers =
992 {
993 {
994 .eraseblocks = { {64 * 1024, 8} },
995 .block_erase = erase_block_jedec,
996 }, {
997 .eraseblocks = { {512 * 1024, 1} },
998 .block_erase = erase_chip_block_jedec,
999 }
1000 },
1001 .unlock = unlock_49fl00x,
1002 .write = write_jedec_1,
1003 .read = read_memmapped,
1004 },
1005
1006 {
hailfinger286829b2009-01-08 03:40:17 +00001007 .vendor = "Atmel",
1008 .name = "AT25DF021",
hailfinger40167462009-05-31 17:57:34 +00001009 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001010 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001011 .model_id = ATMEL_AT25DF021,
hailfinger286829b2009-01-08 03:40:17 +00001012 .total_size = 256,
1013 .page_size = 256,
David Hendricks82fd8ae2010-08-04 14:34:54 -07001014 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001015 .tested = TEST_UNTESTED,
1016 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001017 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001018 .block_erasers =
1019 {
1020 {
1021 .eraseblocks = { {4 * 1024, 64} },
1022 .block_erase = spi_block_erase_20,
1023 }, {
1024 .eraseblocks = { {32 * 1024, 8} },
1025 .block_erase = spi_block_erase_52,
1026 }, {
1027 .eraseblocks = { {64 * 1024, 4} },
1028 .block_erase = spi_block_erase_d8,
1029 }, {
1030 .eraseblocks = { {256 * 1024, 1} },
1031 .block_erase = spi_block_erase_60,
1032 }, {
1033 .eraseblocks = { {256 * 1024, 1} },
1034 .block_erase = spi_block_erase_c7,
1035 }
1036 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001037 .printlock = spi_prettyprint_status_register_at25df,
1038 .unlock = spi_disable_blockprotect_at25df,
hailfinger87c05482009-05-09 02:34:18 +00001039 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001040 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001041 },
1042
hailfinger286829b2009-01-08 03:40:17 +00001043 {
1044 .vendor = "Atmel",
1045 .name = "AT25DF041A",
hailfinger40167462009-05-31 17:57:34 +00001046 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001047 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001048 .model_id = ATMEL_AT25DF041A,
hailfinger286829b2009-01-08 03:40:17 +00001049 .total_size = 512,
1050 .page_size = 256,
David Hendricks82fd8ae2010-08-04 14:34:54 -07001051 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001052 .tested = TEST_UNTESTED,
1053 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001054 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001055 .block_erasers =
1056 {
1057 {
1058 .eraseblocks = { {4 * 1024, 128} },
1059 .block_erase = spi_block_erase_20,
1060 }, {
1061 .eraseblocks = { {32 * 1024, 16} },
1062 .block_erase = spi_block_erase_52,
1063 }, {
1064 .eraseblocks = { {64 * 1024, 8} },
1065 .block_erase = spi_block_erase_d8,
1066 }, {
1067 .eraseblocks = { {512 * 1024, 1} },
1068 .block_erase = spi_block_erase_60,
1069 }, {
1070 .eraseblocks = { {512 * 1024, 1} },
1071 .block_erase = spi_block_erase_c7,
1072 }
1073 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001074 .printlock = spi_prettyprint_status_register_at25df,
1075 .unlock = spi_disable_blockprotect_at25df,
hailfinger87c05482009-05-09 02:34:18 +00001076 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001077 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001078 },
1079
hailfinger286829b2009-01-08 03:40:17 +00001080 {
1081 .vendor = "Atmel",
1082 .name = "AT25DF081",
hailfinger40167462009-05-31 17:57:34 +00001083 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001084 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001085 .model_id = ATMEL_AT25DF081,
hailfinger286829b2009-01-08 03:40:17 +00001086 .total_size = 1024,
1087 .page_size = 256,
David Hendricks82fd8ae2010-08-04 14:34:54 -07001088 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001089 .tested = TEST_UNTESTED,
1090 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001091 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001092 .block_erasers =
1093 {
1094 {
1095 .eraseblocks = { {4 * 1024, 256} },
1096 .block_erase = spi_block_erase_20,
1097 }, {
1098 .eraseblocks = { {32 * 1024, 32} },
1099 .block_erase = spi_block_erase_52,
1100 }, {
1101 .eraseblocks = { {64 * 1024, 16} },
1102 .block_erase = spi_block_erase_d8,
1103 }, {
1104 .eraseblocks = { {1024 * 1024, 1} },
1105 .block_erase = spi_block_erase_60,
1106 }, {
1107 .eraseblocks = { {1024 * 1024, 1} },
1108 .block_erase = spi_block_erase_c7,
1109 }
1110 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001111 .printlock = spi_prettyprint_status_register_at25df,
1112 .unlock = spi_disable_blockprotect_at25df,
1113 .write = spi_chip_write_256,
1114 .read = spi_chip_read,
1115 },
1116
1117 {
1118 .vendor = "Atmel",
1119 .name = "AT25DF081A",
1120 .bustype = CHIP_BUSTYPE_SPI,
1121 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001122 .model_id = ATMEL_AT25DF081A,
David Hendricks82fd8ae2010-08-04 14:34:54 -07001123 .total_size = 1024,
1124 .page_size = 256,
1125 .feature_bits = FEATURE_WRSR_WREN,
1126 .tested = TEST_UNTESTED,
1127 .probe = probe_spi_rdid,
1128 .probe_timing = TIMING_ZERO,
1129 .block_erasers =
1130 {
1131 {
1132 .eraseblocks = { {4 * 1024, 256} },
1133 .block_erase = spi_block_erase_20,
1134 }, {
1135 .eraseblocks = { {32 * 1024, 32} },
1136 .block_erase = spi_block_erase_52,
1137 }, {
1138 .eraseblocks = { {64 * 1024, 16} },
1139 .block_erase = spi_block_erase_d8,
1140 }, {
1141 .eraseblocks = { {1024 * 1024, 1} },
1142 .block_erase = spi_block_erase_60,
1143 }, {
1144 .eraseblocks = { {1024 * 1024, 1} },
1145 .block_erase = spi_block_erase_c7,
1146 }
1147 },
1148 .printlock = spi_prettyprint_status_register_at25df_sec,
1149 .unlock = spi_disable_blockprotect_at25df_sec,
hailfinger87c05482009-05-09 02:34:18 +00001150 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001151 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001152 },
1153
hailfinger286829b2009-01-08 03:40:17 +00001154 {
1155 .vendor = "Atmel",
1156 .name = "AT25DF161",
hailfinger40167462009-05-31 17:57:34 +00001157 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001158 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001159 .model_id = ATMEL_AT25DF161,
hailfinger286829b2009-01-08 03:40:17 +00001160 .total_size = 2048,
1161 .page_size = 256,
David Hendricks82fd8ae2010-08-04 14:34:54 -07001162 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001163 .tested = TEST_UNTESTED,
1164 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001165 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001166 .block_erasers =
1167 {
1168 {
1169 .eraseblocks = { {4 * 1024, 512} },
1170 .block_erase = spi_block_erase_20,
1171 }, {
1172 .eraseblocks = { {32 * 1024, 64} },
1173 .block_erase = spi_block_erase_52,
1174 }, {
1175 .eraseblocks = { {64 * 1024, 32} },
1176 .block_erase = spi_block_erase_d8,
1177 }, {
1178 .eraseblocks = { {2 * 1024 * 1024, 1} },
1179 .block_erase = spi_block_erase_60,
1180 }, {
1181 .eraseblocks = { {2 * 1024 * 1024, 1} },
1182 .block_erase = spi_block_erase_c7,
1183 }
1184 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001185 .printlock = spi_prettyprint_status_register_at25df_sec,
1186 .unlock = spi_disable_blockprotect_at25df_sec,
hailfinger87c05482009-05-09 02:34:18 +00001187 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001188 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001189 },
1190
hailfinger286829b2009-01-08 03:40:17 +00001191 {
1192 .vendor = "Atmel",
1193 .name = "AT25DF321",
hailfinger40167462009-05-31 17:57:34 +00001194 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001195 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001196 .model_id = ATMEL_AT25DF321,
hailfinger286829b2009-01-08 03:40:17 +00001197 .total_size = 4096,
1198 .page_size = 256,
David Hendricks82fd8ae2010-08-04 14:34:54 -07001199 .feature_bits = FEATURE_WRSR_WREN,
David Hendricksc801adb2010-12-09 16:58:56 -08001200 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00001201 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001202 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001203 .block_erasers =
1204 {
1205 {
1206 .eraseblocks = { {4 * 1024, 1024} },
1207 .block_erase = spi_block_erase_20,
1208 }, {
1209 .eraseblocks = { {32 * 1024, 128} },
1210 .block_erase = spi_block_erase_52,
1211 }, {
1212 .eraseblocks = { {64 * 1024, 64} },
1213 .block_erase = spi_block_erase_d8,
1214 }, {
1215 .eraseblocks = { {4 * 1024 * 1024, 1} },
1216 .block_erase = spi_block_erase_60,
1217 }, {
1218 .eraseblocks = { {4 * 1024 * 1024, 1} },
1219 .block_erase = spi_block_erase_c7,
1220 }
1221 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001222 .printlock = spi_prettyprint_status_register_at25df,
1223 .unlock = spi_disable_blockprotect_at25df,
hailfinger87c05482009-05-09 02:34:18 +00001224 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001225 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001226 },
1227
hailfinger286829b2009-01-08 03:40:17 +00001228 {
1229 .vendor = "Atmel",
1230 .name = "AT25DF321A",
hailfinger40167462009-05-31 17:57:34 +00001231 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001232 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001233 .model_id = ATMEL_AT25DF321A,
hailfinger286829b2009-01-08 03:40:17 +00001234 .total_size = 4096,
1235 .page_size = 256,
David Hendricks82fd8ae2010-08-04 14:34:54 -07001236 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001237 .tested = TEST_UNTESTED,
1238 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001239 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001240 .block_erasers =
1241 {
1242 {
1243 .eraseblocks = { {4 * 1024, 1024} },
1244 .block_erase = spi_block_erase_20,
1245 }, {
1246 .eraseblocks = { {32 * 1024, 128} },
1247 .block_erase = spi_block_erase_52,
1248 }, {
1249 .eraseblocks = { {64 * 1024, 64} },
1250 .block_erase = spi_block_erase_d8,
1251 }, {
1252 .eraseblocks = { {4 * 1024 * 1024, 1} },
1253 .block_erase = spi_block_erase_60,
1254 }, {
1255 .eraseblocks = { {4 * 1024 * 1024, 1} },
1256 .block_erase = spi_block_erase_c7,
1257 }
1258 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001259 .printlock = spi_prettyprint_status_register_at25df_sec,
1260 .unlock = spi_disable_blockprotect_at25df_sec,
hailfinger87c05482009-05-09 02:34:18 +00001261 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001262 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001263 },
1264
hailfinger286829b2009-01-08 03:40:17 +00001265 {
1266 .vendor = "Atmel",
1267 .name = "AT25DF641",
hailfinger40167462009-05-31 17:57:34 +00001268 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001269 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001270 .model_id = ATMEL_AT25DF641,
hailfinger286829b2009-01-08 03:40:17 +00001271 .total_size = 8192,
1272 .page_size = 256,
David Hendricks82fd8ae2010-08-04 14:34:54 -07001273 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001274 .tested = TEST_UNTESTED,
1275 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001276 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001277 .block_erasers =
1278 {
1279 {
1280 .eraseblocks = { {4 * 1024, 2048} },
1281 .block_erase = spi_block_erase_20,
1282 }, {
1283 .eraseblocks = { {32 * 1024, 256} },
1284 .block_erase = spi_block_erase_52,
1285 }, {
1286 .eraseblocks = { {64 * 1024, 128} },
1287 .block_erase = spi_block_erase_d8,
1288 }, {
1289 .eraseblocks = { {8 * 1024 * 1024, 1} },
1290 .block_erase = spi_block_erase_60,
1291 }, {
1292 .eraseblocks = { {8 * 1024 * 1024, 1} },
1293 .block_erase = spi_block_erase_c7,
1294 }
1295 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001296 .printlock = spi_prettyprint_status_register_at25df_sec,
1297 .unlock = spi_disable_blockprotect_at25df_sec,
1298 .write = spi_chip_write_256,
1299 .read = spi_chip_read,
1300 },
1301
1302 {
1303 .vendor = "Atmel",
1304 .name = "AT25DQ161",
1305 .bustype = CHIP_BUSTYPE_SPI,
1306 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001307 .model_id = ATMEL_AT25DQ161,
David Hendricks82fd8ae2010-08-04 14:34:54 -07001308 .total_size = 2048,
1309 .page_size = 256,
1310 .feature_bits = FEATURE_WRSR_WREN,
1311 .tested = TEST_UNTESTED,
1312 .probe = probe_spi_rdid,
1313 .probe_timing = TIMING_ZERO,
1314 .block_erasers =
1315 {
1316 {
1317 .eraseblocks = { {4 * 1024, 512} },
1318 .block_erase = spi_block_erase_20,
1319 }, {
1320 .eraseblocks = { {32 * 1024, 64} },
1321 .block_erase = spi_block_erase_52,
1322 }, {
1323 .eraseblocks = { {64 * 1024, 32} },
1324 .block_erase = spi_block_erase_d8,
1325 }, {
1326 .eraseblocks = { {2 * 1024 * 1024, 1} },
1327 .block_erase = spi_block_erase_60,
1328 }, {
1329 .eraseblocks = { {2 * 1024 * 1024, 1} },
1330 .block_erase = spi_block_erase_c7,
1331 }
1332 },
1333 .printlock = spi_prettyprint_status_register_at25df_sec,
1334 .unlock = spi_disable_blockprotect_at25df_sec,
hailfinger87c05482009-05-09 02:34:18 +00001335 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001336 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001337 },
1338
hailfinger286829b2009-01-08 03:40:17 +00001339 {
1340 .vendor = "Atmel",
1341 .name = "AT25F512B",
hailfinger40167462009-05-31 17:57:34 +00001342 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001343 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001344 .model_id = ATMEL_AT25F512B,
hailfinger286829b2009-01-08 03:40:17 +00001345 .total_size = 64,
1346 .page_size = 256,
David Hendricks82fd8ae2010-08-04 14:34:54 -07001347 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00001348 .tested = TEST_UNTESTED,
1349 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001350 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001351 .block_erasers =
1352 {
1353 {
1354 .eraseblocks = { {4 * 1024, 16} },
1355 .block_erase = spi_block_erase_20,
1356 }, {
1357 .eraseblocks = { {32 * 1024, 2} },
1358 .block_erase = spi_block_erase_52,
1359 }, {
1360 .eraseblocks = { {32 * 1024, 2} },
1361 .block_erase = spi_block_erase_d8,
1362 }, {
1363 .eraseblocks = { {64 * 1024, 1} },
1364 .block_erase = spi_block_erase_60,
1365 }, {
1366 .eraseblocks = { {64 * 1024, 1} },
1367 .block_erase = spi_block_erase_c7,
1368 }
1369 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001370 .printlock = spi_prettyprint_status_register_at25f,
1371 .unlock = spi_disable_blockprotect_at25f,
hailfinger87c05482009-05-09 02:34:18 +00001372 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001373 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001374 },
1375
hailfinger286829b2009-01-08 03:40:17 +00001376 {
1377 .vendor = "Atmel",
1378 .name = "AT25FS010",
hailfinger40167462009-05-31 17:57:34 +00001379 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001380 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001381 .model_id = ATMEL_AT25FS010,
hailfinger286829b2009-01-08 03:40:17 +00001382 .total_size = 128,
1383 .page_size = 256,
1384 .tested = TEST_UNTESTED,
1385 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001386 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001387 .block_erasers =
1388 {
1389 {
1390 .eraseblocks = { {4 * 1024, 32} },
1391 .block_erase = spi_block_erase_20,
1392 }, {
David Hendricks82fd8ae2010-08-04 14:34:54 -07001393 .eraseblocks = { {4 * 1024, 32} },
1394 .block_erase = spi_block_erase_d7,
1395 }, {
hailfinger22155a82009-12-23 12:02:55 +00001396 .eraseblocks = { {32 * 1024, 4} },
1397 .block_erase = spi_block_erase_52,
1398 }, {
1399 .eraseblocks = { {32 * 1024, 4} },
1400 .block_erase = spi_block_erase_d8,
1401 }, {
1402 .eraseblocks = { {128 * 1024, 1} },
1403 .block_erase = spi_block_erase_60,
1404 }, {
1405 .eraseblocks = { {128 * 1024, 1} },
1406 .block_erase = spi_block_erase_c7,
1407 }
1408 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001409 .printlock = spi_prettyprint_status_register_at25fs010,
1410 .unlock = spi_disable_blockprotect_at25fs010,
hailfinger87c05482009-05-09 02:34:18 +00001411 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001412 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001413 },
1414
hailfinger286829b2009-01-08 03:40:17 +00001415 {
1416 .vendor = "Atmel",
1417 .name = "AT25FS040",
hailfinger40167462009-05-31 17:57:34 +00001418 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001419 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001420 .model_id = ATMEL_AT25FS040,
hailfinger286829b2009-01-08 03:40:17 +00001421 .total_size = 512,
1422 .page_size = 256,
1423 .tested = TEST_UNTESTED,
1424 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001425 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001426 .block_erasers =
1427 {
1428 {
1429 .eraseblocks = { {4 * 1024, 128} },
1430 .block_erase = spi_block_erase_20,
1431 }, {
1432 .eraseblocks = { {64 * 1024, 8} },
1433 .block_erase = spi_block_erase_52,
1434 }, {
1435 .eraseblocks = { {64 * 1024, 8} },
1436 .block_erase = spi_block_erase_d8,
1437 }, {
1438 .eraseblocks = { {512 * 1024, 1} },
1439 .block_erase = spi_block_erase_60,
1440 }, {
1441 .eraseblocks = { {512 * 1024, 1} },
1442 .block_erase = spi_block_erase_c7,
1443 }
1444 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001445 .printlock = spi_prettyprint_status_register_at25fs040,
1446 .unlock = spi_disable_blockprotect_at25fs040,
hailfinger87c05482009-05-09 02:34:18 +00001447 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001448 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001449 },
1450
hailfinger286829b2009-01-08 03:40:17 +00001451 {
1452 .vendor = "Atmel",
1453 .name = "AT26DF041",
hailfinger40167462009-05-31 17:57:34 +00001454 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001455 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001456 .model_id = ATMEL_AT26DF041,
hailfinger286829b2009-01-08 03:40:17 +00001457 .total_size = 512,
1458 .page_size = 256,
1459 .tested = TEST_UNTESTED,
1460 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001461 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001462 .block_erasers =
1463 {
1464 {
1465 .eraseblocks = { {4 * 1024, 128} },
1466 .block_erase = spi_block_erase_20,
1467 }
1468 },
hailfinger286829b2009-01-08 03:40:17 +00001469 .write = NULL /* Incompatible Page write */,
1470 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001471 },
1472
hailfinger286829b2009-01-08 03:40:17 +00001473 {
1474 .vendor = "Atmel",
1475 .name = "AT26DF081A",
hailfinger40167462009-05-31 17:57:34 +00001476 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001477 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001478 .model_id = ATMEL_AT26DF081A,
hailfinger286829b2009-01-08 03:40:17 +00001479 .total_size = 1024,
1480 .page_size = 256,
David Hendricks668f29d2011-01-27 18:51:45 -08001481 .feature_bits = FEATURE_WRSR_WREN,
1482 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00001483 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001484 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001485 .block_erasers =
1486 {
1487 {
1488 .eraseblocks = { {4 * 1024, 256} },
1489 .block_erase = spi_block_erase_20,
1490 }, {
1491 .eraseblocks = { {32 * 1024, 32} },
1492 .block_erase = spi_block_erase_52,
1493 }, {
1494 .eraseblocks = { {64 * 1024, 16} },
1495 .block_erase = spi_block_erase_d8,
1496 }, {
1497 .eraseblocks = { {1024 * 1024, 1} },
1498 .block_erase = spi_block_erase_60,
1499 }, {
1500 .eraseblocks = { {1024 * 1024, 1} },
1501 .block_erase = spi_block_erase_c7,
1502 }
1503 },
David Hendricks668f29d2011-01-27 18:51:45 -08001504 .unlock = spi_disable_blockprotect_at25df,
hailfinger87c05482009-05-09 02:34:18 +00001505 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001506 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001507 },
1508
hailfinger286829b2009-01-08 03:40:17 +00001509 {
1510 .vendor = "Atmel",
1511 .name = "AT26DF161",
hailfinger40167462009-05-31 17:57:34 +00001512 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001513 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001514 .model_id = ATMEL_AT26DF161,
hailfinger286829b2009-01-08 03:40:17 +00001515 .total_size = 2048,
1516 .page_size = 256,
1517 .tested = TEST_UNTESTED,
1518 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001519 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001520 .block_erasers =
1521 {
1522 {
1523 .eraseblocks = { {4 * 1024, 512} },
1524 .block_erase = spi_block_erase_20,
1525 }, {
1526 .eraseblocks = { {32 * 1024, 64} },
1527 .block_erase = spi_block_erase_52,
1528 }, {
1529 .eraseblocks = { {64 * 1024, 32} },
1530 .block_erase = spi_block_erase_d8,
1531 }, {
1532 .eraseblocks = { {2 * 1024 * 1024, 1} },
1533 .block_erase = spi_block_erase_60,
1534 }, {
1535 .eraseblocks = { {2 * 1024 * 1024, 1} },
1536 .block_erase = spi_block_erase_c7,
1537 }
1538 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001539 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00001540 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001541 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001542 },
1543
hailfinger286829b2009-01-08 03:40:17 +00001544 {
1545 .vendor = "Atmel",
1546 .name = "AT26DF161A",
hailfinger40167462009-05-31 17:57:34 +00001547 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001548 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001549 .model_id = ATMEL_AT26DF161A,
hailfinger286829b2009-01-08 03:40:17 +00001550 .total_size = 2048,
1551 .page_size = 256,
1552 .tested = TEST_UNTESTED,
1553 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001554 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001555 .block_erasers =
1556 {
1557 {
1558 .eraseblocks = { {4 * 1024, 512} },
1559 .block_erase = spi_block_erase_20,
1560 }, {
1561 .eraseblocks = { {32 * 1024, 64} },
1562 .block_erase = spi_block_erase_52,
1563 }, {
1564 .eraseblocks = { {64 * 1024, 32} },
1565 .block_erase = spi_block_erase_d8,
1566 }, {
1567 .eraseblocks = { {2 * 1024 * 1024, 1} },
1568 .block_erase = spi_block_erase_60,
1569 }, {
1570 .eraseblocks = { {2 * 1024 * 1024, 1} },
1571 .block_erase = spi_block_erase_c7,
1572 }
1573 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07001574 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00001575 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001576 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001577 },
1578
1579 /*The AT26DF321 has the same ID as the AT25DF321. */
hailfinger286829b2009-01-08 03:40:17 +00001580 /*{
1581 .vendor = "Atmel",
1582 .name = "AT26DF321",
hailfinger40167462009-05-31 17:57:34 +00001583 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001584 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001585 .model_id = ATMEL_AT26DF321,
hailfinger286829b2009-01-08 03:40:17 +00001586 .total_size = 4096,
1587 .page_size = 256,
1588 .tested = TEST_UNTESTED,
1589 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001590 .probe_timing = TIMING_ZERO,
David Hendricks82fd8ae2010-08-04 14:34:54 -07001591 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00001592 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00001593 .read = spi_chip_read,
1594 },*/
stepanaa1b6a22008-12-08 18:15:10 +00001595
hailfinger286829b2009-01-08 03:40:17 +00001596 {
1597 .vendor = "Atmel",
1598 .name = "AT26F004",
hailfinger40167462009-05-31 17:57:34 +00001599 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001600 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001601 .model_id = ATMEL_AT26F004,
hailfinger286829b2009-01-08 03:40:17 +00001602 .total_size = 512,
1603 .page_size = 256,
1604 .tested = TEST_UNTESTED,
1605 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001606 .probe_timing = TIMING_ZERO,
hailfinger22155a82009-12-23 12:02:55 +00001607 .block_erasers =
1608 {
1609 {
1610 .eraseblocks = { {4 * 1024, 128} },
1611 .block_erase = spi_block_erase_20,
1612 }, {
1613 .eraseblocks = { {32 * 1024, 16} },
1614 .block_erase = spi_block_erase_52,
1615 }, {
1616 .eraseblocks = { {64 * 1024, 8} },
1617 .block_erase = spi_block_erase_d8,
1618 }, {
1619 .eraseblocks = { {512 * 1024, 1} },
1620 .block_erase = spi_block_erase_60,
1621 }, {
1622 .eraseblocks = { {512 * 1024, 1} },
1623 .block_erase = spi_block_erase_c7,
1624 }
1625 },
hailfinger286829b2009-01-08 03:40:17 +00001626 .write = NULL /* Incompatible Page write */,
1627 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00001628 },
1629
hailfinger286829b2009-01-08 03:40:17 +00001630 {
1631 .vendor = "Atmel",
uwed75c4f52009-06-02 16:45:59 +00001632 .name = "AT29C512",
hailfingera5245512009-06-28 19:19:25 +00001633 .bustype = CHIP_BUSTYPE_PARALLEL,
uwed75c4f52009-06-02 16:45:59 +00001634 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001635 .model_id = ATMEL_AT29C512,
uwed75c4f52009-06-02 16:45:59 +00001636 .total_size = 64,
1637 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00001638 .feature_bits = FEATURE_LONG_RESET,
1639 .tested = TEST_UNTESTED,
hailfingerafac00e2010-01-09 02:24:17 +00001640 .probe = probe_jedec,
hailfingerd5b35922009-06-03 14:46:22 +00001641 .probe_timing = 10000, /* 10mS, Enter=Exec */
hailfinger22155a82009-12-23 12:02:55 +00001642 .block_erasers =
1643 {
1644 {
1645 .eraseblocks = { {64 * 1024, 1} },
1646 .block_erase = erase_chip_block_jedec,
1647 }
1648 },
uwed75c4f52009-06-02 16:45:59 +00001649 .write = write_jedec,
1650 .read = read_memmapped,
1651
1652 },
1653
1654 {
1655 .vendor = "Atmel",
uweb3a82ef2009-05-16 21:39:19 +00001656 .name = "AT29C010A",
hailfingerdaecf7e2009-06-05 08:47:37 +00001657 .bustype = CHIP_BUSTYPE_PARALLEL,
uweb3a82ef2009-05-16 21:39:19 +00001658 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001659 .model_id = ATMEL_AT29C010A,
uweb3a82ef2009-05-16 21:39:19 +00001660 .total_size = 128,
1661 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00001662 .feature_bits = FEATURE_LONG_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08001663 .tested = TEST_OK_PRE,
uweb3a82ef2009-05-16 21:39:19 +00001664 .probe = probe_jedec,
hailfingerd5b35922009-06-03 14:46:22 +00001665 .probe_timing = 10000, /* 10mS, Enter=Exec */
hailfinger22155a82009-12-23 12:02:55 +00001666 .block_erasers =
1667 {
1668 {
1669 .eraseblocks = { {128 * 1024, 1} },
1670 .block_erase = erase_chip_block_jedec,
1671 }
1672 },
uweb3a82ef2009-05-16 21:39:19 +00001673 .write = write_jedec, /* FIXME */
1674 .read = read_memmapped,
1675 },
1676
1677 {
1678 .vendor = "Atmel",
hailfinger286829b2009-01-08 03:40:17 +00001679 .name = "AT29C020",
hailfingerdaecf7e2009-06-05 08:47:37 +00001680 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00001681 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001682 .model_id = ATMEL_AT29C020,
hailfinger286829b2009-01-08 03:40:17 +00001683 .total_size = 256,
1684 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00001685 .feature_bits = FEATURE_LONG_RESET,
1686 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00001687 .probe = probe_jedec,
David Hendricksc801adb2010-12-09 16:58:56 -08001688 .probe_timing = 10000, /* 10ms */
hailfinger22155a82009-12-23 12:02:55 +00001689 .block_erasers =
1690 {
1691 {
1692 .eraseblocks = { {256 * 1024, 1} },
1693 .block_erase = erase_chip_block_jedec,
1694 }
1695 },
hailfinger286829b2009-01-08 03:40:17 +00001696 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00001697 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00001698 },
1699
hailfinger286829b2009-01-08 03:40:17 +00001700 {
1701 .vendor = "Atmel",
1702 .name = "AT29C040A",
hailfingerdaecf7e2009-06-05 08:47:37 +00001703 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00001704 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001705 .model_id = ATMEL_AT29C040A,
hailfinger286829b2009-01-08 03:40:17 +00001706 .total_size = 512,
1707 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00001708 .feature_bits = FEATURE_LONG_RESET,
hailfinger286829b2009-01-08 03:40:17 +00001709 .tested = TEST_UNTESTED,
1710 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00001711 .probe_timing = 10000, /* 10 ms */
hailfinger22155a82009-12-23 12:02:55 +00001712 .block_erasers =
1713 {
1714 {
1715 .eraseblocks = { {512 * 1024, 1} },
1716 .block_erase = erase_chip_block_jedec,
1717 }
1718 },
hailfinger286829b2009-01-08 03:40:17 +00001719 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00001720 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00001721 },
1722
hailfinger286829b2009-01-08 03:40:17 +00001723 {
1724 .vendor = "Atmel",
1725 .name = "AT45CS1282",
hailfinger40167462009-05-31 17:57:34 +00001726 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001727 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001728 .model_id = ATMEL_AT45CS1282,
hailfingerf60abdb2009-03-19 12:18:13 +00001729 .total_size = 16896 /* No power of two sizes */,
1730 .page_size = 1056 /* No power of two sizes */,
hailfinger286829b2009-01-08 03:40:17 +00001731 .tested = TEST_BAD_READ,
1732 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001733 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00001734 .write = NULL /* Incompatible Page write */,
1735 .read = NULL /* Incompatible read */,
hailfingerf60abdb2009-03-19 12:18:13 +00001736 },
stepanaa1b6a22008-12-08 18:15:10 +00001737
hailfinger286829b2009-01-08 03:40:17 +00001738 {
1739 .vendor = "Atmel",
1740 .name = "AT45DB011D",
hailfinger40167462009-05-31 17:57:34 +00001741 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001742 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001743 .model_id = ATMEL_AT45DB011D,
hailfingerf60abdb2009-03-19 12:18:13 +00001744 .total_size = 128 /* Size can only be determined from status register */,
1745 .page_size = 256 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00001746 .tested = TEST_BAD_READ,
1747 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001748 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00001749 .write = NULL,
1750 .read = NULL,
hailfingerf60abdb2009-03-19 12:18:13 +00001751 },
stepanaa1b6a22008-12-08 18:15:10 +00001752
hailfinger286829b2009-01-08 03:40:17 +00001753 {
1754 .vendor = "Atmel",
1755 .name = "AT45DB021D",
hailfinger40167462009-05-31 17:57:34 +00001756 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001757 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001758 .model_id = ATMEL_AT45DB021D,
hailfingerf60abdb2009-03-19 12:18:13 +00001759 .total_size = 256 /* Size can only be determined from status register */,
1760 .page_size = 256 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00001761 .tested = TEST_BAD_READ,
1762 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001763 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00001764 .write = NULL,
1765 .read = NULL,
hailfingerf60abdb2009-03-19 12:18:13 +00001766 },
stepanaa1b6a22008-12-08 18:15:10 +00001767
hailfinger286829b2009-01-08 03:40:17 +00001768 {
1769 .vendor = "Atmel",
1770 .name = "AT45DB041D",
hailfinger40167462009-05-31 17:57:34 +00001771 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001772 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001773 .model_id = ATMEL_AT45DB041D,
hailfingerf60abdb2009-03-19 12:18:13 +00001774 .total_size = 512 /* Size can only be determined from status register */,
1775 .page_size = 256 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00001776 .tested = TEST_BAD_READ,
1777 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001778 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00001779 .write = NULL,
1780 .read = NULL,
hailfingerf60abdb2009-03-19 12:18:13 +00001781 },
stepanaa1b6a22008-12-08 18:15:10 +00001782
hailfinger286829b2009-01-08 03:40:17 +00001783 {
1784 .vendor = "Atmel",
1785 .name = "AT45DB081D",
hailfinger40167462009-05-31 17:57:34 +00001786 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001787 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001788 .model_id = ATMEL_AT45DB081D,
hailfingerf60abdb2009-03-19 12:18:13 +00001789 .total_size = 1024 /* Size can only be determined from status register */,
1790 .page_size = 256 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00001791 .tested = TEST_BAD_READ,
1792 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001793 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00001794 .write = NULL,
1795 .read = NULL,
hailfingerf60abdb2009-03-19 12:18:13 +00001796 },
stepanaa1b6a22008-12-08 18:15:10 +00001797
hailfinger286829b2009-01-08 03:40:17 +00001798 {
1799 .vendor = "Atmel",
1800 .name = "AT45DB161D",
hailfinger40167462009-05-31 17:57:34 +00001801 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001802 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001803 .model_id = ATMEL_AT45DB161D,
hailfingerf60abdb2009-03-19 12:18:13 +00001804 .total_size = 2048 /* Size can only be determined from status register */,
1805 .page_size = 512 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00001806 .tested = TEST_BAD_READ,
1807 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001808 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00001809 .write = NULL,
1810 .read = NULL,
hailfingerf60abdb2009-03-19 12:18:13 +00001811 },
stepanaa1b6a22008-12-08 18:15:10 +00001812
hailfinger286829b2009-01-08 03:40:17 +00001813 {
1814 .vendor = "Atmel",
1815 .name = "AT45DB321C",
hailfinger40167462009-05-31 17:57:34 +00001816 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001817 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001818 .model_id = ATMEL_AT45DB321C,
hailfingerf60abdb2009-03-19 12:18:13 +00001819 .total_size = 4224 /* No power of two sizes */,
1820 .page_size = 528 /* No power of two sizes */,
hailfinger286829b2009-01-08 03:40:17 +00001821 .tested = TEST_BAD_READ,
1822 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001823 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00001824 .write = NULL,
1825 .read = NULL /* Incompatible read */,
hailfingerf60abdb2009-03-19 12:18:13 +00001826 },
stepanaa1b6a22008-12-08 18:15:10 +00001827
hailfinger286829b2009-01-08 03:40:17 +00001828 {
1829 .vendor = "Atmel",
1830 .name = "AT45DB321D",
hailfinger40167462009-05-31 17:57:34 +00001831 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001832 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001833 .model_id = ATMEL_AT45DB321D,
hailfingerf60abdb2009-03-19 12:18:13 +00001834 .total_size = 4096 /* Size can only be determined from status register */,
1835 .page_size = 512 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00001836 .tested = TEST_BAD_READ,
1837 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001838 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00001839 .write = NULL,
1840 .read = NULL,
hailfingerf60abdb2009-03-19 12:18:13 +00001841 },
stepanaa1b6a22008-12-08 18:15:10 +00001842
hailfinger286829b2009-01-08 03:40:17 +00001843 {
1844 .vendor = "Atmel",
1845 .name = "AT45DB642D",
hailfinger40167462009-05-31 17:57:34 +00001846 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00001847 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001848 .model_id = ATMEL_AT45DB642D,
hailfingerf60abdb2009-03-19 12:18:13 +00001849 .total_size = 8192 /* Size can only be determined from status register */,
1850 .page_size = 1024 /* Size can only be determined from status register */,
hailfinger286829b2009-01-08 03:40:17 +00001851 .tested = TEST_BAD_READ,
1852 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00001853 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00001854 .write = NULL,
1855 .read = NULL,
hailfingerf60abdb2009-03-19 12:18:13 +00001856 },
stepanaa1b6a22008-12-08 18:15:10 +00001857
hailfinger286829b2009-01-08 03:40:17 +00001858 {
1859 .vendor = "Atmel",
uwe0f5a3a22009-05-13 11:36:06 +00001860 .name = "AT49BV512",
hailfingerdaecf7e2009-06-05 08:47:37 +00001861 .bustype = CHIP_BUSTYPE_PARALLEL,
uwe0f5a3a22009-05-13 11:36:06 +00001862 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001863 .model_id = ATMEL_AT49BV512,
uwe0f5a3a22009-05-13 11:36:06 +00001864 .total_size = 64,
1865 .page_size = 64,
snelsonc6855342010-01-28 23:55:12 +00001866 .feature_bits = FEATURE_EITHER_RESET,
1867 .tested = TEST_UNTESTED,
uwe0f5a3a22009-05-13 11:36:06 +00001868 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00001869 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
hailfinger22155a82009-12-23 12:02:55 +00001870 .block_erasers =
1871 {
1872 {
1873 .eraseblocks = { {64 * 1024, 1} },
1874 .block_erase = erase_chip_block_jedec,
1875 }
1876 },
snelsonc6855342010-01-28 23:55:12 +00001877 .write = write_jedec_1,
uwe0f5a3a22009-05-13 11:36:06 +00001878 .read = read_memmapped,
1879 },
1880
1881 {
1882 .vendor = "Atmel",
hailfinger93f8ce22010-06-07 14:10:55 +00001883 .name = "AT49F020",
1884 .bustype = CHIP_BUSTYPE_PARALLEL,
1885 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001886 .model_id = ATMEL_AT49F020,
hailfinger93f8ce22010-06-07 14:10:55 +00001887 .total_size = 256,
1888 .page_size = 256,
1889 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08001890 .tested = TEST_OK_PRE,
hailfinger93f8ce22010-06-07 14:10:55 +00001891 .probe = probe_jedec,
1892 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
1893 .block_erasers =
1894 {
1895 {
1896 .eraseblocks = { {256 * 1024, 1} },
1897 .block_erase = erase_chip_block_jedec,
1898 }
1899 },
1900 .write = write_jedec_1,
1901 .read = read_memmapped,
1902 },
1903
1904 {
1905 .vendor = "Atmel",
hailfinger286829b2009-01-08 03:40:17 +00001906 .name = "AT49F002(N)",
hailfingerdaecf7e2009-06-05 08:47:37 +00001907 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00001908 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001909 .model_id = ATMEL_AT49F002N,
hailfinger286829b2009-01-08 03:40:17 +00001910 .total_size = 256,
1911 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00001912 .feature_bits = FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00001913 .tested = TEST_UNTESTED,
1914 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00001915 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
hailfinger22155a82009-12-23 12:02:55 +00001916 .block_erasers =
1917 {
1918 {
1919 .eraseblocks = {
1920 {16 * 1024, 1},
1921 {8 * 1024, 2},
1922 {96 * 1024, 1},
1923 {128 * 1024, 1},
1924 },
1925 .block_erase = erase_sector_jedec,
1926 }, {
1927 .eraseblocks = { {256 * 1024, 1} },
1928 .block_erase = erase_chip_block_jedec,
1929 }
1930 },
snelsonc6855342010-01-28 23:55:12 +00001931 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00001932 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00001933 },
1934
hailfinger286829b2009-01-08 03:40:17 +00001935 {
1936 .vendor = "Atmel",
1937 .name = "AT49F002(N)T",
hailfingerdaecf7e2009-06-05 08:47:37 +00001938 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00001939 .manufacture_id = ATMEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08001940 .model_id = ATMEL_AT49F002NT,
hailfinger286829b2009-01-08 03:40:17 +00001941 .total_size = 256,
1942 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00001943 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08001944 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00001945 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00001946 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
hailfinger22155a82009-12-23 12:02:55 +00001947 .block_erasers =
1948 {
1949 {
1950 .eraseblocks = {
1951 {128 * 1024, 1},
1952 {96 * 1024, 1},
1953 {8 * 1024, 2},
1954 {16 * 1024, 1},
1955 },
1956 .block_erase = erase_sector_jedec,
1957 }, {
1958 .eraseblocks = { {256 * 1024, 1} },
1959 .block_erase = erase_chip_block_jedec,
1960 }
1961 },
snelsonc6855342010-01-28 23:55:12 +00001962 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00001963 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00001964 },
1965
hailfinger286829b2009-01-08 03:40:17 +00001966 {
David Hendricksc801adb2010-12-09 16:58:56 -08001967 .vendor = "Bright",
1968 .name = "BM29F040",
1969 .bustype = CHIP_BUSTYPE_PARALLEL,
1970 .manufacture_id = BRIGHT_ID,
1971 .model_id = BRIGHT_BM29F040,
1972 .total_size = 512,
1973 .page_size = 64 * 1024,
1974 .feature_bits = FEATURE_EITHER_RESET,
1975 .tested = TEST_OK_PR,
1976 .probe = probe_jedec,
1977 .probe_timing = TIMING_ZERO,
1978 .block_erasers =
1979 {
1980 {
1981 .eraseblocks = { {64 * 1024, 8} },
1982 .block_erase = erase_sector_jedec,
1983 }, {
1984 .eraseblocks = { {512 * 1024, 1} },
1985 .block_erase = erase_chip_block_jedec,
1986 },
1987 },
1988 .write = write_jedec_1,
1989 .read = read_memmapped,
1990 },
1991
1992 {
hailfinger286829b2009-01-08 03:40:17 +00001993 .vendor = "EMST",
1994 .name = "F49B002UA",
hailfingerdaecf7e2009-06-05 08:47:37 +00001995 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00001996 .manufacture_id = EMST_ID,
1997 .model_id = EMST_F49B002UA,
1998 .total_size = 256,
1999 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00002000 .feature_bits = FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00002001 .tested = TEST_UNTESTED,
2002 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00002003 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson2d471072010-01-09 05:30:14 +00002004 .block_erasers =
2005 {
2006 {
2007 .eraseblocks = {
2008 {128 * 1024, 1},
2009 {96 * 1024, 1},
2010 {8 * 1024, 2},
2011 {16 * 1024, 1},
2012 },
2013 .block_erase = erase_sector_jedec,
2014 }, {
2015 .eraseblocks = { {256 * 1024, 1} },
2016 .block_erase = erase_chip_block_jedec,
2017 }
2018 },
snelsonc6855342010-01-28 23:55:12 +00002019 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00002020 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00002021 },
2022
hailfinger286829b2009-01-08 03:40:17 +00002023 {
mkarcherf6986732010-06-19 22:06:35 +00002024 .vendor = "EMST",
2025 .name = "F25L008A",
2026 .bustype = CHIP_BUSTYPE_SPI,
2027 .manufacture_id = EMST_ID,
2028 .model_id = EMST_F25L008A,
2029 .total_size = 1024,
2030 .page_size = 256,
2031 .tested = TEST_UNTESTED,
2032 .probe = probe_spi_rdid,
2033 .probe_timing = TIMING_ZERO,
2034 .block_erasers =
2035 {
2036 {
2037 .eraseblocks = { {4 * 1024, 256} },
2038 .block_erase = spi_block_erase_20,
2039 }, {
2040 .eraseblocks = { {64 * 1024, 16} },
2041 .block_erase = spi_block_erase_d8,
2042 }, {
2043 .eraseblocks = { {1024 * 1024, 1} },
2044 .block_erase = spi_block_erase_60,
2045 }, {
2046 .eraseblocks = { {1024 * 1024, 1} },
2047 .block_erase = spi_block_erase_c7,
2048 }
2049 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002050 .unlock = spi_disable_blockprotect,
2051 .write = spi_chip_write_1,
2052 .read = spi_chip_read,
mkarcherf6986732010-06-19 22:06:35 +00002053 },
2054
2055 {
hailfingerab07cbd2009-06-05 20:53:07 +00002056 .vendor = "Eon",
2057 .name = "EN25B05",
2058 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002059 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002060 .model_id = EON_EN25B05,
hailfingerab07cbd2009-06-05 20:53:07 +00002061 .total_size = 64,
2062 .page_size = 256,
2063 .tested = TEST_UNTESTED,
2064 .probe = probe_spi_rdid,
2065 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002066 .block_erasers =
2067 {
2068 {
2069 .eraseblocks = {
2070 {4 * 1024, 2},
2071 {8 * 1024, 1},
2072 {16 * 1024, 1},
2073 {32 * 1024, 1},
2074 },
2075 .block_erase = spi_block_erase_d8,
2076 }, {
2077 .eraseblocks = { {64 * 1024, 1} },
2078 .block_erase = spi_block_erase_c7,
2079 }
2080 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002081 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002082 .write = spi_chip_write_256,
2083 .read = spi_chip_read,
2084 },
2085
2086 {
2087 .vendor = "Eon",
2088 .name = "EN25B05T",
2089 .bustype = CHIP_BUSTYPE_SPI,
2090 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002091 .model_id = EON_EN25B05,
snelson2d471072010-01-09 05:30:14 +00002092 .total_size = 64,
2093 .page_size = 256,
2094 .tested = TEST_UNTESTED,
2095 .probe = probe_spi_rdid,
2096 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002097 .block_erasers =
2098 {
2099 {
2100 .eraseblocks = {
2101 {32 * 1024, 1},
2102 {16 * 1024, 1},
2103 {8 * 1024, 1},
2104 {4 * 1024, 2},
2105 },
2106 .block_erase = spi_block_erase_d8,
2107 }, {
2108 .eraseblocks = { {64 * 1024, 1} },
2109 .block_erase = spi_block_erase_c7,
2110 }
2111 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002112 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002113 .write = spi_chip_write_256,
2114 .read = spi_chip_read,
2115 },
2116
2117 {
2118 .vendor = "Eon",
2119 .name = "EN25B10",
2120 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002121 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002122 .model_id = EON_EN25B10,
hailfingerab07cbd2009-06-05 20:53:07 +00002123 .total_size = 128,
2124 .page_size = 256,
2125 .tested = TEST_UNTESTED,
2126 .probe = probe_spi_rdid,
2127 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002128 .block_erasers =
2129 {
2130 {
2131 .eraseblocks = {
2132 {4 * 1024, 2},
2133 {8 * 1024, 1},
2134 {16 * 1024, 1},
2135 {32 * 1024, 3},
2136 },
2137 .block_erase = spi_block_erase_d8,
2138 }, {
2139 .eraseblocks = { {128 * 1024, 1} },
2140 .block_erase = spi_block_erase_c7,
2141 }
2142 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002143 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002144 .write = spi_chip_write_256,
2145 .read = spi_chip_read,
2146 },
2147
2148 {
2149 .vendor = "Eon",
2150 .name = "EN25B10T",
2151 .bustype = CHIP_BUSTYPE_SPI,
2152 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002153 .model_id = EON_EN25B10,
snelson2d471072010-01-09 05:30:14 +00002154 .total_size = 128,
2155 .page_size = 256,
2156 .tested = TEST_UNTESTED,
2157 .probe = probe_spi_rdid,
2158 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002159 .block_erasers =
2160 {
2161 {
2162 .eraseblocks = {
2163 {32 * 1024, 3},
2164 {16 * 1024, 1},
2165 {8 * 1024, 1},
2166 {4 * 1024, 2},
2167 },
2168 .block_erase = spi_block_erase_d8,
2169 }, {
2170 .eraseblocks = { {128 * 1024, 1} },
2171 .block_erase = spi_block_erase_c7,
2172 }
2173 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002174 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002175 .write = spi_chip_write_256,
2176 .read = spi_chip_read,
2177 },
2178
2179 {
2180 .vendor = "Eon",
2181 .name = "EN25B20",
2182 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002183 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002184 .model_id = EON_EN25B20,
hailfingerab07cbd2009-06-05 20:53:07 +00002185 .total_size = 256,
2186 .page_size = 256,
2187 .tested = TEST_UNTESTED,
2188 .probe = probe_spi_rdid,
2189 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002190 .block_erasers =
2191 {
2192 {
2193 .eraseblocks = {
2194 {4 * 1024, 2},
2195 {8 * 1024, 1},
2196 {16 * 1024, 1},
2197 {32 * 1024, 1},
2198 {64 * 1024, 3}
2199 },
2200 .block_erase = spi_block_erase_d8,
2201 }, {
2202 .eraseblocks = { {256 * 1024, 1} },
2203 .block_erase = spi_block_erase_c7,
2204 }
2205 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002206 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002207 .write = spi_chip_write_256,
2208 .read = spi_chip_read,
2209 },
2210
2211 {
2212 .vendor = "Eon",
2213 .name = "EN25B20T",
2214 .bustype = CHIP_BUSTYPE_SPI,
2215 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002216 .model_id = EON_EN25B20,
snelson2d471072010-01-09 05:30:14 +00002217 .total_size = 256,
2218 .page_size = 256,
2219 .tested = TEST_UNTESTED,
2220 .probe = probe_spi_rdid,
2221 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002222 .block_erasers =
2223 {
2224 {
2225 .eraseblocks = {
2226 {64 * 1024, 3},
2227 {32 * 1024, 1},
2228 {16 * 1024, 1},
2229 {8 * 1024, 1},
2230 {4 * 1024, 2},
2231 },
2232 .block_erase = spi_block_erase_d8,
2233 }, {
2234 .eraseblocks = { {256 * 1024, 1} },
2235 .block_erase = spi_block_erase_c7,
2236 }
2237 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002238 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002239 .write = spi_chip_write_256,
2240 .read = spi_chip_read,
2241 },
2242
2243 {
2244 .vendor = "Eon",
2245 .name = "EN25B40",
2246 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002247 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002248 .model_id = EON_EN25B40,
hailfingerab07cbd2009-06-05 20:53:07 +00002249 .total_size = 512,
2250 .page_size = 256,
2251 .tested = TEST_UNTESTED,
2252 .probe = probe_spi_rdid,
2253 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002254 .block_erasers =
2255 {
2256 {
2257 .eraseblocks = {
2258 {4 * 1024, 2},
2259 {8 * 1024, 1},
2260 {16 * 1024, 1},
2261 {32 * 1024, 1},
2262 {64 * 1024, 7}
2263 },
2264 .block_erase = spi_block_erase_d8,
2265 }, {
2266 .eraseblocks = { {512 * 1024, 1} },
2267 .block_erase = spi_block_erase_c7,
2268 }
2269 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002270 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002271 .write = spi_chip_write_256,
2272 .read = spi_chip_read,
2273 },
2274
2275 {
2276 .vendor = "Eon",
2277 .name = "EN25B40T",
2278 .bustype = CHIP_BUSTYPE_SPI,
2279 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002280 .model_id = EON_EN25B40,
snelson2d471072010-01-09 05:30:14 +00002281 .total_size = 512,
2282 .page_size = 256,
2283 .tested = TEST_UNTESTED,
2284 .probe = probe_spi_rdid,
2285 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002286 .block_erasers =
2287 {
2288 {
2289 .eraseblocks = {
2290 {64 * 1024, 7},
2291 {32 * 1024, 1},
2292 {16 * 1024, 1},
2293 {8 * 1024, 1},
2294 {4 * 1024, 2},
2295 },
2296 .block_erase = spi_block_erase_d8,
2297 }, {
2298 .eraseblocks = { {512 * 1024, 1} },
2299 .block_erase = spi_block_erase_c7,
2300 }
2301 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002302 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002303 .write = spi_chip_write_256,
2304 .read = spi_chip_read,
2305 },
2306
2307 {
2308 .vendor = "Eon",
2309 .name = "EN25B80",
2310 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002311 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002312 .model_id = EON_EN25B80,
hailfingerab07cbd2009-06-05 20:53:07 +00002313 .total_size = 1024,
2314 .page_size = 256,
2315 .tested = TEST_UNTESTED,
2316 .probe = probe_spi_rdid,
2317 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002318 .block_erasers =
2319 {
2320 {
2321 .eraseblocks = {
2322 {4 * 1024, 2},
2323 {8 * 1024, 1},
2324 {16 * 1024, 1},
2325 {32 * 1024, 1},
2326 {64 * 1024, 15}
2327 },
2328 .block_erase = spi_block_erase_d8,
2329 }, {
2330 .eraseblocks = { {1024 * 1024, 1} },
2331 .block_erase = spi_block_erase_c7,
2332 }
2333 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002334 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002335 .write = spi_chip_write_256,
2336 .read = spi_chip_read,
2337 },
2338
2339 {
2340 .vendor = "Eon",
2341 .name = "EN25B80T",
2342 .bustype = CHIP_BUSTYPE_SPI,
2343 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002344 .model_id = EON_EN25B80,
snelson2d471072010-01-09 05:30:14 +00002345 .total_size = 1024,
2346 .page_size = 256,
2347 .tested = TEST_UNTESTED,
2348 .probe = probe_spi_rdid,
2349 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002350 .block_erasers =
2351 {
2352 {
2353 .eraseblocks = {
2354 {64 * 1024, 15},
2355 {32 * 1024, 1},
2356 {16 * 1024, 1},
2357 {8 * 1024, 1},
2358 {4 * 1024, 2},
2359 },
2360 .block_erase = spi_block_erase_d8,
2361 }, {
2362 .eraseblocks = { {1024 * 1024, 1} },
2363 .block_erase = spi_block_erase_c7,
2364 }
2365 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002366 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002367 .write = spi_chip_write_256,
2368 .read = spi_chip_read,
2369 },
2370
2371 {
2372 .vendor = "Eon",
2373 .name = "EN25B16",
2374 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002375 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002376 .model_id = EON_EN25B16,
hailfingerab07cbd2009-06-05 20:53:07 +00002377 .total_size = 2048,
2378 .page_size = 256,
2379 .tested = TEST_UNTESTED,
2380 .probe = probe_spi_rdid,
2381 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002382 .block_erasers =
2383 {
2384 {
2385 .eraseblocks = {
2386 {4 * 1024, 2},
2387 {8 * 1024, 1},
2388 {16 * 1024, 1},
2389 {32 * 1024, 1},
2390 {64 * 1024, 31},
2391 },
2392 .block_erase = spi_block_erase_d8,
2393 }, {
2394 .eraseblocks = { {2 * 1024 * 1024, 1} },
2395 .block_erase = spi_block_erase_c7,
2396 }
2397 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002398 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002399 .write = spi_chip_write_256,
2400 .read = spi_chip_read,
2401 },
2402
2403 {
2404 .vendor = "Eon",
2405 .name = "EN25B16T",
2406 .bustype = CHIP_BUSTYPE_SPI,
2407 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002408 .model_id = EON_EN25B16,
snelson2d471072010-01-09 05:30:14 +00002409 .total_size = 2048,
2410 .page_size = 256,
2411 .tested = TEST_UNTESTED,
2412 .probe = probe_spi_rdid,
2413 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002414 .block_erasers =
2415 {
2416 {
2417 .eraseblocks = {
2418 {64 * 1024, 31},
2419 {32 * 1024, 1},
2420 {16 * 1024, 1},
2421 {8 * 1024, 1},
2422 {4 * 1024, 2},
2423 },
2424 .block_erase = spi_block_erase_d8,
2425 }, {
2426 .eraseblocks = { {2 * 1024 * 1024, 1} },
2427 .block_erase = spi_block_erase_c7,
2428 }
2429 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002430 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002431 .write = spi_chip_write_256,
2432 .read = spi_chip_read,
2433 },
2434
2435 {
2436 .vendor = "Eon",
2437 .name = "EN25B32",
2438 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002439 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002440 .model_id = EON_EN25B32,
hailfingerab07cbd2009-06-05 20:53:07 +00002441 .total_size = 4096,
2442 .page_size = 256,
2443 .tested = TEST_UNTESTED,
2444 .probe = probe_spi_rdid,
2445 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002446 .block_erasers =
2447 {
2448 {
2449 .eraseblocks = {
2450 {4 * 1024, 2},
2451 {8 * 1024, 1},
2452 {16 * 1024, 1},
2453 {32 * 1024, 1},
2454 {64 * 1024, 63},
2455 },
2456 .block_erase = spi_block_erase_d8,
2457 }, {
2458 .eraseblocks = { {4 * 1024 * 1024, 1} },
2459 .block_erase = spi_block_erase_c7,
2460 }
2461 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002462 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002463 .write = spi_chip_write_256,
2464 .read = spi_chip_read,
2465 },
2466
2467 {
2468 .vendor = "Eon",
2469 .name = "EN25B32T",
2470 .bustype = CHIP_BUSTYPE_SPI,
2471 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002472 .model_id = EON_EN25B32,
snelson2d471072010-01-09 05:30:14 +00002473 .total_size = 4096,
2474 .page_size = 256,
2475 .tested = TEST_UNTESTED,
2476 .probe = probe_spi_rdid,
2477 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002478 .block_erasers =
2479 {
2480 {
2481 .eraseblocks = {
2482 {64 * 1024, 63},
2483 {32 * 1024, 1},
2484 {16 * 1024, 1},
2485 {8 * 1024, 1},
2486 {4 * 1024, 2},
2487 },
2488 .block_erase = spi_block_erase_d8,
2489 }, {
2490 .eraseblocks = { {4 * 1024 * 1024, 1} },
2491 .block_erase = spi_block_erase_c7,
2492 }
2493 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002494 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002495 .write = spi_chip_write_256,
2496 .read = spi_chip_read,
2497 },
2498
2499 {
2500 .vendor = "Eon",
2501 .name = "EN25B64",
2502 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002503 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002504 .model_id = EON_EN25B64,
hailfingerab07cbd2009-06-05 20:53:07 +00002505 .total_size = 8192,
2506 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08002507 .feature_bits = FEATURE_WRSR_WREN,
hailfingerab07cbd2009-06-05 20:53:07 +00002508 .tested = TEST_UNTESTED,
2509 .probe = probe_spi_rdid,
2510 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002511 .block_erasers =
2512 {
2513 {
2514 .eraseblocks = {
2515 {4 * 1024, 2},
2516 {8 * 1024, 1},
2517 {16 * 1024, 1},
2518 {32 * 1024, 1},
2519 {64 * 1024, 127},
2520 },
2521 .block_erase = spi_block_erase_d8,
2522 }, {
2523 .eraseblocks = { {8 * 1024 * 1024, 1} },
2524 .block_erase = spi_block_erase_c7,
2525 }
2526 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002527 .unlock = spi_disable_blockprotect,
snelson2d471072010-01-09 05:30:14 +00002528 .write = spi_chip_write_256,
2529 .read = spi_chip_read,
2530 },
2531
2532 {
2533 .vendor = "Eon",
2534 .name = "EN25B64T",
2535 .bustype = CHIP_BUSTYPE_SPI,
2536 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002537 .model_id = EON_EN25B64,
snelson2d471072010-01-09 05:30:14 +00002538 .total_size = 8192,
2539 .page_size = 256,
2540 .tested = TEST_UNTESTED,
2541 .probe = probe_spi_rdid,
2542 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002543 .block_erasers =
2544 {
2545 {
2546 .eraseblocks = {
2547 {64 * 1024, 127},
2548 {32 * 1024, 1},
2549 {16 * 1024, 1},
2550 {8 * 1024, 1},
2551 {4 * 1024, 2},
2552 },
2553 .block_erase = spi_block_erase_d8,
2554 }, {
2555 .eraseblocks = { {8 * 1024 * 1024, 1} },
2556 .block_erase = spi_block_erase_c7,
2557 }
2558 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002559 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002560 .write = spi_chip_write_256,
2561 .read = spi_chip_read,
2562 },
2563
2564 {
2565 .vendor = "Eon",
hailfinger77c5d932009-06-15 12:10:57 +00002566 .name = "EN25D16",
2567 .bustype = CHIP_BUSTYPE_SPI,
2568 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002569 .model_id = EON_EN25D16,
hailfinger77c5d932009-06-15 12:10:57 +00002570 .total_size = 2048,
2571 .page_size = 256,
2572 .tested = TEST_UNTESTED,
2573 .probe = probe_spi_rdid,
2574 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002575 .block_erasers =
2576 {
2577 {
2578 .eraseblocks = { {4 * 1024, 512} },
2579 .block_erase = spi_block_erase_20,
2580 }, {
2581 .eraseblocks = { {64 * 1024, 32} },
2582 .block_erase = spi_block_erase_d8,
2583 }, {
2584 .eraseblocks = { {64 * 1024, 32} },
2585 .block_erase = spi_block_erase_52,
2586 }, {
2587 .eraseblocks = { {2 * 1024 * 1024, 1} },
2588 .block_erase = spi_block_erase_60,
2589 }, {
2590 .eraseblocks = { {2 * 1024 * 1024, 1} },
2591 .block_erase = spi_block_erase_c7,
2592 }
2593 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002594 .unlock = spi_disable_blockprotect,
hailfinger77c5d932009-06-15 12:10:57 +00002595 .write = spi_chip_write_256,
2596 .read = spi_chip_read,
2597 },
2598
2599 {
2600 .vendor = "Eon",
2601 .name = "EN25F05",
2602 .bustype = CHIP_BUSTYPE_SPI,
2603 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002604 .model_id = EON_EN25F05,
hailfinger77c5d932009-06-15 12:10:57 +00002605 .total_size = 64,
2606 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08002607 .feature_bits = FEATURE_WRSR_WREN,
hailfinger77c5d932009-06-15 12:10:57 +00002608 .tested = TEST_UNTESTED,
2609 .probe = probe_spi_rdid,
2610 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002611 .block_erasers =
2612 {
2613 {
2614 .eraseblocks = { {4 * 1024, 16} },
2615 .block_erase = spi_block_erase_20,
2616 }, {
2617 .eraseblocks = { {32 * 1024, 2} },
2618 .block_erase = spi_block_erase_d8,
2619 }, {
2620 .eraseblocks = { {32 * 1024, 2} },
2621 .block_erase = spi_block_erase_52,
2622 }, {
2623 .eraseblocks = { {64 * 1024, 1} },
2624 .block_erase = spi_block_erase_60,
2625 }, {
2626 .eraseblocks = { {64 * 1024, 1} },
2627 .block_erase = spi_block_erase_c7,
2628 }
2629 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002630 .unlock = spi_disable_blockprotect,
hailfinger77c5d932009-06-15 12:10:57 +00002631 .write = spi_chip_write_256,
2632 .read = spi_chip_read,
2633 },
2634
2635 {
2636 .vendor = "Eon",
2637 .name = "EN25F10",
2638 .bustype = CHIP_BUSTYPE_SPI,
2639 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002640 .model_id = EON_EN25F10,
hailfinger77c5d932009-06-15 12:10:57 +00002641 .total_size = 128,
2642 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08002643 .feature_bits = FEATURE_WRSR_WREN,
hailfinger77c5d932009-06-15 12:10:57 +00002644 .tested = TEST_UNTESTED,
2645 .probe = probe_spi_rdid,
2646 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002647 .block_erasers =
2648 {
2649 {
2650 .eraseblocks = { {4 * 1024, 32} },
2651 .block_erase = spi_block_erase_20,
2652 }, {
2653 .eraseblocks = { {32 * 1024, 4} },
2654 .block_erase = spi_block_erase_d8,
2655 }, {
2656 .eraseblocks = { {32 * 1024, 4} },
2657 .block_erase = spi_block_erase_52,
2658 }, {
2659 .eraseblocks = { {128 * 1024, 1} },
2660 .block_erase = spi_block_erase_60,
2661 }, {
2662 .eraseblocks = { {128 * 1024, 1} },
2663 .block_erase = spi_block_erase_c7,
2664 }
2665 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002666 .unlock = spi_disable_blockprotect,
hailfinger77c5d932009-06-15 12:10:57 +00002667 .write = spi_chip_write_256,
2668 .read = spi_chip_read,
2669 },
2670
2671 {
2672 .vendor = "Eon",
2673 .name = "EN25F20",
2674 .bustype = CHIP_BUSTYPE_SPI,
2675 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002676 .model_id = EON_EN25F20,
hailfinger77c5d932009-06-15 12:10:57 +00002677 .total_size = 256,
2678 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08002679 .feature_bits = FEATURE_WRSR_WREN,
hailfinger77c5d932009-06-15 12:10:57 +00002680 .tested = TEST_UNTESTED,
2681 .probe = probe_spi_rdid,
2682 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002683 .block_erasers =
2684 {
2685 {
2686 .eraseblocks = { {4 * 1024, 64} },
2687 .block_erase = spi_block_erase_20,
2688 }, {
2689 .eraseblocks = { {64 * 1024, 4} },
2690 .block_erase = spi_block_erase_d8,
2691 }, {
2692 .eraseblocks = { {64 * 1024, 4} },
2693 .block_erase = spi_block_erase_52,
2694 }, {
2695 .eraseblocks = { {256 * 1024, 1} },
2696 .block_erase = spi_block_erase_60,
2697 }, {
2698 .eraseblocks = { {256 * 1024, 1} },
2699 .block_erase = spi_block_erase_c7,
2700 }
2701 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002702 .unlock = spi_disable_blockprotect,
hailfinger77c5d932009-06-15 12:10:57 +00002703 .write = spi_chip_write_256,
2704 .read = spi_chip_read,
2705 },
2706
2707 {
2708 .vendor = "Eon",
hailfingerab07cbd2009-06-05 20:53:07 +00002709 .name = "EN25F40",
2710 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002711 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002712 .model_id = EON_EN25F40,
hailfingerab07cbd2009-06-05 20:53:07 +00002713 .total_size = 512,
2714 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08002715 .feature_bits = FEATURE_WRSR_WREN,
hailfinger27a59132009-06-22 10:06:28 +00002716 .tested = TEST_OK_PROBE,
hailfingerab07cbd2009-06-05 20:53:07 +00002717 .probe = probe_spi_rdid,
2718 .probe_timing = TIMING_ZERO,
snelson1c03aa12009-12-23 17:05:59 +00002719 .block_erasers =
2720 {
2721 {
snelson2d471072010-01-09 05:30:14 +00002722 .eraseblocks = { {4 * 1024, 128} },
snelson1c03aa12009-12-23 17:05:59 +00002723 .block_erase = spi_block_erase_20,
2724 }, {
snelson2d471072010-01-09 05:30:14 +00002725 .eraseblocks = { {64 * 1024, 8} },
snelson1c03aa12009-12-23 17:05:59 +00002726 .block_erase = spi_block_erase_d8,
2727 }, {
snelson2d471072010-01-09 05:30:14 +00002728 .eraseblocks = { {512 * 1024, 1} },
snelson1c03aa12009-12-23 17:05:59 +00002729 .block_erase = spi_block_erase_60,
2730 }, {
snelson2d471072010-01-09 05:30:14 +00002731 .eraseblocks = { {512 * 1024, 1} },
snelson1c03aa12009-12-23 17:05:59 +00002732 .block_erase = spi_block_erase_c7,
2733 },
2734 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002735 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002736 .write = spi_chip_write_256,
2737 .read = spi_chip_read,
2738 },
2739
2740 {
2741 .vendor = "Eon",
2742 .name = "EN25F80",
2743 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002744 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002745 .model_id = EON_EN25F80,
hailfingerab07cbd2009-06-05 20:53:07 +00002746 .total_size = 1024,
2747 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08002748 .feature_bits = FEATURE_WRSR_WREN,
2749 .tested = TEST_OK_PRE,
hailfingerab07cbd2009-06-05 20:53:07 +00002750 .probe = probe_spi_rdid,
2751 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002752 .block_erasers =
2753 {
2754 {
2755 .eraseblocks = { {4 * 1024, 256} },
2756 .block_erase = spi_block_erase_20,
2757 }, {
2758 .eraseblocks = { {64 * 1024, 16} },
2759 .block_erase = spi_block_erase_d8,
2760 }, {
2761 .eraseblocks = { {1024 * 1024, 1} },
2762 .block_erase = spi_block_erase_60,
2763 }, {
2764 .eraseblocks = { {1024 * 1024, 1} },
2765 .block_erase = spi_block_erase_c7,
2766 }
2767 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002768 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002769 .write = spi_chip_write_256,
2770 .read = spi_chip_read,
2771 },
2772
2773 {
2774 .vendor = "Eon",
2775 .name = "EN25F16",
2776 .bustype = CHIP_BUSTYPE_SPI,
hailfinger77c5d932009-06-15 12:10:57 +00002777 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002778 .model_id = EON_EN25F16,
hailfingerab07cbd2009-06-05 20:53:07 +00002779 .total_size = 2048,
2780 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08002781 .feature_bits = FEATURE_WRSR_WREN,
hailfingerab07cbd2009-06-05 20:53:07 +00002782 .tested = TEST_UNTESTED,
2783 .probe = probe_spi_rdid,
2784 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002785 .block_erasers =
2786 {
2787 {
2788 .eraseblocks = { {4 * 1024, 512} },
2789 .block_erase = spi_block_erase_20,
2790 }, {
2791 .eraseblocks = { {64 * 1024, 32} },
2792 .block_erase = spi_block_erase_d8,
2793 }, {
2794 .eraseblocks = { {2 * 1024 * 1024, 1} },
2795 .block_erase = spi_block_erase_60,
2796 }, {
2797 .eraseblocks = { {2 * 1024 * 1024, 1} },
2798 .block_erase = spi_block_erase_c7,
2799 }
2800 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002801 .unlock = spi_disable_blockprotect,
hailfingerab07cbd2009-06-05 20:53:07 +00002802 .write = spi_chip_write_256,
2803 .read = spi_chip_read,
2804 },
2805
2806 {
hailfinger77c5d932009-06-15 12:10:57 +00002807 .vendor = "Eon",
2808 .name = "EN25F32",
2809 .bustype = CHIP_BUSTYPE_SPI,
2810 .manufacture_id = EON_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08002811 .model_id = EON_EN25F32,
hailfinger77c5d932009-06-15 12:10:57 +00002812 .total_size = 4096,
2813 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08002814 .feature_bits = FEATURE_WRSR_WREN,
hailfinger77c5d932009-06-15 12:10:57 +00002815 .tested = TEST_UNTESTED,
2816 .probe = probe_spi_rdid,
2817 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00002818 .block_erasers =
2819 {
2820 {
2821 .eraseblocks = { {4 * 1024, 1024} },
2822 .block_erase = spi_block_erase_20,
2823 }, {
2824 .eraseblocks = { {64 * 1024, 64} },
2825 .block_erase = spi_block_erase_d8,
2826 }, {
2827 .eraseblocks = { {4 * 1024 * 1024, 1} },
2828 .block_erase = spi_block_erase_60,
2829 }, {
2830 .eraseblocks = { {4 * 1024 * 1024, 1} },
2831 .block_erase = spi_block_erase_c7,
2832 }
2833 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07002834 .unlock = spi_disable_blockprotect,
hailfinger77c5d932009-06-15 12:10:57 +00002835 .write = spi_chip_write_256,
2836 .read = spi_chip_read,
2837 },
2838
2839 {
snelson2b18d0f2010-03-05 08:44:11 +00002840 .vendor = "Eon",
2841 .name = "EN29F010",
2842 .bustype = CHIP_BUSTYPE_PARALLEL,
2843 .manufacture_id = EON_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08002844 .model_id = EON_EN29F010,
snelson2b18d0f2010-03-05 08:44:11 +00002845 .total_size = 128,
2846 .page_size = 128,
2847 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08002848 .tested = TEST_OK_PRE,
snelson2b18d0f2010-03-05 08:44:11 +00002849 .probe = probe_jedec,
2850 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2851 .block_erasers =
2852 {
2853 {
2854 .eraseblocks = { {16 * 1024, 8} },
2855 .block_erase = erase_sector_jedec,
2856 },
2857 {
2858 .eraseblocks = { {128 * 1024, 1} },
2859 .block_erase = erase_chip_block_jedec,
2860 },
2861 },
2862 .write = write_jedec_1,
2863 .read = read_memmapped,
2864 },
2865
2866 {
David Hendricks82fd8ae2010-08-04 14:34:54 -07002867 .vendor = "Eon",
hailfinger286829b2009-01-08 03:40:17 +00002868 .name = "EN29F002(A)(N)B",
hailfingerdaecf7e2009-06-05 08:47:37 +00002869 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00002870 .manufacture_id = EON_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08002871 .model_id = EON_EN29F002B,
hailfinger286829b2009-01-08 03:40:17 +00002872 .total_size = 256,
2873 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00002874 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08002875 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00002876 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00002877 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson1c03aa12009-12-23 17:05:59 +00002878 .block_erasers =
2879 {
2880 {
2881 .eraseblocks = {
snelson1c03aa12009-12-23 17:05:59 +00002882 {16 * 1024, 1},
mkarcher8dc09ff2010-03-13 23:47:09 +00002883 {8 * 1024, 2},
2884 {32 * 1024, 1},
2885 {64 * 1024, 3},
snelson1c03aa12009-12-23 17:05:59 +00002886 },
2887 .block_erase = erase_sector_jedec,
2888 }, {
2889 .eraseblocks = { {256 * 1024, 1} },
2890 .block_erase = erase_chip_block_jedec,
2891 },
2892 },
hailfingerfff99532009-11-27 17:49:42 +00002893 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00002894 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00002895 },
2896
hailfinger286829b2009-01-08 03:40:17 +00002897 {
David Hendricks82fd8ae2010-08-04 14:34:54 -07002898 .vendor = "Eon",
hailfinger286829b2009-01-08 03:40:17 +00002899 .name = "EN29F002(A)(N)T",
hailfingerdaecf7e2009-06-05 08:47:37 +00002900 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00002901 .manufacture_id = EON_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08002902 .model_id = EON_EN29F002T,
hailfinger286829b2009-01-08 03:40:17 +00002903 .total_size = 256,
2904 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00002905 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08002906 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00002907 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00002908 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson1c03aa12009-12-23 17:05:59 +00002909 .block_erasers =
2910 {
2911 {
2912 .eraseblocks = {
snelson1c03aa12009-12-23 17:05:59 +00002913 {64 * 1024, 3},
mkarcher8dc09ff2010-03-13 23:47:09 +00002914 {32 * 1024, 1},
2915 {8 * 1024, 2},
2916 {16 * 1024, 1},
snelson1c03aa12009-12-23 17:05:59 +00002917 },
2918 .block_erase = erase_sector_jedec,
2919 }, {
2920 .eraseblocks = { {256 * 1024, 1} },
2921 .block_erase = erase_chip_block_jedec,
2922 },
2923 },
hailfingerfff99532009-11-27 17:49:42 +00002924 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00002925 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00002926 },
2927
hailfinger286829b2009-01-08 03:40:17 +00002928 {
2929 .vendor = "Fujitsu",
2930 .name = "MBM29F004BC",
hailfingera5245512009-06-28 19:19:25 +00002931 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00002932 .manufacture_id = FUJITSU_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08002933 .model_id = FUJITSU_MBM29F004BC,
hailfinger286829b2009-01-08 03:40:17 +00002934 .total_size = 512,
2935 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00002936 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00002937 .tested = TEST_UNTESTED,
2938 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00002939 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson1c03aa12009-12-23 17:05:59 +00002940 .block_erasers =
2941 {
2942 {
2943 .eraseblocks = {
2944 {16 * 1024, 1},
2945 {8 * 1024, 2},
2946 {32 * 1024, 1},
2947 {64 * 1024, 7},
2948 },
snelsonc6855342010-01-28 23:55:12 +00002949 .block_erase = erase_sector_jedec,
snelson1c03aa12009-12-23 17:05:59 +00002950 }, {
2951 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00002952 .block_erase = erase_chip_block_jedec,
snelson1c03aa12009-12-23 17:05:59 +00002953 },
2954 },
hailfinger286829b2009-01-08 03:40:17 +00002955 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00002956 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00002957 },
2958
hailfinger286829b2009-01-08 03:40:17 +00002959 {
2960 .vendor = "Fujitsu",
2961 .name = "MBM29F004TC",
hailfingera5245512009-06-28 19:19:25 +00002962 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00002963 .manufacture_id = FUJITSU_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08002964 .model_id = FUJITSU_MBM29F004TC,
hailfinger286829b2009-01-08 03:40:17 +00002965 .total_size = 512,
2966 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00002967 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00002968 .tested = TEST_UNTESTED,
2969 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00002970 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson1c03aa12009-12-23 17:05:59 +00002971 .block_erasers =
2972 {
2973 {
2974 .eraseblocks = {
2975 {64 * 1024, 7},
2976 {32 * 1024, 1},
2977 {8 * 1024, 2},
2978 {16 * 1024, 1},
2979 },
snelsonc6855342010-01-28 23:55:12 +00002980 .block_erase = erase_sector_jedec,
snelson1c03aa12009-12-23 17:05:59 +00002981 }, {
2982 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00002983 .block_erase = erase_chip_block_jedec,
snelson1c03aa12009-12-23 17:05:59 +00002984 },
2985 },
hailfinger286829b2009-01-08 03:40:17 +00002986 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00002987 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00002988 },
2989
hailfinger286829b2009-01-08 03:40:17 +00002990 {
snelsonc6855342010-01-28 23:55:12 +00002991 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
hailfinger286829b2009-01-08 03:40:17 +00002992 .vendor = "Fujitsu",
2993 .name = "MBM29F400BC",
hailfingera5245512009-06-28 19:19:25 +00002994 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00002995 .manufacture_id = FUJITSU_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08002996 .model_id = FUJITSU_MBM29F400BC,
hailfinger286829b2009-01-08 03:40:17 +00002997 .total_size = 512,
2998 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00002999 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08003000 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00003001 .probe = probe_m29f400bt,
hailfingerd5b35922009-06-03 14:46:22 +00003002 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
snelson1c03aa12009-12-23 17:05:59 +00003003 .block_erasers =
3004 {
3005 {
3006 .eraseblocks = {
3007 {16 * 1024, 1},
3008 {8 * 1024, 2},
3009 {32 * 1024, 1},
3010 {64 * 1024, 7},
3011 },
3012 .block_erase = block_erase_m29f400bt,
3013 }, {
3014 .eraseblocks = { {512 * 1024, 1} },
3015 .block_erase = block_erase_chip_m29f400bt,
3016 },
3017 },
David Hendricksc801adb2010-12-09 16:58:56 -08003018 .write = write_m29f400bt,
hailfinger23060112009-05-08 12:49:03 +00003019 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00003020 },
3021
hailfinger286829b2009-01-08 03:40:17 +00003022 {
3023 .vendor = "Fujitsu",
3024 .name = "MBM29F400TC",
hailfingera5245512009-06-28 19:19:25 +00003025 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00003026 .manufacture_id = FUJITSU_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003027 .model_id = FUJITSU_MBM29F400TC,
hailfinger286829b2009-01-08 03:40:17 +00003028 .total_size = 512,
3029 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00003030 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00003031 .tested = TEST_UNTESTED,
3032 .probe = probe_m29f400bt,
hailfingerd5b35922009-06-03 14:46:22 +00003033 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
snelson1c03aa12009-12-23 17:05:59 +00003034 .block_erasers =
3035 {
3036 {
3037 .eraseblocks = {
3038 {64 * 1024, 7},
3039 {32 * 1024, 1},
3040 {8 * 1024, 2},
3041 {16 * 1024, 1},
3042 },
3043 .block_erase = block_erase_m29f400bt,
3044 }, {
3045 .eraseblocks = { {512 * 1024, 1} },
3046 .block_erase = block_erase_chip_m29f400bt,
3047 },
3048 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003049 .write = write_m29f400bt,
hailfinger23060112009-05-08 12:49:03 +00003050 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00003051 },
3052
hailfinger286829b2009-01-08 03:40:17 +00003053 {
hailfingerc6950ad2010-06-21 16:12:22 +00003054 .vendor = "Hyundai",
3055 .name = "HY29F002T",
3056 .bustype = CHIP_BUSTYPE_PARALLEL,
3057 .manufacture_id = HYUNDAI_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003058 .model_id = HYUNDAI_HY29F002T,
hailfingerc6950ad2010-06-21 16:12:22 +00003059 .total_size = 256,
3060 .page_size = 256 * 1024,
3061 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
David Hendricksc801adb2010-12-09 16:58:56 -08003062 .tested = TEST_OK_PRE,
hailfingerc6950ad2010-06-21 16:12:22 +00003063 .probe = probe_jedec,
3064 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3065 .block_erasers =
3066 {
3067 {
3068 .eraseblocks = {
3069 {64 * 1024, 3},
3070 {32 * 1024, 1},
3071 {8 * 1024, 2},
3072 {16 * 1024, 1},
3073 },
3074 .block_erase = erase_sector_jedec,
3075 }, {
3076 .eraseblocks = { {256 * 1024, 1} },
3077 .block_erase = erase_chip_block_jedec,
3078 },
3079 },
3080 .write = write_jedec_1,
3081 .read = read_memmapped,
3082 },
3083
3084 {
3085 .vendor = "Hyundai",
3086 .name = "HY29F002B",
3087 .bustype = CHIP_BUSTYPE_PARALLEL,
3088 .manufacture_id = HYUNDAI_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003089 .model_id = HYUNDAI_HY29F002B,
hailfingerc6950ad2010-06-21 16:12:22 +00003090 .total_size = 256,
3091 .page_size = 256 * 1024,
3092 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
3093 .tested = TEST_UNTESTED,
3094 .probe = probe_jedec,
3095 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3096 .block_erasers =
3097 {
3098 {
3099 .eraseblocks = {
3100 {16 * 1024, 1},
3101 {8 * 1024, 2},
3102 {32 * 1024, 1},
3103 {64 * 1024, 3},
3104 },
3105 .block_erase = erase_sector_jedec,
3106 }, {
3107 .eraseblocks = { {256 * 1024, 1} },
3108 .block_erase = erase_chip_block_jedec,
3109 },
3110 },
3111 .write = write_jedec_1,
3112 .read = read_memmapped,
3113 },
3114
3115 {
David Hendricksc801adb2010-12-09 16:58:56 -08003116 .vendor = "Hyundai",
3117 .name = "HY29F040A",
3118 .bustype = CHIP_BUSTYPE_PARALLEL,
3119 .manufacture_id = HYUNDAI_ID,
3120 .model_id = HYUNDAI_HY29F040A,
3121 .total_size = 512,
3122 .page_size = 64 * 1024,
3123 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3124 .tested = TEST_UNTESTED,
3125 .probe = probe_jedec,
3126 .probe_timing = TIMING_ZERO,
3127 .block_erasers =
3128 {
3129 {
3130 .eraseblocks = { {64 * 1024, 8} },
3131 .block_erase = erase_sector_jedec,
3132 }, {
3133 .eraseblocks = { {512 * 1024, 1} },
3134 .block_erase = erase_chip_block_jedec,
3135 },
3136 },
3137 .write = write_jedec_1,
3138 .read = read_memmapped,
3139 },
3140
3141 {
hailfinger286829b2009-01-08 03:40:17 +00003142 .vendor = "Intel",
David Hendricksc801adb2010-12-09 16:58:56 -08003143 .name = "28F001BN/BX-B",
hailfingerdaecf7e2009-06-05 08:47:37 +00003144 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingerd4d97b92009-05-29 12:55:31 +00003145 .manufacture_id = INTEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003146 .model_id = INTEL_28F001B,
hailfingerd4d97b92009-05-29 12:55:31 +00003147 .total_size = 128,
3148 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
snelsona013bf62010-03-22 04:39:31 +00003149 .tested = TEST_UNTESTED,
hailfingerd4d97b92009-05-29 12:55:31 +00003150 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00003151 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson2d471072010-01-09 05:30:14 +00003152 .block_erasers =
3153 {
3154 {
3155 .eraseblocks = {
3156 {8 * 1024, 1},
3157 {4 * 1024, 2},
3158 {112 * 1024, 1},
3159 },
snelsonc0acbeb2010-03-19 18:47:06 +00003160 .block_erase = erase_block_82802ab,
snelson2d471072010-01-09 05:30:14 +00003161 },
3162 },
snelsona013bf62010-03-22 04:39:31 +00003163 .write = write_82802ab,
hailfingerd4d97b92009-05-29 12:55:31 +00003164 .read = read_memmapped,
3165 },
3166
3167 {
3168 .vendor = "Intel",
David Hendricksc801adb2010-12-09 16:58:56 -08003169 .name = "28F001BN/BX-T",
hailfingerdaecf7e2009-06-05 08:47:37 +00003170 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingerd4d97b92009-05-29 12:55:31 +00003171 .manufacture_id = INTEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003172 .model_id = INTEL_28F001T,
hailfingerd4d97b92009-05-29 12:55:31 +00003173 .total_size = 128,
3174 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
snelsona013bf62010-03-22 04:39:31 +00003175 .tested = TEST_UNTESTED,
hailfingerd4d97b92009-05-29 12:55:31 +00003176 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00003177 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson2d471072010-01-09 05:30:14 +00003178 .block_erasers =
3179 {
3180 {
3181 .eraseblocks = {
3182 {112 * 1024, 1},
3183 {4 * 1024, 2},
3184 {8 * 1024, 1},
3185 },
snelsonc0acbeb2010-03-19 18:47:06 +00003186 .block_erase = erase_block_82802ab,
snelson2d471072010-01-09 05:30:14 +00003187 },
3188 },
snelsona013bf62010-03-22 04:39:31 +00003189 .write = write_82802ab,
hailfingerd4d97b92009-05-29 12:55:31 +00003190 .read = read_memmapped,
3191 },
3192
3193 {
3194 .vendor = "Intel",
David Hendricksc801adb2010-12-09 16:58:56 -08003195 .name = "28F002BC/BL/BV/BX-T",
David Hendricks82fd8ae2010-08-04 14:34:54 -07003196 .bustype = CHIP_BUSTYPE_PARALLEL,
3197 .manufacture_id = INTEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003198 .model_id = INTEL_28F002T,
David Hendricks82fd8ae2010-08-04 14:34:54 -07003199 .total_size = 256,
3200 .page_size = 256 * 1024,
David Hendricksc801adb2010-12-09 16:58:56 -08003201 .tested = TEST_OK_PRE,
David Hendricks82fd8ae2010-08-04 14:34:54 -07003202 .probe = probe_82802ab,
3203 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3204 .block_erasers =
3205 {
3206 {
3207 .eraseblocks = {
3208 {128 * 1024, 1},
3209 {96 * 1024, 1},
3210 {8 * 1024, 2},
3211 {16 * 1024, 1},
3212 },
3213 .block_erase = erase_block_82802ab,
3214 },
3215 },
3216 .write = write_82802ab,
3217 .read = read_memmapped,
3218 },
3219
3220 {
3221 .vendor = "Intel",
David Hendricksc801adb2010-12-09 16:58:56 -08003222 .name = "28F008S3/S5/SC",
snelsonee09b3d2010-02-13 18:41:53 +00003223 .bustype = CHIP_BUSTYPE_PARALLEL,
3224 .manufacture_id = INTEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003225 .model_id = INTEL_28F004S3,
snelsonee09b3d2010-02-13 18:41:53 +00003226 .total_size = 512,
3227 .page_size = 256,
3228 .tested = TEST_UNTESTED,
3229 .probe = probe_82802ab,
3230 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsonee09b3d2010-02-13 18:41:53 +00003231 .block_erasers =
3232 {
3233 {
3234 .eraseblocks = { {64 * 1024, 8} },
snelsonc0acbeb2010-03-19 18:47:06 +00003235 .block_erase = erase_block_82802ab,
snelsonee09b3d2010-02-13 18:41:53 +00003236 },
3237 },
snelsona013bf62010-03-22 04:39:31 +00003238 .unlock = unlock_28f004s5,
snelsonee09b3d2010-02-13 18:41:53 +00003239 .write = write_82802ab,
3240 .read = read_memmapped,
3241 },
3242
3243 {
3244 .vendor = "Intel",
David Hendricksc801adb2010-12-09 16:58:56 -08003245 .name = "28F004B5/BE/BV/BX-B",
mkarcher9ded5fe2010-04-03 10:27:08 +00003246 .bustype = CHIP_BUSTYPE_PARALLEL,
3247 .manufacture_id = INTEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003248 .model_id = INTEL_28F004B,
mkarcher9ded5fe2010-04-03 10:27:08 +00003249 .total_size = 512,
3250 .page_size = 128 * 1024, /* maximal block size */
3251 .tested = TEST_UNTESTED,
3252 .probe = probe_82802ab,
3253 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3254 .block_erasers =
3255 {
3256 {
3257 .eraseblocks = {
3258 {16 * 1024, 1},
3259 {8 * 1024, 2},
3260 {96 * 1024, 1},
3261 {128 * 1024, 3},
3262 },
3263 .block_erase = erase_block_82802ab,
3264 },
3265 },
3266 .write = write_82802ab,
3267 .read = read_memmapped,
3268 },
3269
3270 {
3271 .vendor = "Intel",
David Hendricksc801adb2010-12-09 16:58:56 -08003272 .name = "28F004B5/BE/BV/BX-T",
mkarcher9ded5fe2010-04-03 10:27:08 +00003273 .bustype = CHIP_BUSTYPE_PARALLEL,
3274 .manufacture_id = INTEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003275 .model_id = INTEL_28F004T,
mkarcher9ded5fe2010-04-03 10:27:08 +00003276 .total_size = 512,
3277 .page_size = 128 * 1024, /* maximal block size */
3278 .tested = TEST_UNTESTED,
3279 .probe = probe_82802ab,
3280 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3281 .block_erasers =
3282 {
3283 {
3284 .eraseblocks = {
3285 {128 * 1024, 3},
3286 {96 * 1024, 1},
3287 {8 * 1024, 2},
3288 {16 * 1024, 1},
3289 },
3290 .block_erase = erase_block_82802ab,
3291 },
3292 },
3293 .write = write_82802ab,
3294 .read = read_memmapped,
3295 },
3296
3297 {
3298 .vendor = "Intel",
David Hendricksc801adb2010-12-09 16:58:56 -08003299 .name = "28F400BV/BX/CE/CV-B",
mkarcher9ded5fe2010-04-03 10:27:08 +00003300 .bustype = CHIP_BUSTYPE_PARALLEL,
3301 .manufacture_id = INTEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003302 .model_id = INTEL_28F400B,
mkarcher9ded5fe2010-04-03 10:27:08 +00003303 .total_size = 512,
3304 .page_size = 128 * 1024, /* maximal block size */
3305 .feature_bits = FEATURE_ADDR_SHIFTED,
3306 .tested = TEST_UNTESTED,
3307 .probe = probe_82802ab,
3308 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3309 .block_erasers =
3310 {
3311 {
3312 .eraseblocks = {
3313 {16 * 1024, 1},
3314 {8 * 1024, 2},
3315 {96 * 1024, 1},
3316 {128 * 1024, 3},
3317 },
3318 .block_erase = erase_block_82802ab,
3319 },
3320 },
3321 .write = write_82802ab,
3322 .read = read_memmapped,
3323 },
3324
3325 {
3326 .vendor = "Intel",
David Hendricksc801adb2010-12-09 16:58:56 -08003327 .name = "28F400BV/BX/CE/CV-T",
mkarcher9ded5fe2010-04-03 10:27:08 +00003328 .bustype = CHIP_BUSTYPE_PARALLEL,
3329 .manufacture_id = INTEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003330 .model_id = INTEL_28F400T,
mkarcher9ded5fe2010-04-03 10:27:08 +00003331 .total_size = 512,
3332 .page_size = 128 * 1024, /* maximal block size */
3333 .feature_bits = FEATURE_ADDR_SHIFTED,
3334 .tested = TEST_UNTESTED,
3335 .probe = probe_82802ab,
3336 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3337 .block_erasers =
3338 {
3339 {
3340 .eraseblocks = {
3341 {128 * 1024, 3},
3342 {96 * 1024, 1},
3343 {8 * 1024, 2},
3344 {16 * 1024, 1},
3345 },
3346 .block_erase = erase_block_82802ab,
3347 },
3348 },
3349 .write = write_82802ab,
3350 .read = read_memmapped,
3351 },
3352
3353 {
3354 .vendor = "Intel",
hailfinger286829b2009-01-08 03:40:17 +00003355 .name = "82802AB",
hailfingerc391ccb2009-06-12 11:45:10 +00003356 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00003357 .manufacture_id = INTEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003358 .model_id = INTEL_82802AB,
hailfinger286829b2009-01-08 03:40:17 +00003359 .total_size = 512,
3360 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00003361 .feature_bits = FEATURE_REGISTERMAP,
snelsonc0acbeb2010-03-19 18:47:06 +00003362 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00003363 .probe = probe_82802ab,
hailfingere3095d92009-06-05 13:46:17 +00003364 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
snelson2d471072010-01-09 05:30:14 +00003365 .block_erasers =
3366 {
3367 {
3368 .eraseblocks = { {64 * 1024, 8} },
snelsonc0acbeb2010-03-19 18:47:06 +00003369 .block_erase = erase_block_82802ab,
snelson2d471072010-01-09 05:30:14 +00003370 },
3371 },
snelsonc0acbeb2010-03-19 18:47:06 +00003372 .unlock = unlock_82802ab,
hailfinger286829b2009-01-08 03:40:17 +00003373 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00003374 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00003375 },
3376
hailfinger286829b2009-01-08 03:40:17 +00003377 {
3378 .vendor = "Intel",
3379 .name = "82802AC",
hailfingerc391ccb2009-06-12 11:45:10 +00003380 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00003381 .manufacture_id = INTEL_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08003382 .model_id = INTEL_82802AC,
hailfinger286829b2009-01-08 03:40:17 +00003383 .total_size = 1024,
3384 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00003385 .feature_bits = FEATURE_REGISTERMAP,
snelsonc0acbeb2010-03-19 18:47:06 +00003386 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00003387 .probe = probe_82802ab,
hailfingere3095d92009-06-05 13:46:17 +00003388 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
snelson2d471072010-01-09 05:30:14 +00003389 .block_erasers =
3390 {
3391 {
3392 .eraseblocks = { {64 * 1024, 16} },
snelsonc0acbeb2010-03-19 18:47:06 +00003393 .block_erase = erase_block_82802ab,
snelson2d471072010-01-09 05:30:14 +00003394 },
3395 },
snelsonc0acbeb2010-03-19 18:47:06 +00003396 .unlock = unlock_82802ab,
hailfinger286829b2009-01-08 03:40:17 +00003397 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00003398 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00003399 },
3400
hailfinger286829b2009-01-08 03:40:17 +00003401 {
3402 .vendor = "Macronix",
3403 .name = "MX25L512",
hailfinger40167462009-05-31 17:57:34 +00003404 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08003405 .manufacture_id = MACRONIX_ID,
3406 .model_id = MACRONIX_MX25L512,
hailfinger286829b2009-01-08 03:40:17 +00003407 .total_size = 64,
3408 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08003409 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00003410 .tested = TEST_UNTESTED,
3411 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00003412 .probe_timing = TIMING_ZERO,
hailfinger7df21362009-09-05 02:30:58 +00003413 .block_erasers =
3414 {
3415 {
3416 .eraseblocks = { {4 * 1024, 16} },
3417 .block_erase = spi_block_erase_20,
hailfinger91cf1032009-10-01 13:15:01 +00003418 }, {
hailfinger7df21362009-09-05 02:30:58 +00003419 .eraseblocks = { {64 * 1024, 1} },
3420 .block_erase = spi_block_erase_52,
hailfinger91cf1032009-10-01 13:15:01 +00003421 }, {
hailfinger7df21362009-09-05 02:30:58 +00003422 .eraseblocks = { {64 * 1024, 1} },
3423 .block_erase = spi_block_erase_d8,
hailfinger91cf1032009-10-01 13:15:01 +00003424 }, {
hailfinger7df21362009-09-05 02:30:58 +00003425 .eraseblocks = { {64 * 1024, 1} },
3426 .block_erase = spi_block_erase_60,
hailfinger91cf1032009-10-01 13:15:01 +00003427 }, {
hailfinger7df21362009-09-05 02:30:58 +00003428 .eraseblocks = { {64 * 1024, 1} },
3429 .block_erase = spi_block_erase_c7,
3430 },
3431 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003432 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00003433 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00003434 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00003435 },
3436
hailfinger286829b2009-01-08 03:40:17 +00003437 {
3438 .vendor = "Macronix",
3439 .name = "MX25L1005",
hailfinger40167462009-05-31 17:57:34 +00003440 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08003441 .manufacture_id = MACRONIX_ID,
3442 .model_id = MACRONIX_MX25L1005,
hailfinger286829b2009-01-08 03:40:17 +00003443 .total_size = 128,
3444 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08003445 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00003446 .tested = TEST_UNTESTED,
3447 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00003448 .probe_timing = TIMING_ZERO,
hailfinger7df21362009-09-05 02:30:58 +00003449 .block_erasers =
3450 {
3451 {
3452 .eraseblocks = { {4 * 1024, 32} },
3453 .block_erase = spi_block_erase_20,
hailfinger91cf1032009-10-01 13:15:01 +00003454 }, {
hailfinger7df21362009-09-05 02:30:58 +00003455 .eraseblocks = { {64 * 1024, 2} },
3456 .block_erase = spi_block_erase_d8,
hailfinger91cf1032009-10-01 13:15:01 +00003457 }, {
hailfinger7df21362009-09-05 02:30:58 +00003458 .eraseblocks = { {128 * 1024, 1} },
3459 .block_erase = spi_block_erase_60,
hailfinger91cf1032009-10-01 13:15:01 +00003460 }, {
hailfinger7df21362009-09-05 02:30:58 +00003461 .eraseblocks = { {128 * 1024, 1} },
3462 .block_erase = spi_block_erase_c7,
3463 },
3464 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003465 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00003466 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00003467 .read = spi_chip_read,
David Hendricksf8f00c72011-02-01 12:39:46 -08003468 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00003469 },
3470
hailfinger286829b2009-01-08 03:40:17 +00003471 {
3472 .vendor = "Macronix",
3473 .name = "MX25L2005",
hailfinger40167462009-05-31 17:57:34 +00003474 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08003475 .manufacture_id = MACRONIX_ID,
3476 .model_id = MACRONIX_MX25L2005,
hailfinger286829b2009-01-08 03:40:17 +00003477 .total_size = 256,
3478 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08003479 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00003480 .tested = TEST_UNTESTED,
3481 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00003482 .probe_timing = TIMING_ZERO,
hailfinger91cf1032009-10-01 13:15:01 +00003483 .block_erasers =
3484 {
3485 {
3486 .eraseblocks = { {4 * 1024, 64} },
3487 .block_erase = spi_block_erase_20,
3488 }, {
3489 .eraseblocks = { {64 * 1024, 4} },
3490 .block_erase = spi_block_erase_52,
3491 }, {
3492 .eraseblocks = { {64 * 1024, 4} },
3493 .block_erase = spi_block_erase_d8,
3494 }, {
3495 .eraseblocks = { {256 * 1024, 1} },
3496 .block_erase = spi_block_erase_60,
3497 }, {
3498 .eraseblocks = { {256 * 1024, 1} },
3499 .block_erase = spi_block_erase_c7,
3500 },
3501 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003502 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00003503 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00003504 .read = spi_chip_read,
David Hendricksf8f00c72011-02-01 12:39:46 -08003505 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00003506 },
3507
hailfinger286829b2009-01-08 03:40:17 +00003508 {
3509 .vendor = "Macronix",
3510 .name = "MX25L4005",
hailfinger40167462009-05-31 17:57:34 +00003511 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08003512 .manufacture_id = MACRONIX_ID,
3513 .model_id = MACRONIX_MX25L4005,
hailfinger286829b2009-01-08 03:40:17 +00003514 .total_size = 512,
3515 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08003516 .feature_bits = FEATURE_WRSR_WREN,
3517 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00003518 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00003519 .probe_timing = TIMING_ZERO,
hailfinger91cf1032009-10-01 13:15:01 +00003520 .block_erasers =
3521 {
3522 {
3523 .eraseblocks = { {4 * 1024, 128} },
3524 .block_erase = spi_block_erase_20,
3525 }, {
3526 .eraseblocks = { {64 * 1024, 8} },
3527 .block_erase = spi_block_erase_52,
3528 }, {
3529 .eraseblocks = { {64 * 1024, 8} },
3530 .block_erase = spi_block_erase_d8,
3531 }, {
3532 .eraseblocks = { {512 * 1024, 1} },
3533 .block_erase = spi_block_erase_60,
3534 }, {
3535 .eraseblocks = { {512 * 1024, 1} },
3536 .block_erase = spi_block_erase_c7,
3537 },
3538 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003539 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00003540 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00003541 .read = spi_chip_read,
David Hendricksf8f00c72011-02-01 12:39:46 -08003542 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00003543 },
3544
hailfinger286829b2009-01-08 03:40:17 +00003545 {
3546 .vendor = "Macronix",
3547 .name = "MX25L8005",
hailfinger40167462009-05-31 17:57:34 +00003548 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08003549 .manufacture_id = MACRONIX_ID,
3550 .model_id = MACRONIX_MX25L8005,
hailfinger286829b2009-01-08 03:40:17 +00003551 .total_size = 1024,
3552 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08003553 .feature_bits = FEATURE_WRSR_WREN,
3554 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00003555 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00003556 .probe_timing = TIMING_ZERO,
hailfinger91cf1032009-10-01 13:15:01 +00003557 .block_erasers =
3558 {
3559 {
3560 .eraseblocks = { {4 * 1024, 256} },
3561 .block_erase = spi_block_erase_20,
3562 }, {
3563 .eraseblocks = { {64 * 1024, 16} },
3564 .block_erase = spi_block_erase_52,
3565 }, {
3566 .eraseblocks = { {64 * 1024, 16} },
3567 .block_erase = spi_block_erase_d8,
3568 }, {
3569 .eraseblocks = { {1024 * 1024, 1} },
3570 .block_erase = spi_block_erase_60,
3571 }, {
3572 .eraseblocks = { {1024 * 1024, 1} },
3573 .block_erase = spi_block_erase_c7,
3574 },
3575 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003576 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00003577 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00003578 .read = spi_chip_read,
David Hendricksf8f00c72011-02-01 12:39:46 -08003579 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00003580 },
3581
hailfinger286829b2009-01-08 03:40:17 +00003582 {
3583 .vendor = "Macronix",
3584 .name = "MX25L1605",
hailfinger40167462009-05-31 17:57:34 +00003585 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08003586 .manufacture_id = MACRONIX_ID,
3587 .model_id = MACRONIX_MX25L1605,
hailfinger286829b2009-01-08 03:40:17 +00003588 .total_size = 2048,
3589 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08003590 .feature_bits = FEATURE_WRSR_WREN,
3591 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00003592 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00003593 .probe_timing = TIMING_ZERO,
hailfinger91cf1032009-10-01 13:15:01 +00003594 .block_erasers =
3595 {
3596 {
3597 .eraseblocks = { {4 * 1024, 512} },
3598 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
3599 }, {
3600 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
3601 .block_erase = spi_block_erase_52,
3602 }, {
3603 .eraseblocks = { {64 * 1024, 32} },
3604 .block_erase = spi_block_erase_d8,
3605 }, {
3606 .eraseblocks = { {2 * 1024 * 1024, 1} },
3607 .block_erase = spi_block_erase_60,
3608 }, {
3609 .eraseblocks = { {2 * 1024 * 1024, 1} },
3610 .block_erase = spi_block_erase_c7,
3611 },
3612 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003613 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00003614 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00003615 .read = spi_chip_read,
David Hendricksf8f00c72011-02-01 12:39:46 -08003616 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00003617 },
3618
hailfinger286829b2009-01-08 03:40:17 +00003619 {
3620 .vendor = "Macronix",
hailfinger0a2fef02009-04-19 23:04:00 +00003621 .name = "MX25L1635D",
hailfinger40167462009-05-31 17:57:34 +00003622 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08003623 .manufacture_id = MACRONIX_ID,
3624 .model_id = MACRONIX_MX25L1635D,
hailfinger0a2fef02009-04-19 23:04:00 +00003625 .total_size = 2048,
3626 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08003627 .feature_bits = FEATURE_WRSR_WREN,
3628 .tested = TEST_UNTESTED,
3629 .probe = probe_spi_rdid,
3630 .probe_timing = TIMING_ZERO,
3631 .block_erasers =
3632 {
3633 {
3634 .eraseblocks = { {4 * 1024, 512} },
3635 .block_erase = spi_block_erase_20,
3636 }, {
3637 .eraseblocks = { {64 * 1024, 32} },
3638 .block_erase = spi_block_erase_d8,
3639 }, {
3640 .eraseblocks = { {2 * 1024 * 1024, 1} },
3641 .block_erase = spi_block_erase_60,
3642 }, {
3643 .eraseblocks = { {2 * 1024 * 1024, 1} },
3644 .block_erase = spi_block_erase_c7,
3645 }
3646 },
3647 .unlock = spi_disable_blockprotect,
3648 .write = spi_chip_write_256,
3649 .read = spi_chip_read,
3650 },
3651
3652 {
3653 .vendor = "Macronix",
3654 .name = "MX25L1635E",
3655 .bustype = CHIP_BUSTYPE_SPI,
3656 .manufacture_id = MACRONIX_ID,
3657 .model_id = MACRONIX_MX25L1635E,
3658 .total_size = 2048,
3659 .page_size = 256,
3660 .feature_bits = FEATURE_WRSR_WREN,
hailfinger0a2fef02009-04-19 23:04:00 +00003661 .tested = TEST_UNTESTED,
3662 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00003663 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003664 .block_erasers =
3665 {
3666 {
3667 .eraseblocks = { {4 * 1024, 512} },
3668 .block_erase = spi_block_erase_20,
3669 }, {
3670 .eraseblocks = { {64 * 1024, 32} },
3671 .block_erase = spi_block_erase_d8,
3672 }, {
3673 .eraseblocks = { {2 * 1024 * 1024, 1} },
3674 .block_erase = spi_block_erase_60,
3675 }, {
3676 .eraseblocks = { {2 * 1024 * 1024, 1} },
3677 .block_erase = spi_block_erase_c7,
3678 }
3679 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003680 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00003681 .write = spi_chip_write_256,
hailfinger0a2fef02009-04-19 23:04:00 +00003682 .read = spi_chip_read,
3683 },
hailfingerf1255892009-04-20 22:54:13 +00003684
hailfinger0a2fef02009-04-19 23:04:00 +00003685 {
3686 .vendor = "Macronix",
hailfinger286829b2009-01-08 03:40:17 +00003687 .name = "MX25L3205",
hailfinger40167462009-05-31 17:57:34 +00003688 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08003689 .manufacture_id = MACRONIX_ID,
3690 .model_id = MACRONIX_MX25L3205,
hailfinger286829b2009-01-08 03:40:17 +00003691 .total_size = 4096,
3692 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08003693 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks305f7982010-11-28 17:59:36 -08003694 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00003695 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00003696 .probe_timing = TIMING_ZERO,
snelson1c03aa12009-12-23 17:05:59 +00003697 .block_erasers =
3698 {
3699 {
3700 .eraseblocks = { {4 * 1024, 1024} },
3701 .block_erase = spi_block_erase_20,
3702 }, {
3703 .eraseblocks = { {4 * 1024, 1024} },
3704 .block_erase = spi_block_erase_d8,
3705 }, {
3706 .eraseblocks = { {4 * 1024 * 1024, 1} },
3707 .block_erase = spi_block_erase_60,
3708 }, {
3709 .eraseblocks = { {4 * 1024 * 1024, 1} },
3710 .block_erase = spi_block_erase_c7,
3711 },
3712 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003713 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00003714 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00003715 .read = spi_chip_read,
David Hendricksf8f00c72011-02-01 12:39:46 -08003716 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00003717 },
3718
hailfinger286829b2009-01-08 03:40:17 +00003719 {
3720 .vendor = "Macronix",
stuge38d77d22009-04-23 22:51:56 +00003721 .name = "MX25L3235D",
hailfinger40167462009-05-31 17:57:34 +00003722 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08003723 .manufacture_id = MACRONIX_ID,
3724 .model_id = MACRONIX_MX25L3235D,
stuge38d77d22009-04-23 22:51:56 +00003725 .total_size = 4096,
3726 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08003727 .feature_bits = FEATURE_WRSR_WREN,
stuge38d77d22009-04-23 22:51:56 +00003728 .tested = TEST_UNTESTED,
3729 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00003730 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003731 .block_erasers =
3732 {
3733 {
3734 .eraseblocks = { {4 * 1024, 1024} },
3735 .block_erase = spi_block_erase_20,
3736 }, {
3737 .eraseblocks = { {64 * 1024, 64} },
3738 .block_erase = spi_block_erase_d8,
3739 }, {
3740 .eraseblocks = { {4 * 1024 * 1024, 1} },
3741 .block_erase = spi_block_erase_60,
3742 }, {
3743 .eraseblocks = { {4 * 1024 * 1024, 1} },
3744 .block_erase = spi_block_erase_c7,
3745 }
3746 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003747 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00003748 .write = spi_chip_write_256,
stuge38d77d22009-04-23 22:51:56 +00003749 .read = spi_chip_read,
3750 },
3751
3752 {
3753 .vendor = "Macronix",
hailfinger286829b2009-01-08 03:40:17 +00003754 .name = "MX25L6405",
hailfinger40167462009-05-31 17:57:34 +00003755 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08003756 .manufacture_id = MACRONIX_ID,
3757 .model_id = MACRONIX_MX25L6405,
hailfinger286829b2009-01-08 03:40:17 +00003758 .total_size = 8192,
3759 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08003760 .feature_bits = FEATURE_WRSR_WREN,
hailfingera08be0a2009-06-22 11:14:43 +00003761 .tested = TEST_OK_PROBE,
hailfinger286829b2009-01-08 03:40:17 +00003762 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00003763 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003764 .block_erasers =
3765 {
3766 {
3767 .eraseblocks = { {64 * 1024, 128} },
3768 .block_erase = spi_block_erase_20,
3769 }, {
3770 .eraseblocks = { {64 * 1024, 128} },
3771 .block_erase = spi_block_erase_d8,
3772 }, {
3773 .eraseblocks = { {8 * 1024 * 1024, 1} },
3774 .block_erase = spi_block_erase_60,
3775 }, {
3776 .eraseblocks = { {8 * 1024 * 1024, 1} },
3777 .block_erase = spi_block_erase_c7,
3778 }
3779 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003780 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00003781 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00003782 .read = spi_chip_read,
David Hendricksf8f00c72011-02-01 12:39:46 -08003783 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00003784 },
3785
hailfinger286829b2009-01-08 03:40:17 +00003786 {
3787 .vendor = "Macronix",
stuged8f34912009-04-21 01:47:16 +00003788 .name = "MX25L12805",
hailfinger40167462009-05-31 17:57:34 +00003789 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08003790 .manufacture_id = MACRONIX_ID,
3791 .model_id = MACRONIX_MX25L12805,
stuged8f34912009-04-21 01:47:16 +00003792 .total_size = 16384,
3793 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08003794 .feature_bits = FEATURE_WRSR_WREN,
stuged8f34912009-04-21 01:47:16 +00003795 .tested = TEST_UNTESTED,
3796 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00003797 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003798 .block_erasers =
3799 {
3800 {
3801 .eraseblocks = { {4 * 1024, 4096} },
3802 .block_erase = spi_block_erase_20,
3803 }, {
3804 .eraseblocks = { {64 * 1024, 256} },
3805 .block_erase = spi_block_erase_d8,
3806 }, {
3807 .eraseblocks = { {16 * 1024 * 1024, 1} },
3808 .block_erase = spi_block_erase_60,
3809 }, {
3810 .eraseblocks = { {16 * 1024 * 1024, 1} },
3811 .block_erase = spi_block_erase_c7,
3812 }
3813 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07003814 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00003815 .write = spi_chip_write_256,
stuged8f34912009-04-21 01:47:16 +00003816 .read = spi_chip_read,
3817 },
3818
3819 {
3820 .vendor = "Macronix",
hailfinger377ee962009-08-24 01:42:24 +00003821 .name = "MX29F001B",
3822 .bustype = CHIP_BUSTYPE_PARALLEL,
David Hendricksc801adb2010-12-09 16:58:56 -08003823 .manufacture_id = MACRONIX_ID,
3824 .model_id = MACRONIX_MX29F001B,
hailfinger377ee962009-08-24 01:42:24 +00003825 .total_size = 128,
3826 .page_size = 32 * 1024,
snelsonc6855342010-01-28 23:55:12 +00003827 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3828 .tested = TEST_UNTESTED,
3829 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -08003830 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003831 .block_erasers =
3832 {
3833 {
3834 .eraseblocks = {
3835 {8 * 1024, 1},
3836 {4 * 1024, 2},
3837 {8 * 1024, 2},
3838 {32 * 1024, 1},
3839 {64 * 1024, 1},
3840 },
snelsonc6855342010-01-28 23:55:12 +00003841 .block_erase = erase_sector_jedec,
snelson2d471072010-01-09 05:30:14 +00003842 }, {
3843 .eraseblocks = { {128 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00003844 .block_erase = erase_chip_block_jedec,
snelson2d471072010-01-09 05:30:14 +00003845 }
3846 },
hailfingerfff99532009-11-27 17:49:42 +00003847 .write = write_jedec_1,
hailfinger377ee962009-08-24 01:42:24 +00003848 .read = read_memmapped,
3849 },
3850
3851 {
3852 .vendor = "Macronix",
3853 .name = "MX29F001T",
3854 .bustype = CHIP_BUSTYPE_PARALLEL,
David Hendricksc801adb2010-12-09 16:58:56 -08003855 .manufacture_id = MACRONIX_ID,
3856 .model_id = MACRONIX_MX29F001T,
hailfinger377ee962009-08-24 01:42:24 +00003857 .total_size = 128,
3858 .page_size = 32 * 1024,
snelsonc6855342010-01-28 23:55:12 +00003859 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3860 .tested = TEST_UNTESTED,
3861 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -08003862 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003863 .block_erasers =
3864 {
3865 {
3866 .eraseblocks = {
3867 {64 * 1024, 1},
3868 {32 * 1024, 1},
3869 {8 * 1024, 2},
3870 {4 * 1024, 2},
3871 {8 * 1024, 1},
3872 },
snelsonc6855342010-01-28 23:55:12 +00003873 .block_erase = erase_sector_jedec,
snelson2d471072010-01-09 05:30:14 +00003874 }, {
3875 .eraseblocks = { {128 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00003876 .block_erase = erase_chip_block_jedec,
snelson2d471072010-01-09 05:30:14 +00003877 }
3878 },
hailfingerfff99532009-11-27 17:49:42 +00003879 .write = write_jedec_1,
hailfinger377ee962009-08-24 01:42:24 +00003880 .read = read_memmapped,
3881 },
3882
3883 {
3884 .vendor = "Macronix",
hailfinger286829b2009-01-08 03:40:17 +00003885 .name = "MX29F002B",
hailfingera5245512009-06-28 19:19:25 +00003886 .bustype = CHIP_BUSTYPE_PARALLEL,
David Hendricksc801adb2010-12-09 16:58:56 -08003887 .manufacture_id = MACRONIX_ID,
3888 .model_id = MACRONIX_MX29F002B,
hailfinger286829b2009-01-08 03:40:17 +00003889 .total_size = 256,
3890 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00003891 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
hailfinger286829b2009-01-08 03:40:17 +00003892 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00003893 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -08003894 .probe_timing = TIMING_ZERO,
snelson1c03aa12009-12-23 17:05:59 +00003895 .block_erasers =
3896 {
3897 {
3898 .eraseblocks = {
3899 {16 * 1024, 1},
3900 {8 * 1024, 2},
3901 {32 * 1024, 1},
3902 {64 * 1024, 3},
3903 },
snelsonc6855342010-01-28 23:55:12 +00003904 .block_erase = erase_sector_jedec,
snelson1c03aa12009-12-23 17:05:59 +00003905 }, {
3906 .eraseblocks = { {256 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00003907 .block_erase = erase_chip_block_jedec,
snelson1c03aa12009-12-23 17:05:59 +00003908 },
3909 },
hailfingerfff99532009-11-27 17:49:42 +00003910 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00003911 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00003912 },
3913
hailfinger286829b2009-01-08 03:40:17 +00003914 {
3915 .vendor = "Macronix",
3916 .name = "MX29F002T",
hailfingera5245512009-06-28 19:19:25 +00003917 .bustype = CHIP_BUSTYPE_PARALLEL,
David Hendricksc801adb2010-12-09 16:58:56 -08003918 .manufacture_id = MACRONIX_ID,
3919 .model_id = MACRONIX_MX29F002T,
hailfinger286829b2009-01-08 03:40:17 +00003920 .total_size = 256,
3921 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00003922 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08003923 .tested = TEST_OK_PR,
snelsonc6855342010-01-28 23:55:12 +00003924 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -08003925 .probe_timing = TIMING_ZERO,
snelson1c03aa12009-12-23 17:05:59 +00003926 .block_erasers =
3927 {
3928 {
3929 .eraseblocks = {
3930 {64 * 1024, 3},
3931 {32 * 1024, 1},
3932 {8 * 1024, 2},
3933 {16 * 1024, 1},
3934 },
snelsonc6855342010-01-28 23:55:12 +00003935 .block_erase = erase_sector_jedec,
snelson1c03aa12009-12-23 17:05:59 +00003936 }, {
3937 .eraseblocks = { {256 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00003938 .block_erase = erase_chip_block_jedec,
snelson1c03aa12009-12-23 17:05:59 +00003939 },
3940 },
hailfingerfff99532009-11-27 17:49:42 +00003941 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00003942 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00003943 },
3944
hailfinger286829b2009-01-08 03:40:17 +00003945 {
3946 .vendor = "Macronix",
David Hendricksc801adb2010-12-09 16:58:56 -08003947 .name = "MX29F040",
3948 .bustype = CHIP_BUSTYPE_PARALLEL,
3949 .manufacture_id = MACRONIX_ID,
3950 .model_id = MACRONIX_MX29F040,
3951 .total_size = 512,
3952 .page_size = 64 * 1024,
3953 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3954 .tested = TEST_UNTESTED,
3955 .probe = probe_jedec,
3956 .probe_timing = TIMING_ZERO,
3957 .block_erasers =
3958 {
3959 {
3960 .eraseblocks = { {64 * 1024, 8} },
3961 .block_erase = erase_sector_jedec,
3962 }, {
3963 .eraseblocks = { {512 * 1024, 1} },
3964 .block_erase = erase_chip_block_jedec,
3965 },
3966 },
3967 .write = write_jedec_1,
3968 .read = read_memmapped,
3969 },
3970
3971 {
3972 .vendor = "Macronix",
hailfinger94c758e2009-07-24 13:59:27 +00003973 .name = "MX29LV040",
hailfingera5245512009-06-28 19:19:25 +00003974 .bustype = CHIP_BUSTYPE_PARALLEL,
David Hendricksc801adb2010-12-09 16:58:56 -08003975 .manufacture_id = MACRONIX_ID,
3976 .model_id = MACRONIX_MX29LV040,
hailfinger286829b2009-01-08 03:40:17 +00003977 .total_size = 512,
3978 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00003979 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3980 .tested = TEST_UNTESTED,
3981 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -08003982 .probe_timing = TIMING_ZERO,
snelson2d471072010-01-09 05:30:14 +00003983 .block_erasers =
3984 {
3985 {
3986 .eraseblocks = { {64 * 1024, 8}, },
snelsonc6855342010-01-28 23:55:12 +00003987 .block_erase = erase_sector_jedec,
snelson2d471072010-01-09 05:30:14 +00003988 }, {
3989 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00003990 .block_erase = erase_chip_block_jedec,
snelson2d471072010-01-09 05:30:14 +00003991 },
3992 },
hailfingerfff99532009-11-27 17:49:42 +00003993 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00003994 .read = read_memmapped,
hailfinger033cdf02008-12-10 10:32:05 +00003995 },
3996
hailfinger286829b2009-01-08 03:40:17 +00003997 {
David Hendricks82fd8ae2010-08-04 14:34:54 -07003998 .vendor = "MoselVitelic",
3999 .name = "V29C51000B",
4000 .bustype = CHIP_BUSTYPE_PARALLEL,
4001 .manufacture_id = SYNCMOS_MVC_ID,
4002 .model_id = MVC_V29C51000B,
4003 .total_size = 64,
4004 .page_size = 512,
4005 .feature_bits = FEATURE_EITHER_RESET,
4006 .tested = TEST_UNTESTED,
4007 .probe = probe_jedec,
4008 .probe_timing = TIMING_ZERO,
4009 .block_erasers =
4010 {
4011 {
4012 .eraseblocks = { {512, 128} },
4013 .block_erase = erase_sector_jedec,
4014 }, {
4015 .eraseblocks = { {64 * 1024, 1} },
4016 .block_erase = erase_chip_block_jedec,
4017 },
4018 },
4019 .write = write_jedec_1,
4020 .read = read_memmapped,
4021 },
4022
4023 {
4024 .vendor = "MoselVitelic",
4025 .name = "V29C51000T",
4026 .bustype = CHIP_BUSTYPE_PARALLEL,
4027 .manufacture_id = SYNCMOS_MVC_ID,
4028 .model_id = MVC_V29C51000T,
4029 .total_size = 64,
4030 .page_size = 512,
4031 .feature_bits = FEATURE_EITHER_RESET,
4032 .tested = TEST_UNTESTED,
4033 .probe = probe_jedec,
4034 .probe_timing = TIMING_ZERO,
4035 .block_erasers =
4036 {
4037 {
4038 .eraseblocks = { {512, 128} },
4039 .block_erase = erase_sector_jedec,
4040 }, {
4041 .eraseblocks = { {64 * 1024, 1} },
4042 .block_erase = erase_chip_block_jedec,
4043 },
4044 },
4045 .write = write_jedec_1,
4046 .read = read_memmapped,
4047 },
4048
4049 {
4050 .vendor = "MoselVitelic",
4051 .name = "V29C51400B",
4052 .bustype = CHIP_BUSTYPE_PARALLEL,
4053 .manufacture_id = SYNCMOS_MVC_ID,
4054 .model_id = MVC_V29C51400B,
4055 .total_size = 512,
4056 .page_size = 1024,
4057 .feature_bits = FEATURE_EITHER_RESET,
4058 .tested = TEST_UNTESTED,
4059 .probe = probe_jedec,
4060 .probe_timing = TIMING_ZERO,
4061 .block_erasers =
4062 {
4063 {
4064 .eraseblocks = { {1024, 512} },
4065 .block_erase = erase_sector_jedec,
4066 }, {
4067 .eraseblocks = { {512 * 1024, 1} },
4068 .block_erase = erase_chip_block_jedec,
4069 },
4070 },
4071 .write = write_jedec_1,
4072 .read = read_memmapped,
4073 },
4074
4075 {
4076 .vendor = "MoselVitelic",
4077 .name = "V29C51400T",
4078 .bustype = CHIP_BUSTYPE_PARALLEL,
4079 .manufacture_id = SYNCMOS_MVC_ID,
4080 .model_id = MVC_V29C51400T,
4081 .total_size = 512,
4082 .page_size = 1024,
4083 .feature_bits = FEATURE_EITHER_RESET,
4084 .tested = TEST_UNTESTED,
4085 .probe = probe_jedec,
4086 .probe_timing = TIMING_ZERO,
4087 .block_erasers =
4088 {
4089 {
4090 .eraseblocks = { {1024, 512} },
4091 .block_erase = erase_sector_jedec,
4092 }, {
4093 .eraseblocks = { {512 * 1024, 1} },
4094 .block_erase = erase_chip_block_jedec,
4095 },
4096 },
4097 .write = write_jedec_1,
4098 .read = read_memmapped,
4099 },
4100
4101 {
4102 .vendor = "MoselVitelic",
4103 .name = "V29LC51000",
4104 .bustype = CHIP_BUSTYPE_PARALLEL,
4105 .manufacture_id = SYNCMOS_MVC_ID,
4106 .model_id = MVC_V29LC51000,
4107 .total_size = 64,
4108 .page_size = 512,
4109 .feature_bits = FEATURE_EITHER_RESET,
4110 .tested = TEST_UNTESTED,
4111 .probe = probe_jedec,
4112 .probe_timing = TIMING_ZERO,
4113 .block_erasers =
4114 {
4115 {
4116 .eraseblocks = { {512, 128} },
4117 .block_erase = erase_sector_jedec,
4118 }, {
4119 .eraseblocks = { {64 * 1024, 1} },
4120 .block_erase = erase_chip_block_jedec,
4121 },
4122 },
4123 .write = write_jedec_1,
4124 .read = read_memmapped,
4125 },
4126
4127 {
4128 .vendor = "MoselVitelic",
4129 .name = "V29LC51001",
4130 .bustype = CHIP_BUSTYPE_PARALLEL,
4131 .manufacture_id = SYNCMOS_MVC_ID,
4132 .model_id = MVC_V29LC51001,
4133 .total_size = 128,
4134 .page_size = 512,
4135 .feature_bits = FEATURE_EITHER_RESET,
4136 .tested = TEST_UNTESTED,
4137 .probe = probe_jedec,
4138 .probe_timing = TIMING_ZERO,
4139 .block_erasers =
4140 {
4141 {
4142 .eraseblocks = { {512, 256} },
4143 .block_erase = erase_sector_jedec,
4144 }, {
4145 .eraseblocks = { {128 * 1024, 1} },
4146 .block_erase = erase_chip_block_jedec,
4147 },
4148 },
4149 .write = write_jedec_1,
4150 .read = read_memmapped,
4151 },
4152
4153 {
4154 .vendor = "MoselVitelic",
4155 .name = "V29LC51002",
4156 .bustype = CHIP_BUSTYPE_PARALLEL,
4157 .manufacture_id = SYNCMOS_MVC_ID,
4158 .model_id = MVC_V29LC51002,
4159 .total_size = 256,
4160 .page_size = 512,
4161 .feature_bits = FEATURE_EITHER_RESET,
4162 .tested = TEST_UNTESTED,
4163 .probe = probe_jedec,
4164 .probe_timing = TIMING_ZERO,
4165 .block_erasers =
4166 {
4167 {
4168 .eraseblocks = { {512, 512} },
4169 .block_erase = erase_sector_jedec,
4170 }, {
4171 .eraseblocks = { {256 * 1024, 1} },
4172 .block_erase = erase_chip_block_jedec,
4173 },
4174 },
4175 .write = write_jedec_1,
4176 .read = read_memmapped,
4177 },
4178
4179 {
hailfinger286829b2009-01-08 03:40:17 +00004180 .vendor = "Numonyx",
4181 .name = "M25PE10",
hailfinger40167462009-05-31 17:57:34 +00004182 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004183 .manufacture_id = ST_ID,
hailfingerc391ccb2009-06-12 11:45:10 +00004184 .model_id = ST_M25PE10,
hailfinger286829b2009-01-08 03:40:17 +00004185 .total_size = 128,
4186 .page_size = 256,
4187 .tested = TEST_UNTESTED,
4188 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004189 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004190 .block_erasers =
4191 {
4192 {
4193 .eraseblocks = { {4 * 1024, 32} },
4194 .block_erase = spi_block_erase_20,
4195 }, {
4196 .eraseblocks = { {64 * 1024, 2} },
4197 .block_erase = spi_block_erase_d8,
4198 }, {
4199 .eraseblocks = { {128 * 1024, 1} },
4200 .block_erase = spi_block_erase_c7,
4201 }
4202 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004203 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004204 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004205 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004206 },
4207
hailfinger286829b2009-01-08 03:40:17 +00004208 {
4209 .vendor = "Numonyx",
4210 .name = "M25PE20",
hailfinger40167462009-05-31 17:57:34 +00004211 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004212 .manufacture_id = ST_ID,
hailfingerc391ccb2009-06-12 11:45:10 +00004213 .model_id = ST_M25PE20,
hailfinger286829b2009-01-08 03:40:17 +00004214 .total_size = 256,
4215 .page_size = 256,
4216 .tested = TEST_UNTESTED,
4217 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004218 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004219 .block_erasers =
4220 {
4221 {
4222 .eraseblocks = { {4 * 1024, 64} },
4223 .block_erase = spi_block_erase_20,
4224 }, {
4225 .eraseblocks = { {64 * 1024, 4} },
4226 .block_erase = spi_block_erase_d8,
4227 }, {
4228 .eraseblocks = { {256 * 1024, 1} },
4229 .block_erase = spi_block_erase_c7,
4230 }
4231 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004232 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004233 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004234 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004235 },
4236
hailfinger286829b2009-01-08 03:40:17 +00004237 {
4238 .vendor = "Numonyx",
4239 .name = "M25PE40",
hailfinger40167462009-05-31 17:57:34 +00004240 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004241 .manufacture_id = ST_ID,
hailfingerc391ccb2009-06-12 11:45:10 +00004242 .model_id = ST_M25PE40,
snelson4d31f0d2010-01-19 03:23:07 +00004243 .total_size = 512,
hailfinger286829b2009-01-08 03:40:17 +00004244 .page_size = 256,
4245 .tested = TEST_UNTESTED,
4246 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004247 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004248 .block_erasers =
4249 {
4250 {
4251 .eraseblocks = { {4 * 1024, 128} },
4252 .block_erase = spi_block_erase_20,
4253 }, {
4254 .eraseblocks = { {64 * 1024, 8} },
4255 .block_erase = spi_block_erase_d8,
4256 }, {
4257 .eraseblocks = { {512 * 1024, 1} },
4258 .block_erase = spi_block_erase_c7,
4259 }
4260 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004261 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004262 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004263 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004264 },
4265
hailfinger286829b2009-01-08 03:40:17 +00004266 {
4267 .vendor = "Numonyx",
4268 .name = "M25PE80",
hailfinger40167462009-05-31 17:57:34 +00004269 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004270 .manufacture_id = ST_ID,
hailfingerc391ccb2009-06-12 11:45:10 +00004271 .model_id = ST_M25PE80,
hailfinger286829b2009-01-08 03:40:17 +00004272 .total_size = 1024,
4273 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08004274 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00004275 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004276 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004277 .block_erasers =
4278 {
4279 {
4280 .eraseblocks = { {4 * 1024, 256} },
4281 .block_erase = spi_block_erase_20,
4282 }, {
4283 .eraseblocks = { {64 * 1024, 16} },
4284 .block_erase = spi_block_erase_d8,
4285 }, {
4286 .eraseblocks = { {1024 * 1024, 1} },
4287 .block_erase = spi_block_erase_c7,
4288 }
4289 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004290 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004291 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004292 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004293 },
4294
hailfinger286829b2009-01-08 03:40:17 +00004295 {
4296 .vendor = "Numonyx",
4297 .name = "M25PE16",
hailfinger40167462009-05-31 17:57:34 +00004298 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004299 .manufacture_id = ST_ID,
hailfingerc391ccb2009-06-12 11:45:10 +00004300 .model_id = ST_M25PE16,
hailfinger286829b2009-01-08 03:40:17 +00004301 .total_size = 2048,
4302 .page_size = 256,
4303 .tested = TEST_UNTESTED,
4304 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004305 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004306 .block_erasers =
4307 {
4308 {
4309 .eraseblocks = { {4 * 1024, 512} },
4310 .block_erase = spi_block_erase_20,
4311 }, {
4312 .eraseblocks = { {64 * 1024, 32} },
4313 .block_erase = spi_block_erase_d8,
4314 }, {
4315 .eraseblocks = { {2 * 1024 * 1024, 1} },
4316 .block_erase = spi_block_erase_c7,
4317 }
4318 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004319 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004320 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004321 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004322 },
4323
hailfinger286829b2009-01-08 03:40:17 +00004324 {
4325 .vendor = "PMC",
4326 .name = "Pm25LV010",
hailfinger40167462009-05-31 17:57:34 +00004327 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004328 .manufacture_id = PMC_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08004329 .model_id = PMC_PM25LV010,
hailfinger286829b2009-01-08 03:40:17 +00004330 .total_size = 128,
4331 .page_size = 256,
4332 .tested = TEST_UNTESTED,
4333 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004334 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004335 .block_erasers =
4336 {
4337 {
4338 .eraseblocks = { {4 * 1024, 32} },
4339 .block_erase = spi_block_erase_d7,
4340 }, {
4341 .eraseblocks = { {32 * 1024, 4} },
4342 .block_erase = spi_block_erase_d8,
4343 }, {
4344 .eraseblocks = { {128 * 1024, 1} },
4345 .block_erase = spi_block_erase_c7,
4346 }
4347 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004348 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004349 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004350 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004351 },
4352
hailfinger286829b2009-01-08 03:40:17 +00004353 {
4354 .vendor = "PMC",
4355 .name = "Pm25LV016B",
hailfinger40167462009-05-31 17:57:34 +00004356 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004357 .manufacture_id = PMC_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08004358 .model_id = PMC_PM25LV016B,
hailfinger286829b2009-01-08 03:40:17 +00004359 .total_size = 2048,
4360 .page_size = 256,
4361 .tested = TEST_UNTESTED,
4362 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004363 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004364 .block_erasers =
4365 {
4366 {
4367 .eraseblocks = { {4 * 1024, 512} },
4368 .block_erase = spi_block_erase_d7,
4369 }, {
4370 .eraseblocks = { {4 * 1024, 512} },
4371 .block_erase = spi_block_erase_20,
4372 }, {
4373 .eraseblocks = { {64 * 1024, 32} },
4374 .block_erase = spi_block_erase_d8,
4375 }, {
4376 .eraseblocks = { {2 * 1024 * 1024, 1} },
4377 .block_erase = spi_block_erase_60,
4378 }, {
4379 .eraseblocks = { {2 * 1024 * 1024, 1} },
4380 .block_erase = spi_block_erase_c7,
4381 }
4382 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004383 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004384 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004385 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004386 },
4387
hailfinger286829b2009-01-08 03:40:17 +00004388 {
4389 .vendor = "PMC",
4390 .name = "Pm25LV020",
hailfinger40167462009-05-31 17:57:34 +00004391 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004392 .manufacture_id = PMC_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08004393 .model_id = PMC_PM25LV020,
hailfinger286829b2009-01-08 03:40:17 +00004394 .total_size = 256,
4395 .page_size = 256,
4396 .tested = TEST_UNTESTED,
4397 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004398 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004399 .block_erasers =
4400 {
4401 {
4402 .eraseblocks = { {4 * 1024, 64} },
4403 .block_erase = spi_block_erase_d7,
4404 }, {
4405 .eraseblocks = { {64 * 1024, 4} },
4406 .block_erase = spi_block_erase_d8,
4407 }, {
4408 .eraseblocks = { {256 * 1024, 1} },
4409 .block_erase = spi_block_erase_c7,
4410 }
4411 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004412 .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,
stepanaa1b6a22008-12-08 18:15:10 +00004415 },
4416
hailfinger286829b2009-01-08 03:40:17 +00004417 {
4418 .vendor = "PMC",
4419 .name = "Pm25LV040",
hailfinger40167462009-05-31 17:57:34 +00004420 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004421 .manufacture_id = PMC_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08004422 .model_id = PMC_PM25LV040,
hailfinger286829b2009-01-08 03:40:17 +00004423 .total_size = 512,
4424 .page_size = 256,
4425 .tested = TEST_UNTESTED,
4426 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004427 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004428 .block_erasers =
4429 {
4430 {
4431 .eraseblocks = { {4 * 1024, 128} },
4432 .block_erase = spi_block_erase_d7,
4433 }, {
4434 .eraseblocks = { {64 * 1024, 8} },
4435 .block_erase = spi_block_erase_d8,
4436 }, {
4437 .eraseblocks = { {512 * 1024, 1} },
4438 .block_erase = spi_block_erase_c7,
4439 }
4440 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004441 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004442 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004443 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004444 },
4445
hailfinger286829b2009-01-08 03:40:17 +00004446 {
4447 .vendor = "PMC",
4448 .name = "Pm25LV080B",
hailfinger40167462009-05-31 17:57:34 +00004449 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004450 .manufacture_id = PMC_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08004451 .model_id = PMC_PM25LV080B,
hailfinger286829b2009-01-08 03:40:17 +00004452 .total_size = 1024,
4453 .page_size = 256,
4454 .tested = TEST_UNTESTED,
4455 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004456 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004457 .block_erasers =
4458 {
4459 {
4460 .eraseblocks = { {4 * 1024, 256} },
4461 .block_erase = spi_block_erase_d7,
4462 }, {
4463 .eraseblocks = { {4 * 1024, 256} },
4464 .block_erase = spi_block_erase_20,
4465 }, {
4466 .eraseblocks = { {64 * 1024, 16} },
4467 .block_erase = spi_block_erase_d8,
4468 }, {
4469 .eraseblocks = { {1024 * 1024, 1} },
4470 .block_erase = spi_block_erase_60,
4471 }, {
4472 .eraseblocks = { {1024 * 1024, 1} },
4473 .block_erase = spi_block_erase_c7,
4474 }
4475 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004476 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004477 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004478 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004479 },
4480
hailfinger286829b2009-01-08 03:40:17 +00004481 {
4482 .vendor = "PMC",
4483 .name = "Pm25LV512",
hailfinger40167462009-05-31 17:57:34 +00004484 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004485 .manufacture_id = PMC_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08004486 .model_id = PMC_PM25LV512,
hailfinger286829b2009-01-08 03:40:17 +00004487 .total_size = 64,
4488 .page_size = 256,
4489 .tested = TEST_UNTESTED,
4490 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004491 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004492 .block_erasers =
4493 {
4494 {
4495 .eraseblocks = { {4 * 1024, 16} },
4496 .block_erase = spi_block_erase_d7,
4497 }, {
4498 .eraseblocks = { {32 * 1024, 2} },
4499 .block_erase = spi_block_erase_d8,
4500 }, {
4501 .eraseblocks = { {64 * 1024, 1} },
4502 .block_erase = spi_block_erase_c7,
4503 }
4504 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004505 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004506 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004507 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004508 },
4509
hailfinger286829b2009-01-08 03:40:17 +00004510 {
4511 .vendor = "PMC",
hailfingerc43afc92009-12-22 22:15:33 +00004512 .name = "Pm29F002T",
uwe7a083f82009-06-14 21:53:26 +00004513 .bustype = CHIP_BUSTYPE_PARALLEL,
4514 .manufacture_id = PMC_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08004515 .model_id = PMC_PM29F002T,
uwe7a083f82009-06-14 21:53:26 +00004516 .total_size = 256,
hailfingerc43afc92009-12-22 22:15:33 +00004517 .page_size = 8 * 1024,
snelsonc6855342010-01-28 23:55:12 +00004518 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08004519 .tested = TEST_OK_PRE,
snelsonc6855342010-01-28 23:55:12 +00004520 .probe = probe_jedec,
uwe7a083f82009-06-14 21:53:26 +00004521 .probe_timing = TIMING_FIXME,
hailfingerc43afc92009-12-22 22:15:33 +00004522 .block_erasers =
4523 {
4524 {
4525 .eraseblocks = {
4526 {128 * 1024, 1},
4527 {96 * 1024, 1},
4528 {8 * 1024, 2},
4529 {16 * 1024, 1},
4530 },
snelsonc6855342010-01-28 23:55:12 +00004531 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +00004532 }, {
4533 .eraseblocks = { {256 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00004534 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +00004535 },
4536 },
snelsonc6855342010-01-28 23:55:12 +00004537 .write = write_jedec_1,
uwe7a083f82009-06-14 21:53:26 +00004538 .read = read_memmapped,
4539 },
4540
4541 {
4542 .vendor = "PMC",
hailfingerc43afc92009-12-22 22:15:33 +00004543 .name = "Pm29F002B",
uwe7a083f82009-06-14 21:53:26 +00004544 .bustype = CHIP_BUSTYPE_PARALLEL,
4545 .manufacture_id = PMC_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08004546 .model_id = PMC_PM29F002B,
uwe7a083f82009-06-14 21:53:26 +00004547 .total_size = 256,
hailfingerc43afc92009-12-22 22:15:33 +00004548 .page_size = 8 * 1024,
snelsonc6855342010-01-28 23:55:12 +00004549 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
uwe7a083f82009-06-14 21:53:26 +00004550 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00004551 .probe = probe_jedec,
uwe7a083f82009-06-14 21:53:26 +00004552 .probe_timing = TIMING_FIXME,
hailfingerc43afc92009-12-22 22:15:33 +00004553 .block_erasers =
4554 {
4555 {
4556 .eraseblocks = {
4557 {16 * 1024, 1},
4558 {8 * 1024, 2},
4559 {96 * 1024, 1},
4560 {128 * 1024, 1},
4561 },
snelsonc6855342010-01-28 23:55:12 +00004562 .block_erase = erase_sector_jedec,
hailfingerc43afc92009-12-22 22:15:33 +00004563 }, {
4564 .eraseblocks = { {256 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00004565 .block_erase = erase_chip_block_jedec,
hailfingerc43afc92009-12-22 22:15:33 +00004566 },
4567 },
snelsonc6855342010-01-28 23:55:12 +00004568 .write = write_jedec_1,
uwe7a083f82009-06-14 21:53:26 +00004569 .read = read_memmapped,
4570 },
4571
4572 {
4573 .vendor = "PMC",
ruika316f402009-05-17 17:02:07 +00004574 .name = "Pm39LV010",
hailfingera5245512009-06-28 19:19:25 +00004575 .bustype = CHIP_BUSTYPE_PARALLEL,
ruika316f402009-05-17 17:02:07 +00004576 .manufacture_id = PMC_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08004577 .model_id = PMC_PM39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
ruika316f402009-05-17 17:02:07 +00004578 .total_size = 128,
4579 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00004580 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08004581 .tested = TEST_OK_PRE,
ruika316f402009-05-17 17:02:07 +00004582 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00004583 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelson4d31f0d2010-01-19 03:23:07 +00004584 .block_erasers =
4585 {
4586 {
4587 .eraseblocks = { {4 * 1024, 32} },
4588 .block_erase = erase_sector_jedec,
4589 }, {
4590 .eraseblocks = { {64 * 1024, 2} },
4591 .block_erase = erase_block_jedec,
4592 }, {
4593 .eraseblocks = { {128 * 1024, 1} },
4594 .block_erase = erase_chip_block_jedec,
4595 }
4596 },
snelsonc6855342010-01-28 23:55:12 +00004597 .write = write_jedec_1,
ruika316f402009-05-17 17:02:07 +00004598 .read = read_memmapped,
4599 },
4600
4601 {
4602 .vendor = "PMC",
hailfingerd444cc72010-03-27 23:25:14 +00004603 .name = "Pm39LV020",
4604 .bustype = CHIP_BUSTYPE_PARALLEL,
4605 .manufacture_id = PMC_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08004606 .model_id = PMC_PM39LV020,
hailfingerd444cc72010-03-27 23:25:14 +00004607 .total_size = 256,
4608 .page_size = 4096,
4609 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4610 .tested = TEST_UNTESTED,
4611 .probe = probe_jedec,
4612 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4613 .block_erasers =
4614 {
4615 {
4616 .eraseblocks = { {4 * 1024, 64} },
4617 .block_erase = erase_sector_jedec,
4618 }, {
4619 .eraseblocks = { {64 * 1024, 4} },
4620 .block_erase = erase_block_jedec,
4621 }, {
4622 .eraseblocks = { {256 * 1024, 1} },
4623 .block_erase = erase_chip_block_jedec,
4624 }
4625 },
4626 .write = write_jedec_1,
4627 .read = read_memmapped,
4628 },
4629
4630 {
4631 .vendor = "PMC",
4632 .name = "Pm39LV040",
4633 .bustype = CHIP_BUSTYPE_PARALLEL,
4634 .manufacture_id = PMC_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08004635 .model_id = PMC_PM39LV040,
hailfingerd444cc72010-03-27 23:25:14 +00004636 .total_size = 512,
4637 .page_size = 4096,
4638 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4639 .tested = TEST_UNTESTED,
4640 .probe = probe_jedec,
4641 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
4642 .block_erasers =
4643 {
4644 {
4645 .eraseblocks = { {4 * 1024, 128} },
4646 .block_erase = erase_sector_jedec,
4647 }, {
4648 .eraseblocks = { {64 * 1024, 8} },
4649 .block_erase = erase_block_jedec,
4650 }, {
4651 .eraseblocks = { {512 * 1024, 1} },
4652 .block_erase = erase_chip_block_jedec,
4653 }
4654 },
4655 .write = write_jedec_1,
4656 .read = read_memmapped,
4657 },
4658
4659 {
4660 .vendor = "PMC",
hailfinger286829b2009-01-08 03:40:17 +00004661 .name = "Pm49FL002",
David Hendricksc801adb2010-12-09 16:58:56 -08004662 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00004663 .manufacture_id = PMC_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08004664 .model_id = PMC_PM49FL002,
hailfinger286829b2009-01-08 03:40:17 +00004665 .total_size = 256,
4666 .page_size = 16 * 1024,
snelsonc6855342010-01-28 23:55:12 +00004667 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08004668 .tested = TEST_OK_PRE,
hailfingerafac00e2010-01-09 02:24:17 +00004669 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00004670 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
snelson4d31f0d2010-01-19 03:23:07 +00004671 .block_erasers =
4672 {
4673 {
4674 .eraseblocks = { {4 * 1024, 64} },
4675 .block_erase = erase_sector_jedec,
4676 }, {
4677 .eraseblocks = { {16 * 1024, 16} },
4678 .block_erase = erase_block_jedec,
4679 }, {
4680 .eraseblocks = { {256 * 1024, 1} },
4681 .block_erase = erase_chip_block_jedec,
4682 }
4683 },
snelson1ee293c2010-02-19 00:52:10 +00004684 .unlock = unlock_49fl00x,
snelson59c83d22010-02-27 18:01:15 +00004685 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00004686 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00004687 },
4688
hailfinger286829b2009-01-08 03:40:17 +00004689 {
4690 .vendor = "PMC",
4691 .name = "Pm49FL004",
David Hendricksc801adb2010-12-09 16:58:56 -08004692 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00004693 .manufacture_id = PMC_ID_NOPREFIX,
David Hendricksc801adb2010-12-09 16:58:56 -08004694 .model_id = PMC_PM49FL004,
hailfinger286829b2009-01-08 03:40:17 +00004695 .total_size = 512,
4696 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00004697 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08004698 .tested = TEST_OK_PRE,
hailfingerafac00e2010-01-09 02:24:17 +00004699 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00004700 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
snelson4d31f0d2010-01-19 03:23:07 +00004701 .block_erasers =
4702 {
4703 {
4704 .eraseblocks = { {4 * 1024, 128} },
4705 .block_erase = erase_sector_jedec,
4706 }, {
4707 .eraseblocks = { {64 * 1024, 8} },
4708 .block_erase = erase_block_jedec,
4709 }, {
4710 .eraseblocks = { {512 * 1024, 1} },
4711 .block_erase = erase_chip_block_jedec,
4712 }
4713 },
snelson1ee293c2010-02-19 00:52:10 +00004714 .unlock = unlock_49fl00x,
snelson59c83d22010-02-27 18:01:15 +00004715 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00004716 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00004717 },
4718
hailfinger286829b2009-01-08 03:40:17 +00004719 {
hailfingerf6aa9cc2009-11-24 02:11:08 +00004720 .vendor = "Sanyo",
4721 .name = "LF25FW203A",
4722 .bustype = CHIP_BUSTYPE_SPI,
4723 .manufacture_id = SANYO_ID,
4724 .model_id = SANYO_LE25FW203A,
4725 .total_size = 2048,
4726 .page_size = 256,
4727 .tested = TEST_UNTESTED,
4728 .probe = probe_spi_rdid,
4729 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004730 .block_erasers =
4731 {
4732 {
4733 .eraseblocks = { {64 * 1024, 32} },
4734 .block_erase = spi_block_erase_d8,
4735 }, {
4736 .eraseblocks = { {2 * 1024 * 1024, 1} },
4737 .block_erase = spi_block_erase_c7,
4738 }
4739 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004740 .unlock = spi_disable_blockprotect,
hailfingerf6aa9cc2009-11-24 02:11:08 +00004741 .write = spi_chip_write_256,
4742 .read = spi_chip_read,
4743 },
4744
4745 {
hailfinger286829b2009-01-08 03:40:17 +00004746 .vendor = "Sharp",
4747 .name = "LHF00L04",
hailfingera5245512009-06-28 19:19:25 +00004748 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00004749 .manufacture_id = SHARP_ID,
4750 .model_id = SHARP_LHF00L04,
4751 .total_size = 1024,
4752 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00004753 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00004754 .tested = TEST_UNTESTED,
hailfingerb8e4e212010-03-15 03:48:42 +00004755 .probe = probe_82802ab,
hailfinger4481d9d2010-01-07 21:23:45 +00004756 .probe_timing = TIMING_ZERO,
hailfinger4481d9d2010-01-07 21:23:45 +00004757 .block_erasers =
4758 {
4759 {
4760 .eraseblocks = {
4761 {64 * 1024, 15},
4762 {8 * 1024, 8}
4763 },
snelsonc0acbeb2010-03-19 18:47:06 +00004764 .block_erase = erase_block_82802ab,
hailfinger4481d9d2010-01-07 21:23:45 +00004765 }, {
4766 .eraseblocks = {
4767 {1024 * 1024, 1}
4768 },
snelson264e57c2010-01-20 20:55:53 +00004769 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
hailfinger4481d9d2010-01-07 21:23:45 +00004770 },
4771 },
snelsonc0acbeb2010-03-19 18:47:06 +00004772 .unlock = unlock_82802ab,
4773 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00004774 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00004775 },
4776
hailfinger286829b2009-01-08 03:40:17 +00004777 {
4778 .vendor = "Spansion",
David Hendricks668f29d2011-01-27 18:51:45 -08004779 .name = "S25FL004A",
4780 .bustype = CHIP_BUSTYPE_SPI,
4781 .manufacture_id = SPANSION_ID,
4782 .model_id = SPANSION_S25FL004A,
4783 .total_size = 512,
4784 .page_size = 256,
4785 .tested = TEST_UNTESTED,
4786 .probe = probe_spi_rdid,
4787 .probe_timing = TIMING_ZERO,
4788 .block_erasers =
4789 {
4790 {
4791 .eraseblocks = { {64 * 1024, 8} },
4792 .block_erase = spi_block_erase_d8,
4793 }, {
4794 .eraseblocks = { {512 * 1024, 1} },
4795 .block_erase = spi_block_erase_c7,
4796 }
4797 },
4798 .unlock = spi_disable_blockprotect,
4799 .write = spi_chip_write_256,
4800 .read = spi_chip_read,
4801 },
4802
4803 {
4804 .vendor = "Spansion",
mkarcher7b3a9152010-01-12 23:29:30 +00004805 .name = "S25FL008A",
4806 .bustype = CHIP_BUSTYPE_SPI,
4807 .manufacture_id = SPANSION_ID,
4808 .model_id = SPANSION_S25FL008A,
4809 .total_size = 1024,
4810 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08004811 .tested = TEST_OK_PRE,
mkarcher7b3a9152010-01-12 23:29:30 +00004812 .probe = probe_spi_rdid,
4813 .probe_timing = TIMING_ZERO,
mkarcher7b3a9152010-01-12 23:29:30 +00004814 .block_erasers =
4815 {
4816 {
4817 .eraseblocks = { {64 * 1024, 16} },
4818 .block_erase = spi_block_erase_d8,
4819 }, {
4820 .eraseblocks = { {1024 * 1024, 1} },
4821 .block_erase = spi_block_erase_c7,
4822 }
4823 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004824 .unlock = spi_disable_blockprotect,
mkarcher7b3a9152010-01-12 23:29:30 +00004825 .write = spi_chip_write_256,
4826 .read = spi_chip_read,
4827 },
4828
4829 {
4830 .vendor = "Spansion",
hailfinger286829b2009-01-08 03:40:17 +00004831 .name = "S25FL016A",
hailfinger40167462009-05-31 17:57:34 +00004832 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004833 .manufacture_id = SPANSION_ID,
4834 .model_id = SPANSION_S25FL016A,
4835 .total_size = 2048,
4836 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08004837 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00004838 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004839 .probe_timing = TIMING_ZERO,
snelson4d31f0d2010-01-19 03:23:07 +00004840 .block_erasers =
4841 {
4842 {
4843 .eraseblocks = { {64 * 1024, 32} },
4844 .block_erase = spi_block_erase_d8,
4845 }, {
4846 .eraseblocks = { {2 * 1024 * 1024, 1} },
4847 .block_erase = spi_block_erase_c7,
4848 }
4849 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004850 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00004851 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00004852 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004853 },
4854
hailfinger286829b2009-01-08 03:40:17 +00004855 {
David Hendricks668f29d2011-01-27 18:51:45 -08004856 .vendor = "Spansion",
4857 .name = "S25FL032A",
4858 .bustype = CHIP_BUSTYPE_SPI,
4859 .manufacture_id = SPANSION_ID,
4860 .model_id = SPANSION_S25FL032A,
4861 .total_size = 4096,
4862 .page_size = 256,
4863 .tested = TEST_UNTESTED,
4864 .probe = probe_spi_rdid,
4865 .probe_timing = TIMING_ZERO,
4866 .block_erasers =
4867 {
4868 {
4869 .eraseblocks = { {64 * 1024, 64} },
4870 .block_erase = spi_block_erase_d8,
4871 }, {
4872 .eraseblocks = { {4 * 1024 * 1024, 1} },
4873 .block_erase = spi_block_erase_c7,
4874 }
4875 },
4876 .unlock = spi_disable_blockprotect,
4877 .write = spi_chip_write_256,
4878 .read = spi_chip_read,
4879 },
4880
4881 {
4882 .vendor = "Spansion",
4883 .name = "S25FL064A",
4884 .bustype = CHIP_BUSTYPE_SPI,
4885 .manufacture_id = SPANSION_ID,
4886 .model_id = SPANSION_S25FL064A,
4887 .total_size = 8192,
4888 .page_size = 256,
4889 .tested = TEST_OK_PREW,
4890 .probe = probe_spi_rdid,
4891 .probe_timing = TIMING_ZERO,
4892 .block_erasers =
4893 {
4894 {
4895 .eraseblocks = { {64 * 1024, 128} },
4896 .block_erase = spi_block_erase_d8,
4897 }, {
4898 .eraseblocks = { {8 * 1024 * 1024, 1} },
4899 .block_erase = spi_block_erase_c7,
4900 }
4901 },
4902 .unlock = spi_disable_blockprotect,
4903 .write = spi_chip_write_256,
4904 .read = spi_chip_read,
4905 },
4906
4907 {
4908 .vendor = "SST",
4909 .name = "SST25VF010.REMS",
4910 .bustype = CHIP_BUSTYPE_SPI,
4911 .manufacture_id = SST_ID,
4912 .model_id = SST_SST25VF010_REMS,
4913 .total_size = 128,
4914 .page_size = 256,
4915 .tested = TEST_OK_PREW,
4916 .probe = probe_spi_rems,
4917 .probe_timing = TIMING_ZERO,
4918 .block_erasers =
4919 {
4920 {
4921 .eraseblocks = { {4 * 1024, 32} },
4922 .block_erase = spi_block_erase_20,
4923 }, {
4924 .eraseblocks = { {32 * 1024, 4} },
4925 .block_erase = spi_block_erase_52,
4926 }, {
4927 .eraseblocks = { {128 * 1024, 1} },
4928 .block_erase = spi_block_erase_60,
4929 },
4930 },
4931 .unlock = spi_disable_blockprotect,
4932 .write = spi_chip_write_1,
4933 .read = spi_chip_read,
4934 },
4935
4936 {
hailfinger286829b2009-01-08 03:40:17 +00004937 .vendor = "SST",
4938 .name = "SST25VF016B",
hailfinger40167462009-05-31 17:57:34 +00004939 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004940 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08004941 .model_id = SST_SST25VF016B,
hailfinger286829b2009-01-08 03:40:17 +00004942 .total_size = 2048,
4943 .page_size = 256,
David Hendricks668f29d2011-01-27 18:51:45 -08004944 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00004945 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004946 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00004947 .block_erasers =
4948 {
4949 {
4950 .eraseblocks = { {4 * 1024, 512} },
4951 .block_erase = spi_block_erase_20,
4952 }, {
4953 .eraseblocks = { {32 * 1024, 64} },
4954 .block_erase = spi_block_erase_52,
4955 }, {
4956 .eraseblocks = { {64 * 1024, 32} },
4957 .block_erase = spi_block_erase_d8,
4958 }, {
4959 .eraseblocks = { {2 * 1024 * 1024, 1} },
4960 .block_erase = spi_block_erase_60,
4961 }, {
4962 .eraseblocks = { {2 * 1024 * 1024, 1} },
4963 .block_erase = spi_block_erase_c7,
4964 },
4965 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07004966 .unlock = spi_disable_blockprotect,
hailfinger065ae122009-05-13 22:19:12 +00004967 .write = spi_chip_write_1,
hailfinger286829b2009-01-08 03:40:17 +00004968 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00004969 },
4970
hailfinger286829b2009-01-08 03:40:17 +00004971 {
4972 .vendor = "SST",
4973 .name = "SST25VF032B",
hailfinger40167462009-05-31 17:57:34 +00004974 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00004975 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08004976 .model_id = SST_SST25VF032B,
hailfinger286829b2009-01-08 03:40:17 +00004977 .total_size = 4096,
4978 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08004979 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00004980 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00004981 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00004982 .block_erasers =
4983 {
4984 {
4985 .eraseblocks = { {4 * 1024, 1024} },
4986 .block_erase = spi_block_erase_20,
4987 }, {
4988 .eraseblocks = { {32 * 1024, 128} },
4989 .block_erase = spi_block_erase_52,
4990 }, {
4991 .eraseblocks = { {64 * 1024, 64} },
4992 .block_erase = spi_block_erase_d8,
4993 }, {
4994 .eraseblocks = { {4 * 1024 * 1024, 1} },
4995 .block_erase = spi_block_erase_60,
4996 }, {
4997 .eraseblocks = { {4 * 1024 * 1024, 1} },
4998 .block_erase = spi_block_erase_c7,
4999 },
5000 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07005001 .unlock = spi_disable_blockprotect,
David Hendricksc801adb2010-12-09 16:58:56 -08005002 .write = spi_aai_write,
David Hendricks82fd8ae2010-08-04 14:34:54 -07005003 .read = spi_chip_read,
5004 },
5005
5006 {
5007 .vendor = "SST",
5008 .name = "SST25VF064C",
5009 .bustype = CHIP_BUSTYPE_SPI,
5010 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005011 .model_id = SST_SST25VF064C,
David Hendricks82fd8ae2010-08-04 14:34:54 -07005012 .total_size = 8192,
5013 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08005014 .tested = TEST_OK_PRE,
David Hendricks82fd8ae2010-08-04 14:34:54 -07005015 .probe = probe_spi_rdid,
5016 .probe_timing = TIMING_ZERO,
5017 .block_erasers =
5018 {
5019 {
5020 .eraseblocks = { {4 * 1024, 2048} },
5021 .block_erase = spi_block_erase_20,
5022 }, {
5023 .eraseblocks = { {32 * 1024, 256} },
5024 .block_erase = spi_block_erase_52,
5025 }, {
5026 .eraseblocks = { {64 * 1024, 128} },
5027 .block_erase = spi_block_erase_d8,
5028 }, {
5029 .eraseblocks = { {8 * 1024 * 1024, 1} },
5030 .block_erase = spi_block_erase_60,
5031 }, {
5032 .eraseblocks = { {8 * 1024 * 1024, 1} },
5033 .block_erase = spi_block_erase_c7,
5034 },
5035 },
5036 .unlock = spi_disable_blockprotect,
David Hendricksc801adb2010-12-09 16:58:56 -08005037 .write = spi_chip_write_256,
hailfinger3aa0df12009-12-23 12:16:47 +00005038 .read = spi_chip_read,
5039 },
5040
5041 {
5042 .vendor = "SST",
5043 .name = "SST25VF040.REMS",
5044 .bustype = CHIP_BUSTYPE_SPI,
5045 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005046 .model_id = SST_SST25VF040_REMS,
hailfinger3aa0df12009-12-23 12:16:47 +00005047 .total_size = 512,
5048 .page_size = 256,
5049 .tested = TEST_OK_PR,
5050 .probe = probe_spi_rems,
5051 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00005052 .block_erasers =
5053 {
5054 {
5055 .eraseblocks = { {4 * 1024, 128} },
5056 .block_erase = spi_block_erase_20,
5057 }, {
5058 .eraseblocks = { {32 * 1024, 16} },
5059 .block_erase = spi_block_erase_52,
5060 }, {
5061 .eraseblocks = { {512 * 1024, 1} },
5062 .block_erase = spi_block_erase_60,
5063 },
5064 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07005065 .unlock = spi_disable_blockprotect,
hailfinger065ae122009-05-13 22:19:12 +00005066 .write = spi_chip_write_1,
hailfinger286829b2009-01-08 03:40:17 +00005067 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00005068 },
5069
hailfinger286829b2009-01-08 03:40:17 +00005070 {
5071 .vendor = "SST",
5072 .name = "SST25VF040B",
hailfinger40167462009-05-31 17:57:34 +00005073 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005074 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005075 .model_id = SST_SST25VF040B,
hailfinger286829b2009-01-08 03:40:17 +00005076 .total_size = 512,
5077 .page_size = 256,
5078 .tested = TEST_UNTESTED,
5079 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005080 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00005081 .block_erasers =
5082 {
5083 {
5084 .eraseblocks = { {4 * 1024, 128} },
5085 .block_erase = spi_block_erase_20,
5086 }, {
5087 .eraseblocks = { {32 * 1024, 16} },
5088 .block_erase = spi_block_erase_52,
5089 }, {
5090 .eraseblocks = { {64 * 1024, 8} },
5091 .block_erase = spi_block_erase_d8,
5092 }, {
5093 .eraseblocks = { {512 * 1024, 1} },
5094 .block_erase = spi_block_erase_60,
5095 }, {
5096 .eraseblocks = { {512 * 1024, 1} },
5097 .block_erase = spi_block_erase_c7,
5098 },
5099 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07005100 .unlock = spi_disable_blockprotect,
hailfinger065ae122009-05-13 22:19:12 +00005101 .write = spi_chip_write_1,
stuge48dda5c2009-02-25 08:07:33 +00005102 .read = spi_chip_read,
5103 },
5104
5105 {
5106 .vendor = "SST",
hailfinger0782b1e2010-06-14 12:58:06 +00005107 .name = "SST25LF040A.RES",
5108 .bustype = CHIP_BUSTYPE_SPI,
5109 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005110 .model_id = SST_SST25VF040_REMS,
hailfinger0782b1e2010-06-14 12:58:06 +00005111 .total_size = 512,
5112 .page_size = 256,
5113 .tested = TEST_OK_PROBE,
5114 .probe = probe_spi_res2,
5115 .probe_timing = TIMING_ZERO,
5116 .block_erasers =
5117 {
5118 {
5119 .eraseblocks = { {4 * 1024, 128} },
5120 .block_erase = spi_block_erase_20,
5121 }, {
5122 .eraseblocks = { {32 * 1024, 16} },
5123 .block_erase = spi_block_erase_52,
5124 }, {
5125 .eraseblocks = { {512 * 1024, 1} },
5126 .block_erase = spi_block_erase_60,
5127 },
5128 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07005129 .unlock = spi_disable_blockprotect,
hailfinger0782b1e2010-06-14 12:58:06 +00005130 .write = spi_chip_write_1,
5131 .read = spi_chip_read,
5132 },
5133
5134 {
5135 .vendor = "SST",
stuge712ce862009-01-26 03:37:40 +00005136 .name = "SST25VF040B.REMS",
hailfinger40167462009-05-31 17:57:34 +00005137 .bustype = CHIP_BUSTYPE_SPI,
hailfingerc391ccb2009-06-12 11:45:10 +00005138 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005139 .model_id = SST_SST25VF040B_REMS,
stuge712ce862009-01-26 03:37:40 +00005140 .total_size = 512,
hailfinger3aa0df12009-12-23 12:16:47 +00005141 .page_size = 256,
stuge712ce862009-01-26 03:37:40 +00005142 .tested = TEST_OK_PR,
5143 .probe = probe_spi_rems,
hailfingere3095d92009-06-05 13:46:17 +00005144 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00005145 .block_erasers =
5146 {
5147 {
5148 .eraseblocks = { {4 * 1024, 128} },
5149 .block_erase = spi_block_erase_20,
5150 }, {
5151 .eraseblocks = { {32 * 1024, 16} },
5152 .block_erase = spi_block_erase_52,
5153 }, {
5154 .eraseblocks = { {64 * 1024, 8} },
5155 .block_erase = spi_block_erase_d8,
5156 }, {
5157 .eraseblocks = { {512 * 1024, 1} },
5158 .block_erase = spi_block_erase_60,
5159 }, {
5160 .eraseblocks = { {512 * 1024, 1} },
5161 .block_erase = spi_block_erase_c7,
5162 },
5163 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07005164 .unlock = spi_disable_blockprotect,
hailfinger065ae122009-05-13 22:19:12 +00005165 .write = spi_chip_write_1,
stuge712ce862009-01-26 03:37:40 +00005166 .read = spi_chip_read,
5167 },
5168
5169 {
5170 .vendor = "SST",
hailfinger286829b2009-01-08 03:40:17 +00005171 .name = "SST25VF080B",
hailfinger40167462009-05-31 17:57:34 +00005172 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005173 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005174 .model_id = SST_SST25VF080B,
hailfinger286829b2009-01-08 03:40:17 +00005175 .total_size = 1024,
5176 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08005177 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005178 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005179 .probe_timing = TIMING_ZERO,
hailfinger3aa0df12009-12-23 12:16:47 +00005180 .block_erasers =
5181 {
5182 {
5183 .eraseblocks = { {4 * 1024, 256} },
5184 .block_erase = spi_block_erase_20,
5185 }, {
5186 .eraseblocks = { {32 * 1024, 32} },
5187 .block_erase = spi_block_erase_52,
5188 }, {
5189 .eraseblocks = { {64 * 1024, 16} },
5190 .block_erase = spi_block_erase_d8,
5191 }, {
5192 .eraseblocks = { {1024 * 1024, 1} },
5193 .block_erase = spi_block_erase_60,
5194 }, {
5195 .eraseblocks = { {1024 * 1024, 1} },
5196 .block_erase = spi_block_erase_c7,
5197 },
5198 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07005199 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005200 .write = spi_chip_write_1,
hailfinger286829b2009-01-08 03:40:17 +00005201 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00005202 },
5203
hailfinger286829b2009-01-08 03:40:17 +00005204 {
5205 .vendor = "SST",
5206 .name = "SST28SF040A",
hailfingera5245512009-06-28 19:19:25 +00005207 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005208 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005209 .model_id = SST_SST28SF040,
hailfinger286829b2009-01-08 03:40:17 +00005210 .total_size = 512,
5211 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00005212 .feature_bits = 0,
hailfinger286829b2009-01-08 03:40:17 +00005213 .tested = TEST_UNTESTED,
hailfingerb8e4e212010-03-15 03:48:42 +00005214 .probe = probe_82802ab,
hailfingerd5b35922009-06-03 14:46:22 +00005215 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
snelson264e57c2010-01-20 20:55:53 +00005216 .block_erasers =
5217 {
5218 {
5219 .eraseblocks = { {128, 4096} },
5220 .block_erase = erase_sector_28sf040,
5221 }, {
5222 .eraseblocks = { {512 * 1024, 1} },
5223 .block_erase = erase_chip_28sf040,
5224 }
5225 },
David Hendricksc801adb2010-12-09 16:58:56 -08005226 .unlock = unprotect_28sf040,
hailfinger286829b2009-01-08 03:40:17 +00005227 .write = write_28sf040,
hailfinger23060112009-05-08 12:49:03 +00005228 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005229 },
5230
hailfinger286829b2009-01-08 03:40:17 +00005231 {
5232 .vendor = "SST",
5233 .name = "SST29EE010",
hailfingera5245512009-06-28 19:19:25 +00005234 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005235 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005236 .model_id = SST_SST29EE010,
hailfinger286829b2009-01-08 03:40:17 +00005237 .total_size = 128,
5238 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00005239 .feature_bits = FEATURE_LONG_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005240 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00005241 .probe = probe_jedec,
hailfingerc391ccb2009-06-12 11:45:10 +00005242 .probe_timing = 10,
snelson264e57c2010-01-20 20:55:53 +00005243 .block_erasers =
5244 {
5245 {
5246 .eraseblocks = { {128 * 1024, 1} },
5247 .block_erase = erase_chip_block_jedec,
5248 }
5249 },
hailfinger286829b2009-01-08 03:40:17 +00005250 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00005251 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005252 },
5253
hailfinger286829b2009-01-08 03:40:17 +00005254 {
5255 .vendor = "SST",
5256 .name = "SST29LE010",
hailfingera5245512009-06-28 19:19:25 +00005257 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005258 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005259 .model_id = SST_SST29LE010,
hailfinger286829b2009-01-08 03:40:17 +00005260 .total_size = 128,
5261 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00005262 .feature_bits = FEATURE_LONG_RESET,
hailfinger286829b2009-01-08 03:40:17 +00005263 .tested = TEST_UNTESTED,
5264 .probe = probe_jedec,
hailfingerc391ccb2009-06-12 11:45:10 +00005265 .probe_timing = 10,
snelson264e57c2010-01-20 20:55:53 +00005266 .block_erasers =
5267 {
5268 {
5269 .eraseblocks = { {128 * 1024, 1} },
5270 .block_erase = erase_chip_block_jedec,
5271 }
5272 },
hailfinger286829b2009-01-08 03:40:17 +00005273 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00005274 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005275 },
5276
hailfinger286829b2009-01-08 03:40:17 +00005277 {
5278 .vendor = "SST",
5279 .name = "SST29EE020A",
hailfingera5245512009-06-28 19:19:25 +00005280 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005281 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005282 .model_id = SST_SST29EE020A,
hailfinger286829b2009-01-08 03:40:17 +00005283 .total_size = 256,
5284 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00005285 .feature_bits = FEATURE_LONG_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005286 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005287 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00005288 .probe_timing = 10,
snelson264e57c2010-01-20 20:55:53 +00005289 .block_erasers =
5290 {
5291 {
5292 .eraseblocks = { {256 * 1024, 1} },
5293 .block_erase = erase_chip_block_jedec,
5294 }
5295 },
hailfinger286829b2009-01-08 03:40:17 +00005296 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00005297 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005298 },
5299
hailfinger286829b2009-01-08 03:40:17 +00005300 {
5301 .vendor = "SST",
5302 .name = "SST29LE020",
hailfingera5245512009-06-28 19:19:25 +00005303 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005304 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005305 .model_id = SST_SST29LE020,
hailfinger286829b2009-01-08 03:40:17 +00005306 .total_size = 256,
5307 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00005308 .feature_bits = FEATURE_LONG_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005309 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005310 .probe = probe_jedec,
hailfingerc391ccb2009-06-12 11:45:10 +00005311 .probe_timing = 10,
snelson264e57c2010-01-20 20:55:53 +00005312 .block_erasers =
5313 {
5314 {
5315 .eraseblocks = { {256 * 1024, 1} },
5316 .block_erase = erase_chip_block_jedec,
5317 }
5318 },
hailfinger286829b2009-01-08 03:40:17 +00005319 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00005320 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005321 },
5322
hailfinger286829b2009-01-08 03:40:17 +00005323 {
5324 .vendor = "SST",
uwe2c909142010-01-23 15:15:19 +00005325 .name = "SST39SF512",
5326 .bustype = CHIP_BUSTYPE_PARALLEL,
5327 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005328 .model_id = SST_SST39SF512,
uwe2c909142010-01-23 15:15:19 +00005329 .total_size = 64,
5330 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005331 .feature_bits = FEATURE_EITHER_RESET,
5332 .tested = TEST_UNTESTED,
uwe2c909142010-01-23 15:15:19 +00005333 .probe = probe_jedec,
5334 .probe_timing = 1, /* 150 ns */
uwe2c909142010-01-23 15:15:19 +00005335 .block_erasers =
5336 {
5337 {
5338 .eraseblocks = { {4 * 1024, 16} },
5339 .block_erase = erase_sector_jedec,
5340 }, {
5341 .eraseblocks = { {64 * 1024, 1} },
5342 .block_erase = erase_chip_block_jedec,
5343 }
5344 },
snelsonc6855342010-01-28 23:55:12 +00005345 .write = write_jedec_1,
uwe2c909142010-01-23 15:15:19 +00005346 .read = read_memmapped,
5347 },
5348
5349 {
5350 .vendor = "SST",
hailfinger286829b2009-01-08 03:40:17 +00005351 .name = "SST39SF010A",
hailfingera5245512009-06-28 19:19:25 +00005352 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005353 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005354 .model_id = SST_SST39SF010,
hailfinger286829b2009-01-08 03:40:17 +00005355 .total_size = 128,
5356 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005357 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005358 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00005359 .probe = probe_jedec,
hailfingerc391ccb2009-06-12 11:45:10 +00005360 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005361 .block_erasers =
5362 {
5363 {
5364 .eraseblocks = { {4 * 1024, 32} },
5365 .block_erase = erase_sector_jedec,
5366 }, {
5367 .eraseblocks = { {128 * 1024, 1} },
5368 .block_erase = erase_chip_block_jedec,
5369 }
5370 },
snelsonc6855342010-01-28 23:55:12 +00005371 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005372 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005373 },
5374
hailfinger286829b2009-01-08 03:40:17 +00005375 {
5376 .vendor = "SST",
5377 .name = "SST39SF020A",
hailfingera5245512009-06-28 19:19:25 +00005378 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005379 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005380 .model_id = SST_SST39SF020,
hailfinger286829b2009-01-08 03:40:17 +00005381 .total_size = 256,
5382 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005383 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005384 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005385 .probe = probe_jedec,
David Hendricksc801adb2010-12-09 16:58:56 -08005386 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005387 .block_erasers =
5388 {
5389 {
5390 .eraseblocks = { {4 * 1024, 64} },
5391 .block_erase = erase_sector_jedec,
5392 }, {
5393 .eraseblocks = { {256 * 1024, 1} },
5394 .block_erase = erase_chip_block_jedec,
5395 }
5396 },
snelsonc6855342010-01-28 23:55:12 +00005397 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005398 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005399 },
5400
hailfinger286829b2009-01-08 03:40:17 +00005401 {
5402 .vendor = "SST",
5403 .name = "SST39SF040",
hailfingera5245512009-06-28 19:19:25 +00005404 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005405 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005406 .model_id = SST_SST39SF040,
hailfinger286829b2009-01-08 03:40:17 +00005407 .total_size = 512,
5408 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005409 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005410 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005411 .probe = probe_jedec,
David Hendricksc801adb2010-12-09 16:58:56 -08005412 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005413 .block_erasers =
5414 {
5415 {
5416 .eraseblocks = { {4 * 1024, 128} },
5417 .block_erase = erase_sector_jedec,
5418 }, {
5419 .eraseblocks = { {512 * 1024, 1} },
5420 .block_erase = erase_chip_block_jedec,
5421 }
5422 },
snelsonc6855342010-01-28 23:55:12 +00005423 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005424 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005425 },
5426
hailfinger286829b2009-01-08 03:40:17 +00005427 {
5428 .vendor = "SST",
5429 .name = "SST39VF512",
hailfingera5245512009-06-28 19:19:25 +00005430 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005431 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005432 .model_id = SST_SST39VF512,
hailfinger286829b2009-01-08 03:40:17 +00005433 .total_size = 64,
5434 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005435 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005436 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005437 .probe = probe_jedec,
David Hendricksc801adb2010-12-09 16:58:56 -08005438 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005439 .block_erasers =
5440 {
5441 {
5442 .eraseblocks = { {4 * 1024, 16} },
5443 .block_erase = erase_sector_jedec,
5444 }, {
5445 .eraseblocks = { {64 * 1024, 1} },
5446 .block_erase = erase_chip_block_jedec,
5447 }
5448 },
snelsonc6855342010-01-28 23:55:12 +00005449 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005450 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005451 },
5452
hailfinger286829b2009-01-08 03:40:17 +00005453 {
5454 .vendor = "SST",
5455 .name = "SST39VF010",
hailfingera5245512009-06-28 19:19:25 +00005456 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005457 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005458 .model_id = SST_SST39VF010,
hailfinger286829b2009-01-08 03:40:17 +00005459 .total_size = 128,
5460 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005461 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005462 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005463 .probe = probe_jedec,
David Hendricksc801adb2010-12-09 16:58:56 -08005464 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005465 .block_erasers =
5466 {
5467 {
5468 .eraseblocks = { {4 * 1024, 32} },
5469 .block_erase = erase_sector_jedec,
5470 }, {
5471 .eraseblocks = { {128 * 1024, 1} },
5472 .block_erase = erase_chip_block_jedec,
5473 }
5474 },
snelsonc6855342010-01-28 23:55:12 +00005475 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005476 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005477 },
5478
hailfinger286829b2009-01-08 03:40:17 +00005479 {
5480 .vendor = "SST",
5481 .name = "SST39VF020",
hailfingera5245512009-06-28 19:19:25 +00005482 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005483 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005484 .model_id = SST_SST39VF020,
hailfinger286829b2009-01-08 03:40:17 +00005485 .total_size = 256,
5486 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005487 .feature_bits = FEATURE_EITHER_RESET,
5488 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00005489 .probe = probe_jedec,
David Hendricksc801adb2010-12-09 16:58:56 -08005490 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005491 .block_erasers =
5492 {
5493 {
5494 .eraseblocks = { {4 * 1024, 64} },
5495 .block_erase = erase_sector_jedec,
5496 }, {
5497 .eraseblocks = { {256 * 1024, 1} },
5498 .block_erase = erase_chip_block_jedec,
5499 }
5500 },
snelsonc6855342010-01-28 23:55:12 +00005501 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005502 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005503 },
5504
hailfinger286829b2009-01-08 03:40:17 +00005505 {
5506 .vendor = "SST",
5507 .name = "SST39VF040",
hailfingera5245512009-06-28 19:19:25 +00005508 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00005509 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005510 .model_id = SST_SST39VF040,
hailfinger286829b2009-01-08 03:40:17 +00005511 .total_size = 512,
5512 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005513 .feature_bits = FEATURE_EITHER_RESET,
5514 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00005515 .probe = probe_jedec,
David Hendricksc801adb2010-12-09 16:58:56 -08005516 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005517 .block_erasers =
5518 {
5519 {
5520 .eraseblocks = { {4 * 1024, 128} },
5521 .block_erase = erase_sector_jedec,
5522 }, {
5523 .eraseblocks = { {512 * 1024, 1} },
5524 .block_erase = erase_chip_block_jedec,
5525 }
5526 },
snelsonc6855342010-01-28 23:55:12 +00005527 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005528 .read = read_memmapped,
hailfingerdfa338f2008-12-08 23:51:45 +00005529 },
stepanaa1b6a22008-12-08 18:15:10 +00005530
hailfinger286829b2009-01-08 03:40:17 +00005531 {
5532 .vendor = "SST",
stuged9f66152009-01-25 23:55:12 +00005533 .name = "SST39VF080",
hailfingera5245512009-06-28 19:19:25 +00005534 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingerc391ccb2009-06-12 11:45:10 +00005535 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005536 .model_id = SST_SST39VF080,
stuged9f66152009-01-25 23:55:12 +00005537 .total_size = 1024,
5538 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005539 .feature_bits = FEATURE_EITHER_RESET,
stuged9f66152009-01-25 23:55:12 +00005540 .tested = TEST_UNTESTED,
5541 .probe = probe_jedec,
David Hendricksc801adb2010-12-09 16:58:56 -08005542 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005543 .block_erasers =
5544 {
5545 {
5546 .eraseblocks = { {4 * 1024, 256} },
5547 .block_erase = erase_sector_jedec,
5548 }, {
5549 .eraseblocks = { {64 * 1024, 16} },
5550 .block_erase = erase_block_jedec,
5551 }, {
5552 .eraseblocks = { {1024 * 1024, 1} },
5553 .block_erase = erase_chip_block_jedec,
5554 }
5555 },
snelsonc6855342010-01-28 23:55:12 +00005556 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005557 .read = read_memmapped,
stuged9f66152009-01-25 23:55:12 +00005558 },
5559
5560 {
5561 .vendor = "SST",
hailfinger286829b2009-01-08 03:40:17 +00005562 .name = "SST49LF002A/B",
hailfingera5245512009-06-28 19:19:25 +00005563 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00005564 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005565 .model_id = SST_SST49LF002A,
hailfinger286829b2009-01-08 03:40:17 +00005566 .total_size = 256,
5567 .page_size = 16 * 1024,
snelsonc6855342010-01-28 23:55:12 +00005568 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005569 .tested = TEST_OK_PRE,
hailfingerb8e4e212010-03-15 03:48:42 +00005570 .probe = probe_jedec,
5571 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005572 .block_erasers =
5573 {
5574 {
5575 .eraseblocks = { {4 * 1024, 64} },
snelson712e72d2010-03-16 03:09:10 +00005576 .block_erase = erase_sector_jedec,
snelson264e57c2010-01-20 20:55:53 +00005577 }, {
5578 .eraseblocks = { {16 * 1024, 16} },
snelson712e72d2010-03-16 03:09:10 +00005579 .block_erase = erase_block_jedec,
snelson264e57c2010-01-20 20:55:53 +00005580 }, {
5581 .eraseblocks = { {256 * 1024, 1} },
5582 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5583 }
5584 },
hailfingerb8e4e212010-03-15 03:48:42 +00005585 .printlock = printlock_sst_fwhub,
snelson712e72d2010-03-16 03:09:10 +00005586 .unlock = unlock_sst_fwhub,
5587 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005588 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005589 },
5590
hailfinger286829b2009-01-08 03:40:17 +00005591 {
5592 .vendor = "SST",
5593 .name = "SST49LF003A/B",
hailfingera5245512009-06-28 19:19:25 +00005594 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00005595 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005596 .model_id = SST_SST49LF003A,
hailfinger286829b2009-01-08 03:40:17 +00005597 .total_size = 384,
5598 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00005599 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
uwe63555e62009-09-25 01:09:18 +00005600 .tested = TEST_OK_PR,
hailfingerb8e4e212010-03-15 03:48:42 +00005601 .probe = probe_jedec,
5602 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005603 .block_erasers =
5604 {
5605 {
5606 .eraseblocks = { {4 * 1024, 96} },
snelson712e72d2010-03-16 03:09:10 +00005607 .block_erase = erase_sector_jedec,
snelson264e57c2010-01-20 20:55:53 +00005608 }, {
5609 .eraseblocks = { {64 * 1024, 6} },
snelson712e72d2010-03-16 03:09:10 +00005610 .block_erase = erase_block_jedec,
snelson264e57c2010-01-20 20:55:53 +00005611 }, {
5612 .eraseblocks = { {384 * 1024, 1} },
5613 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5614 }
5615 },
hailfingerb8e4e212010-03-15 03:48:42 +00005616 .printlock = printlock_sst_fwhub,
snelson712e72d2010-03-16 03:09:10 +00005617 .unlock = unlock_sst_fwhub,
5618 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005619 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005620 },
5621
hailfinger286829b2009-01-08 03:40:17 +00005622 {
hailfinger80f48682009-09-23 22:01:33 +00005623 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
5624 * and is only honored for 64k block erase, but not 4k sector erase.
5625 */
hailfinger286829b2009-01-08 03:40:17 +00005626 .vendor = "SST",
5627 .name = "SST49LF004A/B",
hailfingera5245512009-06-28 19:19:25 +00005628 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00005629 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005630 .model_id = SST_SST49LF004A,
hailfinger286829b2009-01-08 03:40:17 +00005631 .total_size = 512,
5632 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00005633 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005634 .tested = TEST_OK_PRE,
hailfingerb8e4e212010-03-15 03:48:42 +00005635 .probe = probe_jedec,
5636 .probe_timing = 1, /* 150 ns */
hailfinger80f48682009-09-23 22:01:33 +00005637 .block_erasers =
5638 {
5639 {
5640 .eraseblocks = { {4 * 1024, 128} },
snelson712e72d2010-03-16 03:09:10 +00005641 .block_erase = erase_sector_jedec,
hailfinger80f48682009-09-23 22:01:33 +00005642 }, {
5643 .eraseblocks = { {64 * 1024, 8} },
snelson712e72d2010-03-16 03:09:10 +00005644 .block_erase = erase_block_jedec,
hailfinger80f48682009-09-23 22:01:33 +00005645 }, {
5646 .eraseblocks = { {512 * 1024, 1} },
snelson264e57c2010-01-20 20:55:53 +00005647 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
hailfinger80f48682009-09-23 22:01:33 +00005648 },
5649 },
hailfingerb8e4e212010-03-15 03:48:42 +00005650 .printlock = printlock_sst_fwhub,
snelson712e72d2010-03-16 03:09:10 +00005651 .unlock = unlock_sst_fwhub,
5652 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005653 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005654 },
5655
hailfinger286829b2009-01-08 03:40:17 +00005656 {
5657 .vendor = "SST",
5658 .name = "SST49LF004C",
hailfingera5245512009-06-28 19:19:25 +00005659 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00005660 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005661 .model_id = SST_SST49LF004C,
hailfinger286829b2009-01-08 03:40:17 +00005662 .total_size = 512,
5663 .page_size = 4 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00005664 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00005665 .tested = TEST_UNTESTED,
hailfingerb8e4e212010-03-15 03:48:42 +00005666 .probe = probe_82802ab,
hailfingerd5b35922009-06-03 14:46:22 +00005667 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
snelson264e57c2010-01-20 20:55:53 +00005668 .block_erasers =
5669 {
5670 {
5671 .eraseblocks = { {4 * 1024, 128} },
5672 .block_erase = erase_sector_49lfxxxc,
5673 }, {
5674 .eraseblocks = {
5675 {64 * 1024, 7},
5676 {32 * 1024, 1},
5677 {8 * 1024, 2},
5678 {16 * 1024, 1},
5679 },
snelson3a69e422010-03-23 17:10:28 +00005680 .block_erase = erase_block_82802ab,
snelson264e57c2010-01-20 20:55:53 +00005681 }
5682 },
snelson3a69e422010-03-23 17:10:28 +00005683 .unlock = unlock_49lfxxxc,
David Hendricksc801adb2010-12-09 16:58:56 -08005684 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00005685 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005686 },
5687
hailfinger286829b2009-01-08 03:40:17 +00005688 {
5689 .vendor = "SST",
5690 .name = "SST49LF008A",
hailfingera5245512009-06-28 19:19:25 +00005691 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00005692 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005693 .model_id = SST_SST49LF008A,
hailfinger286829b2009-01-08 03:40:17 +00005694 .total_size = 1024,
5695 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00005696 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005697 .tested = TEST_OK_PRE,
hailfingerb8e4e212010-03-15 03:48:42 +00005698 .probe = probe_jedec,
5699 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005700 .block_erasers =
5701 {
5702 {
5703 .eraseblocks = { {4 * 1024, 256} },
snelson712e72d2010-03-16 03:09:10 +00005704 .block_erase = erase_sector_jedec,
snelson264e57c2010-01-20 20:55:53 +00005705 }, {
5706 .eraseblocks = { {64 * 1024, 16} },
snelson712e72d2010-03-16 03:09:10 +00005707 .block_erase = erase_block_jedec,
snelson264e57c2010-01-20 20:55:53 +00005708 }, {
5709 .eraseblocks = { {1024 * 1024, 1} },
5710 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
5711 }
5712 },
hailfingerb8e4e212010-03-15 03:48:42 +00005713 .printlock = printlock_sst_fwhub,
snelson712e72d2010-03-16 03:09:10 +00005714 .unlock = unlock_sst_fwhub,
5715 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005716 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005717 },
5718
hailfinger286829b2009-01-08 03:40:17 +00005719 {
5720 .vendor = "SST",
5721 .name = "SST49LF008C",
hailfingera5245512009-06-28 19:19:25 +00005722 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00005723 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005724 .model_id = SST_SST49LF008C,
hailfinger286829b2009-01-08 03:40:17 +00005725 .total_size = 1024,
5726 .page_size = 4 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00005727 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00005728 .tested = TEST_UNTESTED,
hailfingerb8e4e212010-03-15 03:48:42 +00005729 .probe = probe_82802ab,
hailfingerd5b35922009-06-03 14:46:22 +00005730 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
snelson264e57c2010-01-20 20:55:53 +00005731 .block_erasers =
5732 {
5733 {
5734 .eraseblocks = { {4 * 1024, 256} },
5735 .block_erase = erase_sector_49lfxxxc,
5736 }, {
5737 .eraseblocks = {
5738 {64 * 1024, 15},
5739 {32 * 1024, 1},
5740 {8 * 1024, 2},
5741 {16 * 1024, 1},
5742 },
snelson3a69e422010-03-23 17:10:28 +00005743 .block_erase = erase_block_82802ab,
snelson264e57c2010-01-20 20:55:53 +00005744 }
5745 },
snelson3a69e422010-03-23 17:10:28 +00005746 .unlock = unlock_49lfxxxc,
David Hendricksc801adb2010-12-09 16:58:56 -08005747 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00005748 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005749 },
5750
hailfinger286829b2009-01-08 03:40:17 +00005751 {
5752 .vendor = "SST",
5753 .name = "SST49LF016C",
hailfingera5245512009-06-28 19:19:25 +00005754 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00005755 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005756 .model_id = SST_SST49LF016C,
hailfinger286829b2009-01-08 03:40:17 +00005757 .total_size = 2048,
5758 .page_size = 4 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00005759 .feature_bits = FEATURE_REGISTERMAP,
David Hendricksc801adb2010-12-09 16:58:56 -08005760 .tested = TEST_OK_PR,
hailfingerb8e4e212010-03-15 03:48:42 +00005761 .probe = probe_82802ab,
hailfingerd5b35922009-06-03 14:46:22 +00005762 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
snelson264e57c2010-01-20 20:55:53 +00005763 .block_erasers =
5764 {
5765 {
5766 .eraseblocks = { {4 * 1024, 512} },
5767 .block_erase = erase_sector_49lfxxxc,
5768 }, {
5769 .eraseblocks = {
5770 {64 * 1024, 31},
5771 {32 * 1024, 1},
5772 {8 * 1024, 2},
5773 {16 * 1024, 1},
5774 },
snelson3a69e422010-03-23 17:10:28 +00005775 .block_erase = erase_block_82802ab,
snelson264e57c2010-01-20 20:55:53 +00005776 }
5777 },
snelson3a69e422010-03-23 17:10:28 +00005778 .unlock = unlock_49lfxxxc,
David Hendricksc801adb2010-12-09 16:58:56 -08005779 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00005780 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005781 },
5782
hailfinger286829b2009-01-08 03:40:17 +00005783 {
5784 .vendor = "SST",
5785 .name = "SST49LF020",
hailfingerc391ccb2009-06-12 11:45:10 +00005786 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00005787 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005788 .model_id = SST_SST49LF020,
hailfinger286829b2009-01-08 03:40:17 +00005789 .total_size = 256,
5790 .page_size = 16 * 1024,
snelsonc6855342010-01-28 23:55:12 +00005791 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005792 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005793 .probe = probe_jedec,
David Hendricksc801adb2010-12-09 16:58:56 -08005794 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005795 .block_erasers =
5796 {
5797 {
5798 .eraseblocks = { {4 * 1024, 64} },
5799 .block_erase = erase_sector_jedec,
5800 }, {
5801 .eraseblocks = { {16 * 1024, 16} },
5802 .block_erase = erase_block_jedec,
5803 }, {
5804 .eraseblocks = { {256 * 1024, 1} },
5805 .block_erase = NULL,
5806 }
5807 },
snelsonc6855342010-01-28 23:55:12 +00005808 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005809 .read = read_memmapped,
uwebf4a9a92009-01-07 12:35:09 +00005810 },
5811
hailfinger286829b2009-01-08 03:40:17 +00005812 {
5813 .vendor = "SST",
5814 .name = "SST49LF020A",
hailfingerc391ccb2009-06-12 11:45:10 +00005815 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00005816 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005817 .model_id = SST_SST49LF020A,
hailfinger286829b2009-01-08 03:40:17 +00005818 .total_size = 256,
hailfinger73134c42009-07-23 01:44:38 +00005819 .page_size = 4 * 1024,
snelsonc6855342010-01-28 23:55:12 +00005820 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005821 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005822 .probe = probe_jedec,
David Hendricksc801adb2010-12-09 16:58:56 -08005823 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005824 .block_erasers =
5825 {
5826 {
5827 .eraseblocks = { {4 * 1024, 64} },
5828 .block_erase = erase_sector_jedec,
5829 }, {
5830 .eraseblocks = { {16 * 1024, 16} },
5831 .block_erase = erase_block_jedec,
5832 }, {
5833 .eraseblocks = { {256 * 1024, 1} },
5834 .block_erase = NULL,
5835 }
5836 },
snelsonc6855342010-01-28 23:55:12 +00005837 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005838 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005839 },
5840
hailfinger286829b2009-01-08 03:40:17 +00005841 {
5842 .vendor = "SST",
5843 .name = "SST49LF040",
hailfingerc391ccb2009-06-12 11:45:10 +00005844 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00005845 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005846 .model_id = SST_SST49LF040,
hailfinger286829b2009-01-08 03:40:17 +00005847 .total_size = 512,
5848 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005849 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005850 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005851 .probe = probe_jedec,
David Hendricksc801adb2010-12-09 16:58:56 -08005852 .probe_timing = 1, /* 150 ns */
snelson264e57c2010-01-20 20:55:53 +00005853 .block_erasers =
5854 {
5855 {
5856 .eraseblocks = { {4 * 1024, 128} },
5857 .block_erase = erase_sector_jedec,
5858 }, {
5859 .eraseblocks = { {64 * 1024, 8} },
5860 .block_erase = erase_block_jedec,
5861 }, {
5862 .eraseblocks = { {512 * 1024, 1} },
5863 .block_erase = NULL,
5864 }
5865 },
snelsonc6855342010-01-28 23:55:12 +00005866 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005867 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005868 },
5869
hailfinger286829b2009-01-08 03:40:17 +00005870 {
5871 .vendor = "SST",
5872 .name = "SST49LF040B",
hailfingera5245512009-06-28 19:19:25 +00005873 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00005874 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005875 .model_id = SST_SST49LF040B,
hailfinger286829b2009-01-08 03:40:17 +00005876 .total_size = 512,
5877 .page_size = 64 * 1024,
David Hendricksc801adb2010-12-09 16:58:56 -08005878 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
5879 .tested = TEST_OK_PRE,
snelson264e57c2010-01-20 20:55:53 +00005880 .probe = probe_jedec,
hailfingerb8e4e212010-03-15 03:48:42 +00005881 .probe_timing = 1, /* 150ns */
snelson264e57c2010-01-20 20:55:53 +00005882 .block_erasers =
5883 {
5884 {
5885 .eraseblocks = { {4 * 1024, 128} },
5886 .block_erase = erase_sector_jedec,
5887 }, {
5888 .eraseblocks = { {64 * 1024, 8} },
5889 .block_erase = erase_block_jedec,
5890 }, {
5891 .eraseblocks = { {512 * 1024, 1} },
5892 .block_erase = NULL,
5893 }
5894 },
David Hendricksc801adb2010-12-09 16:58:56 -08005895 .unlock = unlock_82802ab,
snelsonc6855342010-01-28 23:55:12 +00005896 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005897 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005898 },
5899
hailfinger286829b2009-01-08 03:40:17 +00005900 {
5901 .vendor = "SST",
5902 .name = "SST49LF080A",
hailfingera5245512009-06-28 19:19:25 +00005903 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00005904 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005905 .model_id = SST_SST49LF080A,
hailfinger286829b2009-01-08 03:40:17 +00005906 .total_size = 1024,
5907 .page_size = 4096,
snelsonc6855342010-01-28 23:55:12 +00005908 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08005909 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00005910 .probe = probe_jedec,
hailfingerd5b35922009-06-03 14:46:22 +00005911 .probe_timing = TIMING_FIXME,
snelson264e57c2010-01-20 20:55:53 +00005912 .block_erasers =
5913 {
5914 {
5915 .eraseblocks = { {4 * 1024, 256} },
5916 .block_erase = erase_sector_jedec,
5917 }, {
5918 .eraseblocks = { {64 * 1024, 16} },
5919 .block_erase = erase_block_jedec,
5920 }, {
5921 .eraseblocks = { {1024 * 1024, 1} },
5922 .block_erase = NULL,
5923 }
5924 },
snelsonc6855342010-01-28 23:55:12 +00005925 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00005926 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005927 },
5928
hailfinger286829b2009-01-08 03:40:17 +00005929 {
5930 .vendor = "SST",
5931 .name = "SST49LF160C",
hailfingera5245512009-06-28 19:19:25 +00005932 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00005933 .manufacture_id = SST_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08005934 .model_id = SST_SST49LF160C,
hailfinger286829b2009-01-08 03:40:17 +00005935 .total_size = 2048,
5936 .page_size = 4 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00005937 .feature_bits = FEATURE_REGISTERMAP,
David Hendricksc801adb2010-12-09 16:58:56 -08005938 .tested = TEST_OK_PRE,
hailfingerb8e4e212010-03-15 03:48:42 +00005939 .probe = probe_82802ab,
hailfingerd5b35922009-06-03 14:46:22 +00005940 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
snelson264e57c2010-01-20 20:55:53 +00005941 .block_erasers =
5942 {
5943 {
5944 .eraseblocks = { {4 * 1024, 512} },
5945 .block_erase = erase_sector_49lfxxxc,
5946 }, {
5947 .eraseblocks = {
5948 {64 * 1024, 31},
5949 {32 * 1024, 1},
5950 {8 * 1024, 2},
5951 {16 * 1024, 1},
5952 },
snelson3a69e422010-03-23 17:10:28 +00005953 .block_erase = erase_block_82802ab,
snelson264e57c2010-01-20 20:55:53 +00005954 }
5955 },
snelson1ee293c2010-02-19 00:52:10 +00005956 .unlock = unlock_49lfxxxc,
David Hendricksc801adb2010-12-09 16:58:56 -08005957 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00005958 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00005959 },
5960
hailfinger286829b2009-01-08 03:40:17 +00005961 {
5962 .vendor = "ST",
5963 .name = "M25P05-A",
hailfinger40167462009-05-31 17:57:34 +00005964 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00005965 .manufacture_id = ST_ID,
5966 .model_id = ST_M25P05A,
5967 .total_size = 64,
5968 .page_size = 256,
5969 .tested = TEST_UNTESTED,
5970 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00005971 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00005972 .block_erasers =
5973 {
5974 {
5975 .eraseblocks = { {32 * 1024, 2} },
5976 .block_erase = spi_block_erase_d8,
5977 }, {
5978 .eraseblocks = { {64 * 1024, 1} },
5979 .block_erase = spi_block_erase_c7,
5980 }
5981 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07005982 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00005983 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00005984 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00005985 },
5986
hailfingerfb513de2009-07-23 01:40:20 +00005987 /* The ST M25P05 is a bit of a problem. It has the same ID as the
5988 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
hailfinger59a83572010-05-28 17:07:57 +00005989 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
hailfingerfb513de2009-07-23 01:40:20 +00005990 * only is successful if RDID does not work.
5991 */
5992 {
5993 .vendor = "ST",
5994 .name = "M25P05.RES",
5995 .bustype = CHIP_BUSTYPE_SPI,
hailfinger59a83572010-05-28 17:07:57 +00005996 .manufacture_id = 0, /* Not used. */
hailfingerfb513de2009-07-23 01:40:20 +00005997 .model_id = ST_M25P05_RES,
5998 .total_size = 64,
5999 .page_size = 256,
6000 .tested = TEST_UNTESTED,
hailfinger59a83572010-05-28 17:07:57 +00006001 .probe = probe_spi_res1,
hailfingerfb513de2009-07-23 01:40:20 +00006002 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006003 .block_erasers =
6004 {
6005 {
6006 .eraseblocks = { {32 * 1024, 2} },
6007 .block_erase = spi_block_erase_d8,
6008 }, {
6009 .eraseblocks = { {64 * 1024, 1} },
6010 .block_erase = spi_block_erase_c7,
6011 }
6012 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006013 .unlock = spi_disable_blockprotect,
hailfingerfb513de2009-07-23 01:40:20 +00006014 .write = spi_chip_write_1, /* 128 */
6015 .read = spi_chip_read,
6016 },
6017
hailfinger286829b2009-01-08 03:40:17 +00006018 {
6019 .vendor = "ST",
6020 .name = "M25P10-A",
hailfinger40167462009-05-31 17:57:34 +00006021 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00006022 .manufacture_id = ST_ID,
6023 .model_id = ST_M25P10A,
6024 .total_size = 128,
6025 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08006026 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00006027 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00006028 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006029 .block_erasers =
6030 {
6031 {
6032 .eraseblocks = { {32 * 1024, 4} },
6033 .block_erase = spi_block_erase_d8,
6034 }, {
6035 .eraseblocks = { {128 * 1024, 1} },
6036 .block_erase = spi_block_erase_c7,
6037 }
6038 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006039 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00006040 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00006041 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00006042 },
6043
hailfingerfb513de2009-07-23 01:40:20 +00006044 /* The ST M25P10 has the same problem as the M25P05. */
6045 {
6046 .vendor = "ST",
6047 .name = "M25P10.RES",
6048 .bustype = CHIP_BUSTYPE_SPI,
hailfinger59a83572010-05-28 17:07:57 +00006049 .manufacture_id = 0, /* Not used. */
hailfingerfb513de2009-07-23 01:40:20 +00006050 .model_id = ST_M25P10_RES,
6051 .total_size = 128,
6052 .page_size = 256,
6053 .tested = TEST_UNTESTED,
hailfinger59a83572010-05-28 17:07:57 +00006054 .probe = probe_spi_res1,
hailfingerfb513de2009-07-23 01:40:20 +00006055 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006056 .block_erasers =
6057 {
6058 {
6059 .eraseblocks = { {32 * 1024, 4} },
6060 .block_erase = spi_block_erase_d8,
6061 }, {
6062 .eraseblocks = { {128 * 1024, 1} },
6063 .block_erase = spi_block_erase_c7,
6064 }
6065 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006066 .unlock = spi_disable_blockprotect,
hailfingerfb513de2009-07-23 01:40:20 +00006067 .write = spi_chip_write_1, /* 128 */
6068 .read = spi_chip_read,
6069 },
6070
hailfinger286829b2009-01-08 03:40:17 +00006071 {
6072 .vendor = "ST",
6073 .name = "M25P20",
hailfinger40167462009-05-31 17:57:34 +00006074 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00006075 .manufacture_id = ST_ID,
6076 .model_id = ST_M25P20,
6077 .total_size = 256,
6078 .page_size = 256,
6079 .tested = TEST_UNTESTED,
6080 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00006081 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006082 .block_erasers =
6083 {
6084 {
6085 .eraseblocks = { {64 * 1024, 4} },
6086 .block_erase = spi_block_erase_d8,
6087 }, {
6088 .eraseblocks = { {256 * 1024, 1} },
6089 .block_erase = spi_block_erase_c7,
6090 }
6091 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006092 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00006093 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00006094 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00006095 },
6096
hailfinger286829b2009-01-08 03:40:17 +00006097 {
6098 .vendor = "ST",
6099 .name = "M25P40",
hailfinger40167462009-05-31 17:57:34 +00006100 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00006101 .manufacture_id = ST_ID,
6102 .model_id = ST_M25P40,
6103 .total_size = 512,
6104 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08006105 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00006106 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00006107 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006108 .block_erasers =
6109 {
6110 {
6111 .eraseblocks = { {64 * 1024, 8} },
6112 .block_erase = spi_block_erase_d8,
6113 }, {
6114 .eraseblocks = { {512 * 1024, 1} },
6115 .block_erase = spi_block_erase_c7,
6116 }
6117 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006118 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00006119 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00006120 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00006121 },
6122
hailfinger286829b2009-01-08 03:40:17 +00006123 {
6124 .vendor = "ST",
6125 .name = "M25P40-old",
hailfinger40167462009-05-31 17:57:34 +00006126 .bustype = CHIP_BUSTYPE_SPI,
hailfinger59a83572010-05-28 17:07:57 +00006127 .manufacture_id = 0, /* Not used. */
hailfinger286829b2009-01-08 03:40:17 +00006128 .model_id = ST_M25P40_RES,
6129 .total_size = 512,
6130 .page_size = 256,
6131 .tested = TEST_UNTESTED,
hailfinger59a83572010-05-28 17:07:57 +00006132 .probe = probe_spi_res1,
hailfingere3095d92009-06-05 13:46:17 +00006133 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006134 .block_erasers =
6135 {
6136 {
6137 .eraseblocks = { {64 * 1024, 8} },
6138 .block_erase = spi_block_erase_d8,
6139 }, {
6140 .eraseblocks = { {512 * 1024, 1} },
6141 .block_erase = spi_block_erase_c7,
6142 }
6143 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006144 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00006145 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00006146 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00006147 },
6148
hailfinger286829b2009-01-08 03:40:17 +00006149 {
6150 .vendor = "ST",
6151 .name = "M25P80",
hailfinger40167462009-05-31 17:57:34 +00006152 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00006153 .manufacture_id = ST_ID,
6154 .model_id = ST_M25P80,
6155 .total_size = 1024,
6156 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08006157 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00006158 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00006159 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006160 .block_erasers =
6161 {
6162 {
6163 .eraseblocks = { {64 * 1024, 16} },
6164 .block_erase = spi_block_erase_d8,
6165 }, {
6166 .eraseblocks = { {1024 * 1024, 1} },
6167 .block_erase = spi_block_erase_c7,
6168 }
6169 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006170 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00006171 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00006172 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00006173 },
6174
hailfinger286829b2009-01-08 03:40:17 +00006175 {
6176 .vendor = "ST",
6177 .name = "M25P16",
hailfinger40167462009-05-31 17:57:34 +00006178 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00006179 .manufacture_id = ST_ID,
6180 .model_id = ST_M25P16,
6181 .total_size = 2048,
6182 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08006183 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00006184 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00006185 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006186 .block_erasers =
6187 {
6188 {
6189 .eraseblocks = { {64 * 1024, 32} },
6190 .block_erase = spi_block_erase_d8,
6191 }, {
6192 .eraseblocks = { {2 * 1024 * 1024, 1} },
6193 .block_erase = spi_block_erase_c7,
6194 }
6195 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006196 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00006197 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00006198 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00006199 },
6200
hailfinger286829b2009-01-08 03:40:17 +00006201 {
6202 .vendor = "ST",
6203 .name = "M25P32",
hailfinger40167462009-05-31 17:57:34 +00006204 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00006205 .manufacture_id = ST_ID,
6206 .model_id = ST_M25P32,
6207 .total_size = 4096,
6208 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08006209 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00006210 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00006211 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006212 .block_erasers =
6213 {
6214 {
6215 .eraseblocks = { {64 * 1024, 64} },
6216 .block_erase = spi_block_erase_d8,
6217 }, {
6218 .eraseblocks = { {4 * 1024 * 1024, 1} },
6219 .block_erase = spi_block_erase_c7,
6220 }
6221 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006222 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00006223 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00006224 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00006225 },
6226
hailfinger286829b2009-01-08 03:40:17 +00006227 {
6228 .vendor = "ST",
6229 .name = "M25P64",
hailfinger40167462009-05-31 17:57:34 +00006230 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00006231 .manufacture_id = ST_ID,
6232 .model_id = ST_M25P64,
6233 .total_size = 8192,
6234 .page_size = 256,
6235 .tested = TEST_UNTESTED,
6236 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00006237 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006238 .block_erasers =
6239 {
6240 {
6241 .eraseblocks = { {64 * 1024, 128} },
6242 .block_erase = spi_block_erase_d8,
6243 }, {
6244 .eraseblocks = { {8 * 1024 * 1024, 1} },
6245 .block_erase = spi_block_erase_c7,
6246 }
6247 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006248 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00006249 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00006250 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00006251 },
6252
hailfinger286829b2009-01-08 03:40:17 +00006253 {
6254 .vendor = "ST",
6255 .name = "M25P128",
hailfinger40167462009-05-31 17:57:34 +00006256 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00006257 .manufacture_id = ST_ID,
6258 .model_id = ST_M25P128,
6259 .total_size = 16384,
6260 .page_size = 256,
6261 .tested = TEST_UNTESTED,
6262 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00006263 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006264 .block_erasers =
6265 {
6266 {
6267 .eraseblocks = { {256 * 1024, 64} },
6268 .block_erase = spi_block_erase_d8,
6269 }, {
6270 .eraseblocks = { {16 * 1024 * 1024, 1} },
6271 .block_erase = spi_block_erase_c7,
6272 }
6273 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006274 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00006275 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00006276 .read = spi_chip_read,
stepanaa1b6a22008-12-08 18:15:10 +00006277 },
6278
hailfinger286829b2009-01-08 03:40:17 +00006279 {
6280 .vendor = "ST",
David Hendricksc801adb2010-12-09 16:58:56 -08006281 .name = "M25PX32",
6282 .bustype = CHIP_BUSTYPE_SPI,
6283 .manufacture_id = ST_ID,
6284 .model_id = ST_M25PX32,
6285 .total_size = 4096,
6286 .page_size = 256,
6287 .tested = TEST_OK_PRE,
6288 .probe = probe_spi_rdid,
6289 .probe_timing = TIMING_ZERO,
6290 .block_erasers =
6291 {
6292 {
6293 .eraseblocks = { { 4 * 1024, 1024 } },
6294 .block_erase = spi_block_erase_20,
6295 }, {
6296 .eraseblocks = { {64 * 1024, 64} },
6297 .block_erase = spi_block_erase_d8,
6298 }, {
6299 .eraseblocks = { {4 * 1024 * 1024, 1} },
6300 .block_erase = spi_block_erase_c7,
6301 }
6302 },
6303 .unlock = spi_disable_blockprotect,
6304 .write = spi_chip_write_256,
6305 .read = spi_chip_read,
6306 },
6307
6308 {
6309 .vendor = "ST",
6310 .name = "M25PX64",
6311 .bustype = CHIP_BUSTYPE_SPI,
6312 .manufacture_id = ST_ID,
6313 .model_id = ST_M25PX64,
6314 .total_size = 8192,
6315 .page_size = 256,
6316 .tested = TEST_OK_PRE,
6317 .probe = probe_spi_rdid,
6318 .probe_timing = TIMING_ZERO,
6319 .block_erasers =
6320 {
6321 {
6322 .eraseblocks = { { 4 * 1024, 2048 } },
6323 .block_erase = spi_block_erase_20,
6324 }, {
6325 .eraseblocks = { {64 * 1024, 128} },
6326 .block_erase = spi_block_erase_d8,
6327 }, {
6328 .eraseblocks = { {8 * 1024 * 1024, 1} },
6329 .block_erase = spi_block_erase_c7,
6330 }
6331 },
6332 .unlock = spi_disable_blockprotect,
6333 .write = spi_chip_write_256,
6334 .read = spi_chip_read,
6335 },
6336
6337 {
6338 .vendor = "ST",
hailfinger286829b2009-01-08 03:40:17 +00006339 .name = "M29F002B",
hailfingera5245512009-06-28 19:19:25 +00006340 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006341 .manufacture_id = ST_ID,
6342 .model_id = ST_M29F002B,
6343 .total_size = 256,
6344 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006345 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00006346 .tested = TEST_UNTESTED,
6347 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00006348 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00006349 .block_erasers =
6350 {
6351 {
6352 .eraseblocks = {
6353 {16 * 1024, 1},
6354 {8 * 1024, 2},
6355 {32 * 1024, 1},
6356 {64 * 1024, 3},
6357 },
6358 .block_erase = erase_sector_jedec,
6359 }, {
6360 .eraseblocks = { {256 * 1024, 1} },
6361 .block_erase = erase_chip_block_jedec,
6362 }
6363 },
snelsonc6855342010-01-28 23:55:12 +00006364 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006365 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006366 },
6367
hailfinger286829b2009-01-08 03:40:17 +00006368 {
6369 .vendor = "ST",
6370 .name = "M29F002T/NT",
hailfingera5245512009-06-28 19:19:25 +00006371 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006372 .manufacture_id = ST_ID,
6373 .model_id = ST_M29F002T,
6374 .total_size = 256,
6375 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006376 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
6377 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00006378 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00006379 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00006380 .block_erasers =
6381 {
6382 {
6383 .eraseblocks = {
6384 {64 * 1024, 3},
6385 {32 * 1024, 1},
6386 {8 * 1024, 2},
6387 {16 * 1024, 1},
6388 },
6389 .block_erase = erase_sector_jedec,
6390 }, {
6391 .eraseblocks = { {256 * 1024, 1} },
6392 .block_erase = erase_chip_block_jedec,
6393 }
6394 },
snelsonc6855342010-01-28 23:55:12 +00006395 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006396 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006397 },
6398
hailfinger286829b2009-01-08 03:40:17 +00006399 {
6400 .vendor = "ST",
6401 .name = "M29F040B",
hailfingera5245512009-06-28 19:19:25 +00006402 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006403 .manufacture_id = ST_ID,
6404 .model_id = ST_M29F040B,
6405 .total_size = 512,
6406 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006407 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
6408 .tested = TEST_UNTESTED,
6409 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -08006410 .probe_timing = TIMING_ZERO, /* datasheet specifies no timing */
snelsone0c56352010-01-19 16:08:51 +00006411 .block_erasers =
6412 {
6413 {
6414 .eraseblocks = { {64 * 1024, 8}, },
snelsonc6855342010-01-28 23:55:12 +00006415 .block_erase = erase_sector_jedec,
snelsone0c56352010-01-19 16:08:51 +00006416 }, {
6417 .eraseblocks = { {512 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00006418 .block_erase = erase_chip_block_jedec,
snelsone0c56352010-01-19 16:08:51 +00006419 }
6420 },
snelsonc6855342010-01-28 23:55:12 +00006421 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006422 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006423 },
6424
hailfinger286829b2009-01-08 03:40:17 +00006425 {
snelsonc6855342010-01-28 23:55:12 +00006426 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
hailfinger286829b2009-01-08 03:40:17 +00006427 .vendor = "ST",
David Hendricks82fd8ae2010-08-04 14:34:54 -07006428 .name = "M29F400BB",
6429 .bustype = CHIP_BUSTYPE_PARALLEL,
6430 .manufacture_id = ST_ID,
6431 .model_id = ST_M29F400BB,
6432 .total_size = 512,
6433 .page_size = 64 * 1024,
6434 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08006435 .tested = TEST_UNTESTED,
David Hendricks82fd8ae2010-08-04 14:34:54 -07006436 .probe = probe_m29f400bt,
6437 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
6438 .block_erasers =
6439 {
6440 {
6441 .eraseblocks = {
6442 {16 * 1024, 1},
6443 {8 * 1024, 2},
6444 {32 * 1024, 1},
6445 {64 * 1024, 7},
6446 },
6447 .block_erase = block_erase_m29f400bt,
6448 }, {
6449 .eraseblocks = { {512 * 1024, 1} },
6450 .block_erase = block_erase_chip_m29f400bt,
6451 }
6452 },
David Hendricksc801adb2010-12-09 16:58:56 -08006453 .write = write_m29f400bt,
David Hendricks82fd8ae2010-08-04 14:34:54 -07006454 .read = read_memmapped,
6455 },
6456 {
6457 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
6458 .vendor = "ST",
hailfinger286829b2009-01-08 03:40:17 +00006459 .name = "M29F400BT",
hailfingera5245512009-06-28 19:19:25 +00006460 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006461 .manufacture_id = ST_ID,
6462 .model_id = ST_M29F400BT,
6463 .total_size = 512,
6464 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006465 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00006466 .tested = TEST_UNTESTED,
6467 .probe = probe_m29f400bt,
hailfingerd5b35922009-06-03 14:46:22 +00006468 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
snelsone0c56352010-01-19 16:08:51 +00006469 .block_erasers =
6470 {
6471 {
6472 .eraseblocks = {
6473 {64 * 1024, 7},
6474 {32 * 1024, 1},
6475 {8 * 1024, 2},
6476 {16 * 1024, 1},
6477 },
6478 .block_erase = block_erase_m29f400bt,
6479 }, {
6480 .eraseblocks = { {512 * 1024, 1} },
6481 .block_erase = block_erase_chip_m29f400bt,
6482 }
6483 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07006484 .write = write_m29f400bt,
hailfinger23060112009-05-08 12:49:03 +00006485 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006486 },
6487
hailfinger286829b2009-01-08 03:40:17 +00006488 {
6489 .vendor = "ST",
6490 .name = "M29W010B",
hailfingera5245512009-06-28 19:19:25 +00006491 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006492 .manufacture_id = ST_ID,
6493 .model_id = ST_M29W010B,
6494 .total_size = 128,
6495 .page_size = 16 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006496 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00006497 .tested = TEST_UNTESTED,
6498 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00006499 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00006500 .block_erasers =
6501 {
6502 {
6503 .eraseblocks = { {16 * 1024, 8}, },
6504 .block_erase = erase_sector_jedec,
6505 }, {
6506 .eraseblocks = { {128 * 1024, 1} },
6507 .block_erase = erase_chip_block_jedec,
6508 }
6509 },
snelsonc6855342010-01-28 23:55:12 +00006510 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006511 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006512 },
6513
hailfinger286829b2009-01-08 03:40:17 +00006514 {
6515 .vendor = "ST",
6516 .name = "M29W040B",
hailfingera5245512009-06-28 19:19:25 +00006517 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00006518 .manufacture_id = ST_ID,
6519 .model_id = ST_M29W040B,
6520 .total_size = 512,
6521 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00006522 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00006523 .tested = TEST_UNTESTED,
6524 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00006525 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00006526 .block_erasers =
6527 {
6528 {
6529 .eraseblocks = { {64 * 1024, 8}, },
6530 .block_erase = erase_sector_jedec,
6531 }, {
6532 .eraseblocks = { {512 * 1024, 1} },
6533 .block_erase = erase_chip_block_jedec,
6534 }
6535 },
snelsonc6855342010-01-28 23:55:12 +00006536 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006537 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006538 },
6539
snelson91cd0662010-02-01 05:49:46 +00006540 {
6541 .vendor = "ST",
6542 .name = "M29W512B",
6543 .bustype = CHIP_BUSTYPE_PARALLEL,
6544 .manufacture_id = ST_ID,
6545 .model_id = ST_M29W512B,
6546 .total_size = 64,
6547 .page_size = 64 * 1024,
6548 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08006549 .tested = TEST_OK_PRE,
snelson91cd0662010-02-01 05:49:46 +00006550 .probe = probe_jedec,
6551 .probe_timing = TIMING_ZERO,
snelson91cd0662010-02-01 05:49:46 +00006552 .block_erasers =
6553 {
6554 {
6555 .eraseblocks = { {64 * 1024, 1} },
6556 .block_erase = erase_chip_block_jedec,
6557 }
6558 },
6559 .write = write_jedec_1,
6560 .read = read_memmapped,
6561 },
6562
hailfinger286829b2009-01-08 03:40:17 +00006563 {
6564 .vendor = "ST",
6565 .name = "M50FLW040A",
snelsonc6855342010-01-28 23:55:12 +00006566 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006567 .manufacture_id = ST_ID,
6568 .model_id = ST_M50FLW040A,
6569 .total_size = 512,
6570 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006571 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00006572 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00006573 .probe = probe_82802ab,
hailfinger4d547032010-01-10 01:34:00 +00006574 .probe_timing = TIMING_FIXME,
snelsone0c56352010-01-19 16:08:51 +00006575 .block_erasers =
6576 {
6577 {
snelsonf88616b2010-01-19 16:39:19 +00006578 .eraseblocks = {
David Hendricksc801adb2010-12-09 16:58:56 -08006579 {4 * 1024, 16}, /* sector */
snelsonf88616b2010-01-19 16:39:19 +00006580 {64 * 1024, 5}, /* block */
6581 {4 * 1024, 16}, /* sector */
6582 {4 * 1024, 16}, /* sector */
6583 },
6584 .block_erase = NULL,
6585 }, {
snelsone0c56352010-01-19 16:08:51 +00006586 .eraseblocks = { {64 * 1024, 8}, },
snelsonc0acbeb2010-03-19 18:47:06 +00006587 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00006588 }, {
6589 .eraseblocks = { {512 * 1024, 1} },
6590 .block_erase = erase_chip_stm50flw0x0x,
6591 }
6592 },
snelsonc0acbeb2010-03-19 18:47:06 +00006593 .unlock = unlock_stm50flw0x0x,
6594 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006595 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006596 },
6597
hailfinger286829b2009-01-08 03:40:17 +00006598 {
6599 .vendor = "ST",
6600 .name = "M50FLW040B",
snelsonc6855342010-01-28 23:55:12 +00006601 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006602 .manufacture_id = ST_ID,
6603 .model_id = ST_M50FLW040B,
6604 .total_size = 512,
6605 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006606 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00006607 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00006608 .probe = probe_82802ab,
hailfinger4d547032010-01-10 01:34:00 +00006609 .probe_timing = TIMING_FIXME,
snelsone0c56352010-01-19 16:08:51 +00006610 .block_erasers =
6611 {
6612 {
snelsonf88616b2010-01-19 16:39:19 +00006613 .eraseblocks = {
David Hendricksc801adb2010-12-09 16:58:56 -08006614 {4 * 1024, 16}, /* sector */
snelsonf88616b2010-01-19 16:39:19 +00006615 {4 * 1024, 16}, /* sector */
6616 {64 * 1024, 5}, /* block */
6617 {4 * 1024, 16}, /* sector */
6618 },
6619 .block_erase = NULL,
6620 }, {
snelsone0c56352010-01-19 16:08:51 +00006621 .eraseblocks = { {64 * 1024, 8}, },
snelsonc0acbeb2010-03-19 18:47:06 +00006622 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00006623 }, {
6624 .eraseblocks = { {512 * 1024, 1} },
6625 .block_erase = erase_chip_stm50flw0x0x,
6626 }
6627 },
snelsonc0acbeb2010-03-19 18:47:06 +00006628 .unlock = unlock_stm50flw0x0x,
6629 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006630 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006631 },
6632
hailfinger286829b2009-01-08 03:40:17 +00006633 {
6634 .vendor = "ST",
6635 .name = "M50FLW080A",
snelsonc6855342010-01-28 23:55:12 +00006636 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006637 .manufacture_id = ST_ID,
6638 .model_id = ST_M50FLW080A,
6639 .total_size = 1024,
6640 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006641 .feature_bits = FEATURE_REGISTERMAP,
David Hendricksc801adb2010-12-09 16:58:56 -08006642 .tested = TEST_OK_PRE,
snelsonc6855342010-01-28 23:55:12 +00006643 .probe = probe_82802ab,
hailfinger4d547032010-01-10 01:34:00 +00006644 .probe_timing = TIMING_FIXME,
snelsone0c56352010-01-19 16:08:51 +00006645 .block_erasers =
6646 {
6647 {
snelsonf88616b2010-01-19 16:39:19 +00006648 .eraseblocks = {
David Hendricksc801adb2010-12-09 16:58:56 -08006649 {4 * 1024, 16}, /* sector */
snelsonf88616b2010-01-19 16:39:19 +00006650 {64 * 1024, 13}, /* block */
6651 {4 * 1024, 16}, /* sector */
6652 {4 * 1024, 16}, /* sector */
6653 },
6654 .block_erase = NULL,
6655 }, {
snelsone0c56352010-01-19 16:08:51 +00006656 .eraseblocks = { {64 * 1024, 16}, },
snelsonc0acbeb2010-03-19 18:47:06 +00006657 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00006658 }, {
6659 .eraseblocks = { {1024 * 1024, 1} },
6660 .block_erase = erase_chip_stm50flw0x0x,
6661 }
6662 },
snelsonc0acbeb2010-03-19 18:47:06 +00006663 .unlock = unlock_stm50flw0x0x,
6664 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006665 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006666 },
6667
hailfinger286829b2009-01-08 03:40:17 +00006668 {
6669 .vendor = "ST",
6670 .name = "M50FLW080B",
snelsonc6855342010-01-28 23:55:12 +00006671 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006672 .manufacture_id = ST_ID,
6673 .model_id = ST_M50FLW080B,
6674 .total_size = 1024,
6675 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006676 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00006677 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00006678 .probe = probe_82802ab,
hailfinger4d547032010-01-10 01:34:00 +00006679 .probe_timing = TIMING_FIXME,
snelsone0c56352010-01-19 16:08:51 +00006680 .block_erasers =
6681 {
6682 {
snelsonf88616b2010-01-19 16:39:19 +00006683 .eraseblocks = {
David Hendricksc801adb2010-12-09 16:58:56 -08006684 {4 * 1024, 16}, /* sector */
snelsonf88616b2010-01-19 16:39:19 +00006685 {4 * 1024, 16}, /* sector */
6686 {64 * 1024, 13}, /* block */
6687 {4 * 1024, 16}, /* sector */
6688 },
6689 .block_erase = NULL,
6690 }, {
snelsone0c56352010-01-19 16:08:51 +00006691 .eraseblocks = { {64 * 1024, 16}, },
snelsonc0acbeb2010-03-19 18:47:06 +00006692 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00006693 }, {
6694 .eraseblocks = { {1024 * 1024, 1} },
6695 .block_erase = erase_chip_stm50flw0x0x,
6696 }
6697 },
snelsonc0acbeb2010-03-19 18:47:06 +00006698 .unlock = unlock_stm50flw0x0x,
6699 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006700 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006701 },
6702
hailfinger286829b2009-01-08 03:40:17 +00006703 {
6704 .vendor = "ST",
6705 .name = "M50FW002",
hailfingera5245512009-06-28 19:19:25 +00006706 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006707 .manufacture_id = ST_ID,
6708 .model_id = ST_M50FW002,
6709 .total_size = 256,
6710 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006711 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00006712 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00006713 .probe = probe_82802ab,
hailfingerd5b35922009-06-03 14:46:22 +00006714 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
snelsone0c56352010-01-19 16:08:51 +00006715 .block_erasers =
6716 {
6717 {
6718 .eraseblocks = {
6719 {64 * 1024, 3},
6720 {32 * 1024, 1},
6721 {8 * 1024, 2},
6722 {16 * 1024, 1},
6723 },
snelsonc0acbeb2010-03-19 18:47:06 +00006724 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00006725 }, {
6726 .eraseblocks = { {256 * 1024, 1} },
6727 .block_erase = erase_chip_stm50flw0x0x,
6728 }
6729 },
snelsonc0acbeb2010-03-19 18:47:06 +00006730 .unlock = unlock_stm50flw0x0x,
6731 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006732 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006733 },
6734
hailfinger286829b2009-01-08 03:40:17 +00006735 {
6736 .vendor = "ST",
6737 .name = "M50FW016",
hailfingera5245512009-06-28 19:19:25 +00006738 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006739 .manufacture_id = ST_ID,
6740 .model_id = ST_M50FW016,
6741 .total_size = 2048,
6742 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006743 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00006744 .tested = TEST_UNTESTED,
6745 .probe = probe_82802ab,
hailfingerd5b35922009-06-03 14:46:22 +00006746 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
snelsone0c56352010-01-19 16:08:51 +00006747 .block_erasers =
6748 {
6749 {
6750 .eraseblocks = { {64 * 1024, 32}, },
snelsonc0acbeb2010-03-19 18:47:06 +00006751 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00006752 }, {
6753 .eraseblocks = { {2 * 1024 * 1024, 1} },
6754 .block_erase = erase_chip_stm50flw0x0x,
6755 }
6756 },
snelsonc0acbeb2010-03-19 18:47:06 +00006757 .unlock = unlock_stm50flw0x0x,
6758 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006759 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006760 },
6761
hailfinger286829b2009-01-08 03:40:17 +00006762 {
6763 .vendor = "ST",
6764 .name = "M50FW040",
hailfingera5245512009-06-28 19:19:25 +00006765 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006766 .manufacture_id = ST_ID,
6767 .model_id = ST_M50FW040,
6768 .total_size = 512,
6769 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006770 .feature_bits = FEATURE_REGISTERMAP,
snelsonc0acbeb2010-03-19 18:47:06 +00006771 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00006772 .probe = probe_82802ab,
hailfingerd5b35922009-06-03 14:46:22 +00006773 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
snelsone0c56352010-01-19 16:08:51 +00006774 .block_erasers =
6775 {
6776 {
6777 .eraseblocks = { {64 * 1024, 8}, },
snelsonc0acbeb2010-03-19 18:47:06 +00006778 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00006779 }, {
6780 .eraseblocks = { {512 * 1024, 1} },
6781 .block_erase = erase_chip_stm50flw0x0x,
6782 }
6783 },
snelsonc0acbeb2010-03-19 18:47:06 +00006784 .unlock = unlock_stm50flw0x0x,
6785 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006786 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006787 },
6788
hailfinger286829b2009-01-08 03:40:17 +00006789 {
6790 .vendor = "ST",
6791 .name = "M50FW080",
hailfingera5245512009-06-28 19:19:25 +00006792 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006793 .manufacture_id = ST_ID,
6794 .model_id = ST_M50FW080,
6795 .total_size = 1024,
6796 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006797 .feature_bits = FEATURE_REGISTERMAP,
snelsonc0acbeb2010-03-19 18:47:06 +00006798 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00006799 .probe = probe_82802ab,
hailfingerd5b35922009-06-03 14:46:22 +00006800 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
snelsone0c56352010-01-19 16:08:51 +00006801 .block_erasers =
6802 {
6803 {
6804 .eraseblocks = { {64 * 1024, 16}, },
snelsonc0acbeb2010-03-19 18:47:06 +00006805 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00006806 }, {
6807 .eraseblocks = { {1024 * 1024, 1} },
6808 .block_erase = erase_chip_stm50flw0x0x,
6809 }
6810 },
snelsonc0acbeb2010-03-19 18:47:06 +00006811 .unlock = unlock_stm50flw0x0x,
6812 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006813 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006814 },
6815
hailfinger286829b2009-01-08 03:40:17 +00006816 {
6817 .vendor = "ST",
6818 .name = "M50LPW116",
hailfingera5245512009-06-28 19:19:25 +00006819 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
hailfinger286829b2009-01-08 03:40:17 +00006820 .manufacture_id = ST_ID,
6821 .model_id = ST_M50LPW116,
6822 .total_size = 2048,
6823 .page_size = 64 * 1024,
hailfingerb8e4e212010-03-15 03:48:42 +00006824 .feature_bits = FEATURE_REGISTERMAP,
hailfinger286829b2009-01-08 03:40:17 +00006825 .tested = TEST_UNTESTED,
snelsonc6855342010-01-28 23:55:12 +00006826 .probe = probe_82802ab,
hailfinger94466802009-09-05 01:31:32 +00006827 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00006828 .block_erasers =
6829 {
6830 {
6831 .eraseblocks = {
6832 {4 * 1024, 16},
6833 {64 * 1024, 30},
6834 {32 * 1024, 1},
6835 {8 * 1024, 2},
6836 {16 * 1024, 1},
6837 },
snelsonc0acbeb2010-03-19 18:47:06 +00006838 .block_erase = erase_block_82802ab,
snelsone0c56352010-01-19 16:08:51 +00006839 }, {
6840 .eraseblocks = { {2 * 1024 * 1024, 1} },
snelsonc6855342010-01-28 23:55:12 +00006841 .block_erase = erase_chip_stm50flw0x0x,
snelsone0c56352010-01-19 16:08:51 +00006842 }
6843 },
snelsonc0acbeb2010-03-19 18:47:06 +00006844 .unlock = unlock_stm50flw0x0x,
6845 .write = write_82802ab,
hailfinger23060112009-05-08 12:49:03 +00006846 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006847 },
6848
hailfinger286829b2009-01-08 03:40:17 +00006849 {
David Hendricks82fd8ae2010-08-04 14:34:54 -07006850 .vendor = "SyncMOS/MoselVitelic",
6851 .name = "{F,S,V}29C51001B",
hailfingera5245512009-06-28 19:19:25 +00006852 .bustype = CHIP_BUSTYPE_PARALLEL,
David Hendricks82fd8ae2010-08-04 14:34:54 -07006853 .manufacture_id = SYNCMOS_MVC_ID,
6854 .model_id = SM_MVC_29C51001B,
hailfinger286829b2009-01-08 03:40:17 +00006855 .total_size = 128,
David Hendricks82fd8ae2010-08-04 14:34:54 -07006856 .page_size = 512,
snelsonc6855342010-01-28 23:55:12 +00006857 .feature_bits = FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00006858 .tested = TEST_UNTESTED,
6859 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00006860 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00006861 .block_erasers =
6862 {
6863 {
6864 .eraseblocks = { {512, 256} },
6865 .block_erase = erase_sector_jedec,
6866 }, {
6867 .eraseblocks = { {128 * 1024, 1} },
6868 .block_erase = erase_chip_block_jedec,
6869 },
6870 },
snelsonc6855342010-01-28 23:55:12 +00006871 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006872 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006873 },
6874
hailfinger286829b2009-01-08 03:40:17 +00006875 {
David Hendricks82fd8ae2010-08-04 14:34:54 -07006876 .vendor = "SyncMOS/MoselVitelic",
6877 .name = "{F,S,V}29C51001T",
hailfingera5245512009-06-28 19:19:25 +00006878 .bustype = CHIP_BUSTYPE_PARALLEL,
David Hendricks82fd8ae2010-08-04 14:34:54 -07006879 .manufacture_id = SYNCMOS_MVC_ID,
6880 .model_id = SM_MVC_29C51001T,
6881 .total_size = 128,
6882 .page_size = 512,
snelsonc6855342010-01-28 23:55:12 +00006883 .feature_bits = FEATURE_EITHER_RESET,
David Hendricks82fd8ae2010-08-04 14:34:54 -07006884 .tested = TEST_UNTESTED,
6885 .probe = probe_jedec,
6886 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6887 .block_erasers =
6888 {
6889 {
6890 .eraseblocks = { {512, 256} },
6891 .block_erase = erase_sector_jedec,
6892 }, {
6893 .eraseblocks = { {128 * 1024, 1} },
6894 .block_erase = erase_chip_block_jedec,
6895 },
6896 },
6897 .write = write_jedec_1,
6898 .read = read_memmapped,
6899 },
6900
6901 {
6902 .vendor = "SyncMOS/MoselVitelic",
6903 .name = "{F,S,V}29C51002B",
6904 .bustype = CHIP_BUSTYPE_PARALLEL,
6905 .manufacture_id = SYNCMOS_MVC_ID,
6906 .model_id = SM_MVC_29C51002B,
6907 .total_size = 256,
6908 .page_size = 512,
6909 .feature_bits = FEATURE_EITHER_RESET,
6910 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00006911 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00006912 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00006913 .block_erasers =
6914 {
6915 {
6916 .eraseblocks = { {512, 512} },
6917 .block_erase = erase_sector_jedec,
6918 }, {
6919 .eraseblocks = { {256 * 1024, 1} },
6920 .block_erase = erase_chip_block_jedec,
6921 },
6922 },
snelsonc6855342010-01-28 23:55:12 +00006923 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00006924 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00006925 },
6926
hailfinger286829b2009-01-08 03:40:17 +00006927 {
David Hendricks82fd8ae2010-08-04 14:34:54 -07006928 .vendor = "SyncMOS/MoselVitelic",
6929 .name = "{F,S,V}29C51002T",
hailfingera5245512009-06-28 19:19:25 +00006930 .bustype = CHIP_BUSTYPE_PARALLEL,
David Hendricks82fd8ae2010-08-04 14:34:54 -07006931 .manufacture_id = SYNCMOS_MVC_ID,
6932 .model_id = SM_MVC_29C51002T,
6933 .total_size = 256,
6934 .page_size = 512,
6935 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08006936 .tested = TEST_OK_PRE,
David Hendricks82fd8ae2010-08-04 14:34:54 -07006937 .probe = probe_jedec,
6938 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
6939 .block_erasers =
6940 {
6941 {
6942 .eraseblocks = { {512, 512} },
6943 .block_erase = erase_sector_jedec,
6944 }, {
6945 .eraseblocks = { {256 * 1024, 1} },
6946 .block_erase = erase_chip_block_jedec,
6947 },
6948 },
6949 .write = write_jedec_1,
6950 .read = read_memmapped,
6951 },
6952
6953 {
6954 .vendor = "SyncMOS/MoselVitelic",
6955 .name = "{F,S,V}29C51004B",
6956 .bustype = CHIP_BUSTYPE_PARALLEL,
6957 .manufacture_id = SYNCMOS_MVC_ID,
6958 .model_id = SM_MVC_29C51004B,
hailfinger286829b2009-01-08 03:40:17 +00006959 .total_size = 512,
David Hendricks82fd8ae2010-08-04 14:34:54 -07006960 .page_size = 1024,
snelsonc6855342010-01-28 23:55:12 +00006961 .feature_bits = FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00006962 .tested = TEST_UNTESTED,
6963 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00006964 .probe_timing = TIMING_ZERO,
snelsone0c56352010-01-19 16:08:51 +00006965 .block_erasers =
6966 {
6967 {
David Hendricks82fd8ae2010-08-04 14:34:54 -07006968 .eraseblocks = { {1024, 512} },
6969 .block_erase = erase_sector_jedec,
6970 }, {
6971 .eraseblocks = { {512 * 1024, 1} },
6972 .block_erase = erase_chip_block_jedec,
6973 },
6974 },
6975 .write = write_jedec_1,
6976 .read = read_memmapped,
6977 },
6978
6979 {
6980 .vendor = "SyncMOS/MoselVitelic",
6981 .name = "{F,S,V}29C51004T",
6982 .bustype = CHIP_BUSTYPE_PARALLEL,
6983 .manufacture_id = SYNCMOS_MVC_ID,
6984 .model_id = SM_MVC_29C51004T,
6985 .total_size = 512,
6986 .page_size = 1024,
6987 .feature_bits = FEATURE_EITHER_RESET,
6988 .tested = TEST_UNTESTED,
6989 .probe = probe_jedec,
6990 .probe_timing = TIMING_ZERO,
6991 .block_erasers =
6992 {
6993 {
6994 .eraseblocks = { {1024, 512} },
6995 .block_erase = erase_sector_jedec,
6996 }, {
6997 .eraseblocks = { {512 * 1024, 1} },
6998 .block_erase = erase_chip_block_jedec,
6999 },
7000 },
7001 .write = write_jedec_1,
7002 .read = read_memmapped,
7003 },
7004
7005 {
7006 .vendor = "SyncMOS/MoselVitelic",
7007 .name = "{S,V}29C31004B",
7008 .bustype = CHIP_BUSTYPE_PARALLEL,
7009 .manufacture_id = SYNCMOS_MVC_ID,
7010 .model_id = SM_MVC_29C31004B,
7011 .total_size = 512,
7012 .page_size = 1024,
7013 .feature_bits = FEATURE_EITHER_RESET,
7014 .tested = TEST_UNTESTED,
7015 .probe = probe_jedec,
7016 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7017 .block_erasers =
7018 {
7019 {
7020 .eraseblocks = { {1024, 512} },
7021 .block_erase = erase_sector_jedec,
7022 }, {
7023 .eraseblocks = { {512 * 1024, 1} },
7024 .block_erase = erase_chip_block_jedec,
7025 },
7026 },
7027 .write = write_jedec_1,
7028 .read = read_memmapped,
7029 },
7030
7031 {
7032 .vendor = "SyncMOS/MoselVitelic",
7033 .name = "{S,V}29C31004T",
7034 .bustype = CHIP_BUSTYPE_PARALLEL,
7035 .manufacture_id = SYNCMOS_MVC_ID,
7036 .model_id = SM_MVC_29C31004T,
7037 .total_size = 512,
7038 .page_size = 1024,
7039 .feature_bits = FEATURE_EITHER_RESET,
7040 .tested = TEST_UNTESTED,
7041 .probe = probe_jedec,
7042 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
7043 .block_erasers =
7044 {
7045 {
7046 .eraseblocks = { {1024, 512} },
snelsone0c56352010-01-19 16:08:51 +00007047 .block_erase = erase_sector_jedec,
7048 }, {
7049 .eraseblocks = { {512 * 1024, 1} },
7050 .block_erase = erase_chip_block_jedec,
7051 },
7052 },
snelsonc6855342010-01-28 23:55:12 +00007053 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007054 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007055 },
7056
hailfinger286829b2009-01-08 03:40:17 +00007057 {
uwe77048c72009-05-27 23:17:40 +00007058 .vendor = "TI",
hailfingerf66fa232009-05-26 21:26:23 +00007059 .name = "TMS29F002RB",
hailfingera5245512009-06-28 19:19:25 +00007060 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingerf66fa232009-05-26 21:26:23 +00007061 .manufacture_id = TI_OLD_ID,
7062 .model_id = TI_TMS29F002RB,
7063 .total_size = 256,
7064 .page_size = 16384, /* Non-uniform sectors */
snelsonc6855342010-01-28 23:55:12 +00007065 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfingerf66fa232009-05-26 21:26:23 +00007066 .tested = TEST_UNTESTED,
7067 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00007068 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00007069 .block_erasers =
7070 {
7071 {
7072 .eraseblocks = {
7073 {16 * 1024, 1},
7074 {8 * 1024, 2},
7075 {32 * 1024, 1},
7076 {64 * 1024, 3},
7077 },
7078 .block_erase = erase_sector_jedec,
7079 }, {
7080 .eraseblocks = { {256 * 1024, 1} },
7081 .block_erase = erase_chip_block_jedec,
7082 },
7083 },
snelsonc6855342010-01-28 23:55:12 +00007084 .write = write_jedec_1,
hailfingerf66fa232009-05-26 21:26:23 +00007085 .read = read_memmapped,
7086 },
7087
7088 {
uwe77048c72009-05-27 23:17:40 +00007089 .vendor = "TI",
hailfingerf66fa232009-05-26 21:26:23 +00007090 .name = "TMS29F002RT",
hailfingera5245512009-06-28 19:19:25 +00007091 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfingerf66fa232009-05-26 21:26:23 +00007092 .manufacture_id = TI_OLD_ID,
7093 .model_id = TI_TMS29F002RT,
7094 .total_size = 256,
7095 .page_size = 16384, /* Non-uniform sectors */
snelsonc6855342010-01-28 23:55:12 +00007096 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
hailfingerf66fa232009-05-26 21:26:23 +00007097 .tested = TEST_UNTESTED,
7098 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00007099 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
snelsone0c56352010-01-19 16:08:51 +00007100 .block_erasers =
7101 {
7102 {
7103 .eraseblocks = {
7104 {64 * 1024, 3},
7105 {32 * 1024, 1},
7106 {8 * 1024, 2},
7107 {16 * 1024, 1},
7108 },
7109 .block_erase = erase_sector_jedec,
7110 }, {
7111 .eraseblocks = { {256 * 1024, 1} },
7112 .block_erase = erase_chip_block_jedec,
7113 },
7114 },
snelsonc6855342010-01-28 23:55:12 +00007115 .write = write_jedec_1,
hailfingerf66fa232009-05-26 21:26:23 +00007116 .read = read_memmapped,
7117 },
7118
7119 {
hailfinger286829b2009-01-08 03:40:17 +00007120 .vendor = "Winbond",
ruikfbf40532010-04-20 19:34:31 +00007121 .name = "W25Q80",
7122 .bustype = CHIP_BUSTYPE_SPI,
7123 .manufacture_id = WINBOND_NEX_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007124 .model_id = WINBOND_NEX_W25Q80,
ruikfbf40532010-04-20 19:34:31 +00007125 .total_size = 1024,
7126 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08007127 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks668f29d2011-01-27 18:51:45 -08007128 .tested = TEST_OK_PREW,
ruikfbf40532010-04-20 19:34:31 +00007129 .probe = probe_spi_rdid,
7130 .probe_timing = TIMING_ZERO,
7131 .block_erasers =
7132 {
7133 {
7134 .eraseblocks = { {4 * 1024, 256} },
7135 .block_erase = spi_block_erase_20,
7136 }, {
7137 .eraseblocks = { {32 * 1024, 32} },
7138 .block_erase = spi_block_erase_52,
7139 }, {
7140 .eraseblocks = { {64 * 1024, 16} },
7141 .block_erase = spi_block_erase_d8,
7142 }, {
7143 .eraseblocks = { {1024 * 1024, 1} },
7144 .block_erase = spi_block_erase_60,
7145 }, {
7146 .eraseblocks = { {1024 * 1024, 1} },
7147 .block_erase = spi_block_erase_c7,
7148 }
7149 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07007150 .unlock = spi_disable_blockprotect,
ruikfbf40532010-04-20 19:34:31 +00007151 .write = spi_chip_write_256,
7152 .read = spi_chip_read,
David Hendrickse7272b02010-08-16 21:59:22 -07007153 .wp = &wp_w25,
ruikfbf40532010-04-20 19:34:31 +00007154 },
7155
7156 {
7157 .vendor = "Winbond",
7158 .name = "W25Q16",
7159 .bustype = CHIP_BUSTYPE_SPI,
7160 .manufacture_id = WINBOND_NEX_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007161 .model_id = WINBOND_NEX_W25Q16,
ruikfbf40532010-04-20 19:34:31 +00007162 .total_size = 2048,
7163 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08007164 .feature_bits = FEATURE_WRSR_WREN,
David Hendricks46332702010-12-29 11:09:46 -08007165 .tested = TEST_OK_PREW,
ruikfbf40532010-04-20 19:34:31 +00007166 .probe = probe_spi_rdid,
7167 .probe_timing = TIMING_ZERO,
7168 .block_erasers =
7169 {
7170 {
7171 .eraseblocks = { {4 * 1024, 512} },
7172 .block_erase = spi_block_erase_20,
7173 }, {
7174 .eraseblocks = { {32 * 1024, 64} },
7175 .block_erase = spi_block_erase_52,
7176 }, {
7177 .eraseblocks = { {64 * 1024, 32} },
7178 .block_erase = spi_block_erase_d8,
7179 }, {
7180 .eraseblocks = { {2 * 1024 * 1024, 1} },
7181 .block_erase = spi_block_erase_60,
7182 }, {
7183 .eraseblocks = { {2 * 1024 * 1024, 1} },
7184 .block_erase = spi_block_erase_c7,
7185 }
7186 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07007187 .unlock = spi_disable_blockprotect,
ruikfbf40532010-04-20 19:34:31 +00007188 .write = spi_chip_write_256,
7189 .read = spi_chip_read,
David Hendricks46332702010-12-29 11:09:46 -08007190 .wp = &wp_w25,
ruikfbf40532010-04-20 19:34:31 +00007191 },
7192
7193 {
7194 .vendor = "Winbond",
7195 .name = "W25Q32",
7196 .bustype = CHIP_BUSTYPE_SPI,
7197 .manufacture_id = WINBOND_NEX_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007198 .model_id = WINBOND_NEX_W25Q32,
ruikfbf40532010-04-20 19:34:31 +00007199 .total_size = 4096,
7200 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08007201 .feature_bits = FEATURE_WRSR_WREN,
David Hendricksfa20ad82010-10-08 11:03:10 -07007202 .tested = TEST_OK_PREW,
ruikfbf40532010-04-20 19:34:31 +00007203 .probe = probe_spi_rdid,
7204 .probe_timing = TIMING_ZERO,
7205 .block_erasers =
7206 {
7207 {
7208 .eraseblocks = { {4 * 1024, 1024} },
7209 .block_erase = spi_block_erase_20,
7210 }, {
7211 .eraseblocks = { {32 * 1024, 128} },
7212 .block_erase = spi_block_erase_52,
7213 }, {
7214 .eraseblocks = { {64 * 1024, 64} },
7215 .block_erase = spi_block_erase_d8,
7216 }, {
7217 .eraseblocks = { {4 * 1024 * 1024, 1} },
7218 .block_erase = spi_block_erase_60,
7219 }, {
7220 .eraseblocks = { {4 * 1024 * 1024, 1} },
7221 .block_erase = spi_block_erase_c7,
7222 }
7223 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07007224 .unlock = spi_disable_blockprotect,
ruikfbf40532010-04-20 19:34:31 +00007225 .write = spi_chip_write_256,
7226 .read = spi_chip_read,
David Hendricksf7924d12010-06-10 21:26:44 -07007227 .wp = &wp_w25,
ruikfbf40532010-04-20 19:34:31 +00007228 },
7229
7230 {
7231 .vendor = "Winbond",
hailfingerceb59bb2010-06-24 11:39:57 +00007232 .name = "W25Q64",
7233 .bustype = CHIP_BUSTYPE_SPI,
7234 .manufacture_id = WINBOND_NEX_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007235 .model_id = WINBOND_NEX_W25Q64,
hailfingerceb59bb2010-06-24 11:39:57 +00007236 .total_size = 8192,
7237 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08007238 .feature_bits = FEATURE_WRSR_WREN,
David Hendricksfa20ad82010-10-08 11:03:10 -07007239 .tested = TEST_OK_PREW,
hailfingerceb59bb2010-06-24 11:39:57 +00007240 .probe = probe_spi_rdid,
7241 .probe_timing = TIMING_ZERO,
7242 .block_erasers =
7243 {
7244 {
7245 .eraseblocks = { {4 * 1024, 2048} },
7246 .block_erase = spi_block_erase_20,
7247 }, {
7248 .eraseblocks = { {32 * 1024, 256} },
7249 .block_erase = spi_block_erase_52,
7250 }, {
7251 .eraseblocks = { {64 * 1024, 128} },
7252 .block_erase = spi_block_erase_d8,
7253 }, {
7254 .eraseblocks = { {8 * 1024 * 1024, 1} },
7255 .block_erase = spi_block_erase_60,
7256 }, {
7257 .eraseblocks = { {8 * 1024 * 1024, 1} },
7258 .block_erase = spi_block_erase_c7,
7259 }
7260 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07007261 .unlock = spi_disable_blockprotect,
hailfingerceb59bb2010-06-24 11:39:57 +00007262 .write = spi_chip_write_256,
7263 .read = spi_chip_read,
David Hendrickse7272b02010-08-16 21:59:22 -07007264 .wp = &wp_w25,
hailfingerceb59bb2010-06-24 11:39:57 +00007265 },
7266
7267 {
7268 .vendor = "Winbond",
hailfinger286829b2009-01-08 03:40:17 +00007269 .name = "W25x10",
hailfinger40167462009-05-31 17:57:34 +00007270 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007271 .manufacture_id = WINBOND_NEX_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007272 .model_id = WINBOND_NEX_W25X10,
hailfinger286829b2009-01-08 03:40:17 +00007273 .total_size = 128,
7274 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08007275 .feature_bits = FEATURE_WRSR_WREN,
David Hendricksfa20ad82010-10-08 11:03:10 -07007276 .tested = TEST_OK_PREW,
hailfinger286829b2009-01-08 03:40:17 +00007277 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007278 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00007279 .block_erasers =
7280 {
7281 {
7282 .eraseblocks = { {4 * 1024, 32} },
7283 .block_erase = spi_block_erase_20,
7284 }, {
snelson376060c2010-01-19 03:24:55 +00007285 .eraseblocks = { {64 * 1024, 2} },
7286 .block_erase = spi_block_erase_d8,
7287 }, {
7288 .eraseblocks = { {128 * 1024, 1} },
snelson376060c2010-01-19 03:24:55 +00007289 .block_erase = spi_block_erase_c7,
7290 }
7291 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07007292 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007293 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007294 .read = spi_chip_read,
Louis Yung-Chieh Lo232951f2010-09-16 11:30:00 +08007295 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00007296 },
7297
hailfinger286829b2009-01-08 03:40:17 +00007298 {
7299 .vendor = "Winbond",
7300 .name = "W25x20",
hailfinger40167462009-05-31 17:57:34 +00007301 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007302 .manufacture_id = WINBOND_NEX_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007303 .model_id = WINBOND_NEX_W25X20,
hailfinger286829b2009-01-08 03:40:17 +00007304 .total_size = 256,
7305 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08007306 .feature_bits = FEATURE_WRSR_WREN,
hailfinger286829b2009-01-08 03:40:17 +00007307 .tested = TEST_UNTESTED,
7308 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007309 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00007310 .block_erasers =
7311 {
7312 {
7313 .eraseblocks = { {4 * 1024, 64} },
7314 .block_erase = spi_block_erase_20,
7315 }, {
snelson376060c2010-01-19 03:24:55 +00007316 .eraseblocks = { {64 * 1024, 4} },
7317 .block_erase = spi_block_erase_d8,
7318 }, {
7319 .eraseblocks = { {256 * 1024, 1} },
snelson376060c2010-01-19 03:24:55 +00007320 .block_erase = spi_block_erase_c7,
7321 }
7322 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07007323 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007324 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007325 .read = spi_chip_read,
Louis Yung-Chieh Lo232951f2010-09-16 11:30:00 +08007326 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00007327 },
7328
hailfinger286829b2009-01-08 03:40:17 +00007329 {
7330 .vendor = "Winbond",
7331 .name = "W25x40",
hailfinger40167462009-05-31 17:57:34 +00007332 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007333 .manufacture_id = WINBOND_NEX_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007334 .model_id = WINBOND_NEX_W25X40,
hailfinger286829b2009-01-08 03:40:17 +00007335 .total_size = 512,
7336 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08007337 .feature_bits = FEATURE_WRSR_WREN,
7338 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00007339 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007340 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00007341 .block_erasers =
7342 {
7343 {
7344 .eraseblocks = { {4 * 1024, 128} },
7345 .block_erase = spi_block_erase_20,
7346 }, {
snelson376060c2010-01-19 03:24:55 +00007347 .eraseblocks = { {64 * 1024, 8} },
7348 .block_erase = spi_block_erase_d8,
7349 }, {
7350 .eraseblocks = { {512 * 1024, 1} },
snelson376060c2010-01-19 03:24:55 +00007351 .block_erase = spi_block_erase_c7,
7352 }
7353 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07007354 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007355 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007356 .read = spi_chip_read,
Louis Yung-Chieh Lo232951f2010-09-16 11:30:00 +08007357 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00007358 },
7359
hailfinger286829b2009-01-08 03:40:17 +00007360 {
7361 .vendor = "Winbond",
7362 .name = "W25x80",
hailfinger40167462009-05-31 17:57:34 +00007363 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007364 .manufacture_id = WINBOND_NEX_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007365 .model_id = WINBOND_NEX_W25X80,
hailfinger286829b2009-01-08 03:40:17 +00007366 .total_size = 1024,
7367 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08007368 .feature_bits = FEATURE_WRSR_WREN,
7369 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00007370 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007371 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00007372 .block_erasers =
7373 {
7374 {
7375 .eraseblocks = { {4 * 1024, 256} },
7376 .block_erase = spi_block_erase_20,
7377 }, {
snelson376060c2010-01-19 03:24:55 +00007378 .eraseblocks = { {64 * 1024, 16} },
7379 .block_erase = spi_block_erase_d8,
7380 }, {
7381 .eraseblocks = { {1024 * 1024, 1} },
snelson376060c2010-01-19 03:24:55 +00007382 .block_erase = spi_block_erase_c7,
7383 }
7384 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07007385 .unlock = spi_disable_blockprotect,
hailfinger87c05482009-05-09 02:34:18 +00007386 .write = spi_chip_write_256,
hailfinger286829b2009-01-08 03:40:17 +00007387 .read = spi_chip_read,
Louis Yung-Chieh Lo232951f2010-09-16 11:30:00 +08007388 .wp = &wp_w25,
stepanaa1b6a22008-12-08 18:15:10 +00007389 },
7390
hailfinger286829b2009-01-08 03:40:17 +00007391 {
7392 .vendor = "Winbond",
hailfingerea04a9e2009-07-11 19:39:11 +00007393 .name = "W25x16",
7394 .bustype = CHIP_BUSTYPE_SPI,
7395 .manufacture_id = WINBOND_NEX_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007396 .model_id = WINBOND_NEX_W25X16,
hailfingerea04a9e2009-07-11 19:39:11 +00007397 .total_size = 2048,
7398 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08007399 .feature_bits = FEATURE_WRSR_WREN,
7400 .tested = TEST_OK_PRE,
hailfingerea04a9e2009-07-11 19:39:11 +00007401 .probe = probe_spi_rdid,
7402 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00007403 .block_erasers =
7404 {
7405 {
7406 .eraseblocks = { {4 * 1024, 512} },
7407 .block_erase = spi_block_erase_20,
7408 }, {
7409 .eraseblocks = { {32 * 1024, 64} },
7410 .block_erase = spi_block_erase_52,
7411 }, {
7412 .eraseblocks = { {64 * 1024, 32} },
7413 .block_erase = spi_block_erase_d8,
7414 }, {
7415 .eraseblocks = { {2 * 1024 * 1024, 1} },
7416 .block_erase = spi_block_erase_60,
7417 }, {
7418 .eraseblocks = { {2 * 1024 * 1024, 1} },
7419 .block_erase = spi_block_erase_c7,
7420 }
7421 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07007422 .unlock = spi_disable_blockprotect,
hailfingerea04a9e2009-07-11 19:39:11 +00007423 .write = spi_chip_write_256,
7424 .read = spi_chip_read,
7425 },
7426
7427 {
7428 .vendor = "Winbond",
hailfingerd5431fb2009-11-26 11:05:01 +00007429 .name = "W25x32",
7430 .bustype = CHIP_BUSTYPE_SPI,
7431 .manufacture_id = WINBOND_NEX_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007432 .model_id = WINBOND_NEX_W25X32,
hailfingerd5431fb2009-11-26 11:05:01 +00007433 .total_size = 4096,
7434 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08007435 .feature_bits = FEATURE_WRSR_WREN,
hailfingerd5431fb2009-11-26 11:05:01 +00007436 .tested = TEST_OK_PROBE,
7437 .probe = probe_spi_rdid,
7438 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00007439 .block_erasers =
7440 {
7441 {
7442 .eraseblocks = { {4 * 1024, 1024} },
7443 .block_erase = spi_block_erase_20,
7444 }, {
7445 .eraseblocks = { {32 * 1024, 128} },
7446 .block_erase = spi_block_erase_52,
7447 }, {
7448 .eraseblocks = { {64 * 1024, 64} },
7449 .block_erase = spi_block_erase_d8,
7450 }, {
7451 .eraseblocks = { {4 * 1024 * 1024, 1} },
7452 .block_erase = spi_block_erase_60,
7453 }, {
7454 .eraseblocks = { {4 * 1024 * 1024, 1} },
7455 .block_erase = spi_block_erase_c7,
7456 }
7457 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07007458 .unlock = spi_disable_blockprotect,
hailfingerd5431fb2009-11-26 11:05:01 +00007459 .write = spi_chip_write_256,
7460 .read = spi_chip_read,
7461 },
7462
7463 {
7464 .vendor = "Winbond",
7465 .name = "W25x64",
7466 .bustype = CHIP_BUSTYPE_SPI,
7467 .manufacture_id = WINBOND_NEX_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007468 .model_id = WINBOND_NEX_W25X64,
hailfingerd5431fb2009-11-26 11:05:01 +00007469 .total_size = 8192,
7470 .page_size = 256,
David Hendricksc801adb2010-12-09 16:58:56 -08007471 .feature_bits = FEATURE_WRSR_WREN,
hailfingerd5431fb2009-11-26 11:05:01 +00007472 .tested = TEST_UNTESTED,
7473 .probe = probe_spi_rdid,
7474 .probe_timing = TIMING_ZERO,
snelson376060c2010-01-19 03:24:55 +00007475 .block_erasers =
7476 {
7477 {
7478 .eraseblocks = { {4 * 1024, 2048} },
7479 .block_erase = spi_block_erase_20,
7480 }, {
7481 .eraseblocks = { {32 * 1024, 256} },
7482 .block_erase = spi_block_erase_52,
7483 }, {
7484 .eraseblocks = { {64 * 1024, 128} },
7485 .block_erase = spi_block_erase_d8,
7486 }, {
7487 .eraseblocks = { {8 * 1024 * 1024, 1} },
7488 .block_erase = spi_block_erase_60,
7489 }, {
7490 .eraseblocks = { {8 * 1024 * 1024, 1} },
7491 .block_erase = spi_block_erase_c7,
7492 }
7493 },
David Hendricks82fd8ae2010-08-04 14:34:54 -07007494 .unlock = spi_disable_blockprotect,
hailfingerd5431fb2009-11-26 11:05:01 +00007495 .write = spi_chip_write_256,
7496 .read = spi_chip_read,
7497 },
7498
7499 {
7500 .vendor = "Winbond",
David Hendricksc801adb2010-12-09 16:58:56 -08007501 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
hailfingera5245512009-06-28 19:19:25 +00007502 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00007503 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007504 .model_id = WINBOND_W29C010,
hailfinger286829b2009-01-08 03:40:17 +00007505 .total_size = 128,
7506 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00007507 .feature_bits = FEATURE_LONG_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08007508 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00007509 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00007510 .probe_timing = 10, /* used datasheet for the W29C011A */
snelson376060c2010-01-19 03:24:55 +00007511 .block_erasers =
7512 {
7513 {
7514 .eraseblocks = { {128 * 1024, 1} },
7515 .block_erase = erase_chip_block_jedec,
7516 }
7517 },
hailfinger286829b2009-01-08 03:40:17 +00007518 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00007519 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007520 },
7521
hailfinger286829b2009-01-08 03:40:17 +00007522 {
7523 .vendor = "Winbond",
David Hendricksc801adb2010-12-09 16:58:56 -08007524 .name = "W29C020(C)/W29C022",
hailfingerdaecf7e2009-06-05 08:47:37 +00007525 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00007526 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007527 .model_id = WINBOND_W29C020,
hailfinger286829b2009-01-08 03:40:17 +00007528 .total_size = 256,
7529 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00007530 .feature_bits = FEATURE_LONG_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08007531 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00007532 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00007533 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007534 .block_erasers =
7535 {
7536 {
7537 .eraseblocks = { {256 * 1024, 1} },
7538 .block_erase = erase_chip_block_jedec,
7539 }
7540 },
hailfinger286829b2009-01-08 03:40:17 +00007541 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00007542 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007543 },
7544
hailfinger286829b2009-01-08 03:40:17 +00007545 {
7546 .vendor = "Winbond",
David Hendricksc801adb2010-12-09 16:58:56 -08007547 .name = "W29C040/P",
hailfingerdaecf7e2009-06-05 08:47:37 +00007548 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00007549 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007550 .model_id = WINBOND_W29C040,
hailfinger286829b2009-01-08 03:40:17 +00007551 .total_size = 512,
7552 .page_size = 256,
snelsonc6855342010-01-28 23:55:12 +00007553 .feature_bits = FEATURE_LONG_RESET,
7554 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00007555 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00007556 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007557 .block_erasers =
7558 {
7559 {
7560 .eraseblocks = { {512 * 1024, 1} },
7561 .block_erase = erase_chip_block_jedec,
7562 }
7563 },
hailfinger286829b2009-01-08 03:40:17 +00007564 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00007565 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007566 },
7567
hailfinger286829b2009-01-08 03:40:17 +00007568 {
7569 .vendor = "Winbond",
David Hendricksc801adb2010-12-09 16:58:56 -08007570 .name = "W29C010(M)/W29C011A/W29EE011/W29EE012",
hailfingera5245512009-06-28 19:19:25 +00007571 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00007572 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007573 .model_id = WINBOND_W29C010,
hailfinger286829b2009-01-08 03:40:17 +00007574 .total_size = 128,
7575 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00007576 .feature_bits = FEATURE_LONG_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08007577 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00007578 .probe = probe_w29ee011,
hailfingerd5b35922009-06-03 14:46:22 +00007579 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
snelson376060c2010-01-19 03:24:55 +00007580 .block_erasers =
7581 {
7582 {
7583 .eraseblocks = { {128 * 1024, 1} },
7584 .block_erase = erase_chip_block_jedec,
7585 }
7586 },
hailfinger286829b2009-01-08 03:40:17 +00007587 .write = write_jedec,
hailfinger23060112009-05-08 12:49:03 +00007588 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007589 },
7590
hailfinger286829b2009-01-08 03:40:17 +00007591 {
7592 .vendor = "Winbond",
7593 .name = "W39V040A",
hailfingerf850e0a2009-06-12 21:29:36 +00007594 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00007595 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007596 .model_id = WINBOND_W39V040A,
hailfinger286829b2009-01-08 03:40:17 +00007597 .total_size = 512,
hailfingerc43afc92009-12-22 22:15:33 +00007598 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007599 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08007600 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00007601 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00007602 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007603 .block_erasers =
7604 {
7605 {
7606 .eraseblocks = { {64 * 1024, 8} },
7607 .block_erase = erase_sector_jedec,
7608 }, {
7609 .eraseblocks = { {512 * 1024, 1} },
7610 .block_erase = erase_chip_block_jedec,
7611 }
7612 },
David Hendricks668f29d2011-01-27 18:51:45 -08007613 .printlock = printlock_w39v040a,
snelsonc6855342010-01-28 23:55:12 +00007614 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007615 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007616 },
7617
hailfinger286829b2009-01-08 03:40:17 +00007618 {
7619 .vendor = "Winbond",
David Hendricks668f29d2011-01-27 18:51:45 -08007620 .name = "W39V040B",
hailfingerf850e0a2009-06-12 21:29:36 +00007621 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00007622 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007623 .model_id = WINBOND_W39V040B,
hailfinger286829b2009-01-08 03:40:17 +00007624 .total_size = 512,
hailfingerc43afc92009-12-22 22:15:33 +00007625 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007626 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08007627 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00007628 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00007629 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007630 .block_erasers =
7631 {
7632 {
7633 .eraseblocks = { {64 * 1024, 8} },
7634 .block_erase = erase_sector_jedec,
7635 }, {
7636 .eraseblocks = { {512 * 1024, 1} },
7637 .block_erase = erase_chip_block_jedec,
7638 }
7639 },
David Hendricks668f29d2011-01-27 18:51:45 -08007640 .printlock = printlock_w39v040b,
snelsonc6855342010-01-28 23:55:12 +00007641 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007642 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007643 },
7644
hailfinger286829b2009-01-08 03:40:17 +00007645 {
7646 .vendor = "Winbond",
David Hendricks668f29d2011-01-27 18:51:45 -08007647 .name = "W39V040C",
hailfingerf850e0a2009-06-12 21:29:36 +00007648 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00007649 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007650 .model_id = WINBOND_W39V040C,
hailfinger286829b2009-01-08 03:40:17 +00007651 .total_size = 512,
hailfingerc43afc92009-12-22 22:15:33 +00007652 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007653 .feature_bits = FEATURE_EITHER_RESET,
7654 .tested = TEST_UNTESTED,
7655 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -08007656 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007657 .block_erasers =
7658 {
7659 {
7660 .eraseblocks = { {64 * 1024, 8} },
7661 .block_erase = erase_sector_jedec,
7662 }, {
7663 .eraseblocks = { {512 * 1024, 1} },
7664 .block_erase = erase_chip_block_jedec,
7665 }
7666 },
snelson1ee293c2010-02-19 00:52:10 +00007667 .printlock = printlock_w39v040c,
snelsonc6855342010-01-28 23:55:12 +00007668 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007669 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007670 },
7671
hailfinger286829b2009-01-08 03:40:17 +00007672 {
7673 .vendor = "Winbond",
7674 .name = "W39V040FA",
hailfingerf850e0a2009-06-12 21:29:36 +00007675 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00007676 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007677 .model_id = WINBOND_W39V040FA,
hailfinger286829b2009-01-08 03:40:17 +00007678 .total_size = 512,
hailfingerc43afc92009-12-22 22:15:33 +00007679 .page_size = 64 * 1024,
mkarcher74173032010-05-30 16:55:18 +00007680 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08007681 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00007682 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00007683 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007684 .block_erasers =
7685 {
7686 {
7687 .eraseblocks = { {4 * 1024, 128} },
7688 .block_erase = erase_block_jedec,
7689 }, {
7690 .eraseblocks = { {64 * 1024, 8} },
7691 .block_erase = erase_sector_jedec,
7692 }, {
7693 .eraseblocks = { {512 * 1024, 1} },
7694 .block_erase = erase_chip_block_jedec,
7695 }
7696 },
David Hendricks668f29d2011-01-27 18:51:45 -08007697 .printlock = printlock_w39v040fa,
mkarcher74173032010-05-30 16:55:18 +00007698 .unlock = unlock_sst_fwhub,
snelsonc6855342010-01-28 23:55:12 +00007699 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007700 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007701 },
7702
hailfinger286829b2009-01-08 03:40:17 +00007703 {
7704 .vendor = "Winbond",
David Hendricks668f29d2011-01-27 18:51:45 -08007705 .name = "W39V040FB",
7706 .bustype = CHIP_BUSTYPE_FWH,
7707 .manufacture_id = WINBOND_ID,
7708 .model_id = WINBOND_W39V040B,
7709 .total_size = 512,
7710 .page_size = 64 * 1024,
7711 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
7712 .tested = TEST_OK_PRE,
7713 .probe = probe_jedec,
7714 .probe_timing = 10,
7715 .block_erasers =
7716 {
7717 {
7718 .eraseblocks = { {64 * 1024, 8} },
7719 .block_erase = erase_sector_jedec,
7720 }, {
7721 .eraseblocks = { {512 * 1024, 1} },
7722 .block_erase = erase_chip_block_jedec,
7723 }
7724 },
7725 .printlock = printlock_w39v040fb,
7726 .unlock = unlock_w39v040fb,
7727 .write = write_jedec_1,
7728 .read = read_memmapped,
7729 },
7730
7731 {
7732 .vendor = "Winbond",
7733 .name = "W39V040FC",
7734 .bustype = CHIP_BUSTYPE_FWH,
7735 .manufacture_id = WINBOND_ID,
7736 .model_id = WINBOND_W39V040C,
7737 .total_size = 512,
7738 .page_size = 64 * 1024,
7739 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
7740 .tested = TEST_UNTESTED,
7741 .probe = probe_jedec,
7742 .probe_timing = 10,
7743 .block_erasers =
7744 {
7745 {
7746 .eraseblocks = { {64 * 1024, 8} },
7747 .block_erase = erase_sector_jedec,
7748 }, {
7749 .eraseblocks = { {512 * 1024, 1} },
7750 .block_erase = erase_chip_block_jedec,
7751 }
7752 },
7753 .printlock = printlock_w39v040fc,
7754 .write = write_jedec_1,
7755 .read = read_memmapped,
7756 },
7757
7758 {
7759 .vendor = "Winbond",
hailfinger286829b2009-01-08 03:40:17 +00007760 .name = "W39V080A",
hailfingerf850e0a2009-06-12 21:29:36 +00007761 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00007762 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007763 .model_id = WINBOND_W39V080A,
hailfinger286829b2009-01-08 03:40:17 +00007764 .total_size = 1024,
hailfingerc43afc92009-12-22 22:15:33 +00007765 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007766 .feature_bits = FEATURE_EITHER_RESET,
7767 .tested = TEST_UNTESTED,
hailfinger286829b2009-01-08 03:40:17 +00007768 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00007769 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007770 .block_erasers =
7771 {
7772 {
7773 .eraseblocks = { {64 * 1024, 16} },
7774 .block_erase = erase_sector_jedec,
7775 }, {
7776 .eraseblocks = { {1024 * 1024, 1} },
7777 .block_erase = erase_chip_block_jedec,
7778 }
7779 },
David Hendricks668f29d2011-01-27 18:51:45 -08007780 .printlock = printlock_w39v080a,
snelsonc6855342010-01-28 23:55:12 +00007781 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007782 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007783 },
7784
hailfinger286829b2009-01-08 03:40:17 +00007785 {
7786 .vendor = "Winbond",
David Hendricksc801adb2010-12-09 16:58:56 -08007787 .name = "W49F002U/N",
hailfingera5245512009-06-28 19:19:25 +00007788 .bustype = CHIP_BUSTYPE_PARALLEL,
hailfinger286829b2009-01-08 03:40:17 +00007789 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007790 .model_id = WINBOND_W49F002U,
hailfinger286829b2009-01-08 03:40:17 +00007791 .total_size = 256,
7792 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00007793 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08007794 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00007795 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00007796 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007797 .block_erasers =
7798 {
7799 {
7800 .eraseblocks = {
7801 {128 * 1024, 1},
7802 {96 * 1024, 1},
7803 {8 * 1024, 2},
7804 {16 * 1024, 1},
7805 },
7806 .block_erase = erase_sector_jedec,
7807 }, {
7808 .eraseblocks = { {256 * 1024, 1} },
7809 .block_erase = erase_chip_block_jedec,
7810 }
7811 },
snelsonc6855342010-01-28 23:55:12 +00007812 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007813 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007814 },
7815
hailfinger286829b2009-01-08 03:40:17 +00007816 {
7817 .vendor = "Winbond",
David Hendricks82fd8ae2010-08-04 14:34:54 -07007818 .name = "W49F020",
7819 .bustype = CHIP_BUSTYPE_PARALLEL,
7820 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007821 .model_id = WINBOND_W49F020,
David Hendricks82fd8ae2010-08-04 14:34:54 -07007822 .total_size = 256,
7823 .page_size = 128,
7824 .feature_bits = FEATURE_EITHER_RESET,
7825 .tested = TEST_OK_PROBE,
7826 .probe = probe_jedec,
7827 .probe_timing = 10,
7828 .block_erasers =
7829 {
7830 {
7831 .eraseblocks = { {256 * 1024, 1} },
7832 .block_erase = erase_chip_block_jedec,
7833 }
7834 },
7835 .write = write_jedec_1,
7836 .read = read_memmapped,
7837 },
7838
7839 {
7840 .vendor = "Winbond",
hailfinger286829b2009-01-08 03:40:17 +00007841 .name = "W49V002A",
hailfingerf850e0a2009-06-12 21:29:36 +00007842 .bustype = CHIP_BUSTYPE_LPC,
hailfinger286829b2009-01-08 03:40:17 +00007843 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007844 .model_id = WINBOND_W49V002A,
hailfinger286829b2009-01-08 03:40:17 +00007845 .total_size = 256,
7846 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00007847 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08007848 .tested = TEST_OK_PRE,
hailfinger286829b2009-01-08 03:40:17 +00007849 .probe = probe_jedec,
hailfingerf850e0a2009-06-12 21:29:36 +00007850 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007851 .block_erasers =
7852 {
7853 {
7854 .eraseblocks = {
7855 {64 * 1024, 3},
7856 {32 * 1024, 1},
7857 {8 * 1024, 2},
7858 {16 * 1024, 1},
7859 },
7860 .block_erase = erase_sector_jedec,
7861 }, {
7862 .eraseblocks = { {256 * 1024, 1} },
7863 .block_erase = erase_chip_block_jedec,
7864 }
7865 },
snelsonc6855342010-01-28 23:55:12 +00007866 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007867 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007868 },
7869
hailfinger286829b2009-01-08 03:40:17 +00007870 {
7871 .vendor = "Winbond",
7872 .name = "W49V002FA",
hailfingerf850e0a2009-06-12 21:29:36 +00007873 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00007874 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007875 .model_id = WINBOND_W49V002FA,
hailfinger286829b2009-01-08 03:40:17 +00007876 .total_size = 256,
7877 .page_size = 128,
snelsonc6855342010-01-28 23:55:12 +00007878 .feature_bits = FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08007879 .tested = TEST_OK_PR,
hailfinger286829b2009-01-08 03:40:17 +00007880 .probe = probe_jedec,
hailfinger94466802009-09-05 01:31:32 +00007881 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007882 .block_erasers =
7883 {
7884 {
7885 .eraseblocks = {
7886 {64 * 1024, 3},
7887 {32 * 1024, 1},
7888 {8 * 1024, 2},
7889 {16 * 1024, 1},
7890 },
7891 .block_erase = erase_sector_jedec,
7892 }, {
7893 .eraseblocks = { {256 * 1024, 1} },
7894 .block_erase = erase_chip_block_jedec,
7895 }
7896 },
snelsonc6855342010-01-28 23:55:12 +00007897 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007898 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007899 },
7900
hailfinger286829b2009-01-08 03:40:17 +00007901 {
7902 .vendor = "Winbond",
7903 .name = "W39V080FA",
hailfingerf850e0a2009-06-12 21:29:36 +00007904 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00007905 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007906 .model_id = WINBOND_W39V080FA,
hailfinger286829b2009-01-08 03:40:17 +00007907 .total_size = 1024,
hailfingerc43afc92009-12-22 22:15:33 +00007908 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007909 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
David Hendricksc801adb2010-12-09 16:58:56 -08007910 .tested = TEST_OK_PRE,
hailfingerafac00e2010-01-09 02:24:17 +00007911 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -08007912 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007913 .block_erasers =
7914 {
7915 {
7916 .eraseblocks = { {64 * 1024, 16}, },
7917 .block_erase = erase_sector_jedec,
7918 }, {
7919 .eraseblocks = { {1024 * 1024, 1} },
7920 .block_erase = erase_chip_block_jedec,
7921 }
7922 },
David Hendricks668f29d2011-01-27 18:51:45 -08007923 .printlock = printlock_w39v080fa,
7924 .unlock = unlock_w39v080fa,
snelsonc6855342010-01-28 23:55:12 +00007925 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007926 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007927 },
7928
hailfinger286829b2009-01-08 03:40:17 +00007929 {
7930 .vendor = "Winbond",
7931 .name = "W39V080FA (dual mode)",
hailfingerf850e0a2009-06-12 21:29:36 +00007932 .bustype = CHIP_BUSTYPE_FWH,
hailfinger286829b2009-01-08 03:40:17 +00007933 .manufacture_id = WINBOND_ID,
David Hendricksc801adb2010-12-09 16:58:56 -08007934 .model_id = WINBOND_W39V080FA_DM,
hailfinger286829b2009-01-08 03:40:17 +00007935 .total_size = 512,
hailfingerc43afc92009-12-22 22:15:33 +00007936 .page_size = 64 * 1024,
snelsonc6855342010-01-28 23:55:12 +00007937 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
hailfinger286829b2009-01-08 03:40:17 +00007938 .tested = TEST_UNTESTED,
hailfingerafac00e2010-01-09 02:24:17 +00007939 .probe = probe_jedec,
David Hendricks668f29d2011-01-27 18:51:45 -08007940 .probe_timing = 10,
snelson376060c2010-01-19 03:24:55 +00007941 .block_erasers =
7942 {
7943 {
7944 .eraseblocks = { {64 * 1024, 8}, },
7945 .block_erase = erase_sector_jedec,
7946 }, {
7947 .eraseblocks = { {512 * 1024, 1} },
7948 .block_erase = erase_chip_block_jedec,
7949 }
7950 },
David Hendricks668f29d2011-01-27 18:51:45 -08007951 .printlock = printlock_w39v080fa_dual,
snelsonc6855342010-01-28 23:55:12 +00007952 .write = write_jedec_1,
hailfinger23060112009-05-08 12:49:03 +00007953 .read = read_memmapped,
stepanaa1b6a22008-12-08 18:15:10 +00007954 },
7955
hailfinger286829b2009-01-08 03:40:17 +00007956 {
David Hendricks82fd8ae2010-08-04 14:34:54 -07007957 .vendor = "AMIC",
7958 .name = "unknown AMIC SPI chip",
7959 .bustype = CHIP_BUSTYPE_SPI,
7960 .manufacture_id = AMIC_ID,
7961 .model_id = GENERIC_DEVICE_ID,
7962 .total_size = 0,
7963 .page_size = 256,
7964 .tested = TEST_BAD_PREW,
7965 .probe = probe_spi_rdid4,
7966 .probe_timing = TIMING_ZERO,
7967 .write = NULL,
7968 .read = NULL,
7969 },
7970
7971 {
hailfinger286829b2009-01-08 03:40:17 +00007972 .vendor = "Atmel",
7973 .name = "unknown Atmel SPI chip",
hailfinger40167462009-05-31 17:57:34 +00007974 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007975 .manufacture_id = ATMEL_ID,
7976 .model_id = GENERIC_DEVICE_ID,
7977 .total_size = 0,
7978 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00007979 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00007980 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007981 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00007982 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00007983 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00007984 },
7985
hailfinger286829b2009-01-08 03:40:17 +00007986 {
David Hendricks82fd8ae2010-08-04 14:34:54 -07007987 .vendor = "Eon",
7988 .name = "unknown Eon SPI chip",
hailfinger40167462009-05-31 17:57:34 +00007989 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00007990 .manufacture_id = EON_ID_NOPREFIX,
7991 .model_id = GENERIC_DEVICE_ID,
7992 .total_size = 0,
7993 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00007994 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00007995 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00007996 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00007997 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00007998 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00007999 },
8000
hailfinger286829b2009-01-08 03:40:17 +00008001 {
8002 .vendor = "Macronix",
8003 .name = "unknown Macronix SPI chip",
hailfinger40167462009-05-31 17:57:34 +00008004 .bustype = CHIP_BUSTYPE_SPI,
David Hendricksc801adb2010-12-09 16:58:56 -08008005 .manufacture_id = MACRONIX_ID,
hailfinger286829b2009-01-08 03:40:17 +00008006 .model_id = GENERIC_DEVICE_ID,
8007 .total_size = 0,
8008 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00008009 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00008010 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00008011 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00008012 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00008013 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00008014 },
8015
hailfinger286829b2009-01-08 03:40:17 +00008016 {
8017 .vendor = "PMC",
8018 .name = "unknown PMC SPI chip",
hailfinger40167462009-05-31 17:57:34 +00008019 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00008020 .manufacture_id = PMC_ID,
8021 .model_id = GENERIC_DEVICE_ID,
8022 .total_size = 0,
8023 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00008024 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00008025 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00008026 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00008027 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00008028 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00008029 },
8030
hailfinger286829b2009-01-08 03:40:17 +00008031 {
8032 .vendor = "SST",
8033 .name = "unknown SST SPI chip",
hailfinger40167462009-05-31 17:57:34 +00008034 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00008035 .manufacture_id = SST_ID,
8036 .model_id = GENERIC_DEVICE_ID,
8037 .total_size = 0,
8038 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00008039 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00008040 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00008041 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00008042 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00008043 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00008044 },
8045
hailfinger286829b2009-01-08 03:40:17 +00008046 {
8047 .vendor = "ST",
8048 .name = "unknown ST SPI chip",
hailfinger40167462009-05-31 17:57:34 +00008049 .bustype = CHIP_BUSTYPE_SPI,
hailfinger286829b2009-01-08 03:40:17 +00008050 .manufacture_id = ST_ID,
8051 .model_id = GENERIC_DEVICE_ID,
8052 .total_size = 0,
8053 .page_size = 256,
hailfinger97ab2632009-04-22 13:33:43 +00008054 .tested = TEST_BAD_PREW,
hailfinger286829b2009-01-08 03:40:17 +00008055 .probe = probe_spi_rdid,
hailfingere3095d92009-06-05 13:46:17 +00008056 .probe_timing = TIMING_ZERO,
hailfinger286829b2009-01-08 03:40:17 +00008057 .write = NULL,
hailfinger23060112009-05-08 12:49:03 +00008058 .read = NULL,
stepanaa1b6a22008-12-08 18:15:10 +00008059 },
uwec93fbdb2008-03-16 02:06:25 +00008060
hailfinger63165602009-11-20 01:12:45 +00008061 {
hailfinger201f62f2009-11-24 02:08:11 +00008062 .vendor = "Sanyo",
8063 .name = "unknown Sanyo SPI chip",
8064 .bustype = CHIP_BUSTYPE_SPI,
8065 .manufacture_id = SANYO_ID,
8066 .model_id = GENERIC_DEVICE_ID,
8067 .total_size = 0,
8068 .page_size = 256,
8069 .tested = TEST_BAD_PREW,
8070 .probe = probe_spi_rdid,
8071 .probe_timing = TIMING_ZERO,
hailfinger201f62f2009-11-24 02:08:11 +00008072 .write = NULL,
8073 .read = NULL,
8074 },
8075
8076 {
hailfinger63165602009-11-20 01:12:45 +00008077 .vendor = "Generic",
8078 .name = "unknown SPI chip (RDID)",
8079 .bustype = CHIP_BUSTYPE_SPI,
8080 .manufacture_id = GENERIC_MANUF_ID,
8081 .model_id = GENERIC_DEVICE_ID,
8082 .total_size = 0,
8083 .page_size = 256,
8084 .tested = TEST_BAD_PREW,
8085 .probe = probe_spi_rdid,
hailfinger63165602009-11-20 01:12:45 +00008086 .write = NULL,
8087 },
8088 {
8089 .vendor = "Generic",
8090 .name = "unknown SPI chip (REMS)",
8091 .bustype = CHIP_BUSTYPE_SPI,
8092 .manufacture_id = GENERIC_MANUF_ID,
8093 .model_id = GENERIC_DEVICE_ID,
8094 .total_size = 0,
8095 .page_size = 256,
8096 .tested = TEST_BAD_PREW,
8097 .probe = probe_spi_rems,
hailfinger63165602009-11-20 01:12:45 +00008098 .write = NULL,
8099 },
8100
hailfinger286829b2009-01-08 03:40:17 +00008101 { NULL }
stuge7be5d032009-04-21 01:46:07 +00008102};