blob: 68f2b9b4cf33680d60acdd3b161ef90b1df08f4a [file] [log] [blame]
Ollie Lho184a4042005-11-26 21:55:36 +00001/*
Uwe Hermannd1107642007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
Ollie Lho184a4042005-11-26 21:55:36 +00003 *
Uwe Hermannd22a1d42007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
Stefan Reinauer4c390c82008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
Sean Nelsonc57a9202010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
Uwe Hermannd1107642007-08-29 17:52:32 +00009 *
Stefan Reinauerce532972007-05-23 17:20:56 +000010 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000014 *
Stefan Reinauerce532972007-05-23 17:20:56 +000015 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000019 *
Stefan Reinauerce532972007-05-23 17:20:56 +000020 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000026#include "flashchips.h"
Ollie Lho184a4042005-11-26 21:55:36 +000027
Uwe Hermannfc425e82008-03-16 02:06:25 +000028/**
Uwe Hermanna9720402009-05-21 15:55:46 +000029 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000030 *
31 * Please keep the list sorted by vendor name and chip name, so that
32 * the output of 'flashrom -L' is alphabetically sorted.
33 */
Ollie Lho184a4042005-11-26 21:55:36 +000034struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000035
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000036 /*
37 * .vendor = Vendor name
38 * .name = Chip name
39 * .bustype = Supported flash bus types (Parallel, LPC...)
40 * .manufacture_id = Manufacturer chip ID
41 * .model_id = Model chip ID
42 * .total_size = Total size in (binary) kbytes
43 * .page_size = Page or eraseblock(?) size in bytes
44 * .tested = Test status
45 * .probe = Probe function
46 * .probe_timing = Probe function delay
47 * .erase = Chip erase function
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000048 * .block_erasers[] = Array of erase layouts and erase functions
49 * {
50 * .eraseblocks[] = Array of { blocksize, blockcount }
51 * .block_erase = Block erase function
52 * }
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000053 * .write = Chip write function
54 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000055 */
56
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000057 {
58 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000059 .name = "Am29F010A/B",
60 .bustype = CHIP_BUSTYPE_PARALLEL,
61 .manufacture_id = AMD_ID,
62 .model_id = AM_29F010B, /* Same as Am29F010A */
63 .total_size = 128,
64 .page_size = 16 * 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +000065 .tested = TEST_OK_PRW,
Uwe Hermanna8b37272009-06-19 15:54:39 +000066 .probe = probe_29f040b,
Udu Ogahc04ee222009-09-05 01:31:32 +000067 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000068 .erase = NULL,
69 .block_erasers =
70 {
71 {
72 .eraseblocks = { {16 * 1024, 8} },
73 .block_erase = erase_sector_29f040b,
74 }, {
75 .eraseblocks = { {128 * 1024, 1} },
76 .block_erase = erase_chip_29f040b,
77 },
78 },
Uwe Hermanna8b37272009-06-19 15:54:39 +000079 .write = write_pm29f002,
80 .read = read_memmapped,
81 },
82
83 {
84 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000085 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000086 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000087 .manufacture_id = AMD_ID,
88 .model_id = AM_29F002BB,
89 .total_size = 256,
90 .page_size = 256,
91 .tested = TEST_UNTESTED,
92 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000093 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000094 .erase = NULL,
95 .block_erasers =
96 {
97 {
98 .eraseblocks = {
99 {16 * 1024, 1},
100 {8 * 1024, 2},
101 {32 * 1024, 1},
102 {64 * 1024, 3},
103 },
104 .block_erase = erase_sector_jedec,
105 }, {
106 .eraseblocks = { {256 * 1024, 1} },
107 .block_erase = erase_chip_block_jedec,
108 },
109 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000110 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000111 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000112 },
113
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000114 {
115 .vendor = "AMD",
116 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000117 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000118 .manufacture_id = AMD_ID,
119 .model_id = AM_29F002BT,
120 .total_size = 256,
121 .page_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +0000122 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000123 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000124 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000125 .erase = NULL,
126 .block_erasers =
127 {
128 {
129 .eraseblocks = {
130 {64 * 1024, 3},
131 {32 * 1024, 1},
132 {8 * 1024, 2},
133 {16 * 1024, 1},
134 },
135 .block_erase = erase_sector_jedec,
136 }, {
137 .eraseblocks = { {256 * 1024, 1} },
138 .block_erase = erase_chip_block_jedec,
139 },
140 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000141 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000142 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000143 },
144
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000145 {
146 .vendor = "AMD",
147 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000148 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000149 .manufacture_id = AMD_ID,
150 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000151 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000152 .page_size = 64 * 1024,
153 .tested = TEST_UNTESTED,
154 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000155 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000156 .erase = NULL,
157 .block_erasers =
158 {
159 {
160 .eraseblocks = { {64 * 1024, 32} },
161 .block_erase = erase_sector_29f040b,
162 }, {
163 .eraseblocks = { {2048 * 1024, 1} },
164 .block_erase = erase_chip_29f040b,
165 },
166 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000167 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000168 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000169 },
170
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000171 {
172 .vendor = "AMD",
173 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000174 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000175 .manufacture_id = AMD_ID,
176 .model_id = AM_29F040B,
177 .total_size = 512,
178 .page_size = 64 * 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +0000179 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000180 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000181 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000182 .erase = NULL,
183 .block_erasers =
184 {
185 {
186 .eraseblocks = { {64 * 1024, 8} },
187 .block_erase = erase_sector_29f040b,
188 }, {
189 .eraseblocks = { {512 * 1024, 1} },
190 .block_erase = erase_chip_29f040b,
191 },
192 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000193 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000194 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000195 },
196
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000197 {
198 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000199 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000200 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000201 .manufacture_id = AMD_ID,
202 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000203 .total_size = 1024,
204 .page_size = 64 * 1024,
205 .tested = TEST_UNTESTED,
206 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000207 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000208 .erase = NULL,
209 .block_erasers =
210 {
211 {
212 .eraseblocks = { {64 * 1024, 16} },
213 .block_erase = erase_sector_29f040b,
214 }, {
215 .eraseblocks = { {1024 * 1024, 1} },
216 .block_erase = erase_chip_29f040b,
217 },
218 },
Peter Stuge8440cc02009-01-25 23:55:12 +0000219 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000220 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000221 },
222
223 {
224 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000225 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000226 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000227 .manufacture_id = AMD_ID,
228 .model_id = AM_29LV040B,
229 .total_size = 512,
230 .page_size = 64 * 1024,
231 .tested = TEST_UNTESTED,
232 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000233 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000234 .erase = NULL,
235 .block_erasers =
236 {
237 {
238 .eraseblocks = { {64 * 1024, 8} },
239 .block_erase = erase_sector_29f040b,
240 }, {
241 .eraseblocks = { {512 * 1024, 1} },
242 .block_erase = erase_chip_29f040b,
243 },
244 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000245 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000246 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000247 },
248
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000249 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000250 .vendor = "AMD",
251 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000252 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000253 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000254 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000255 .total_size = 1024,
256 .page_size = 64 * 1024,
257 .tested = TEST_UNTESTED,
258 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000259 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000260 .erase = NULL,
261 .block_erasers =
262 {
263 {
264 .eraseblocks = { {64 * 1024, 16} },
265 .block_erase = erase_sector_29f040b,
266 }, {
267 .eraseblocks = { {1024 * 1024, 1} },
268 .block_erase = erase_chip_29f040b,
269 },
270 },
Peter Stuge8440cc02009-01-25 23:55:12 +0000271 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000272 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000273 },
274
275 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000276 .vendor = "ASD",
277 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +0000278 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000279 .manufacture_id = ASD_ID,
280 .model_id = ASD_AE49F2008,
281 .total_size = 256,
282 .page_size = 128,
283 .tested = TEST_UNTESTED,
284 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000285 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +0000286 .erase = NULL,
287 .block_erasers =
288 {
289 {
290 .eraseblocks = {
291 {128 * 1024, 1},
292 {96 * 1024, 1},
293 {8 * 1024, 2},
294 {16 * 1024, 1},
295 },
296 .block_erase = erase_sector_jedec,
297 }, {
298 .eraseblocks = { {256 * 1024, 1} },
299 .block_erase = erase_chip_block_jedec,
300 }
301 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000302 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000303 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000304 },
305
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000306 {
307 .vendor = "Atmel",
308 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000309 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000310 .manufacture_id = ATMEL_ID,
311 .model_id = AT_25DF021,
312 .total_size = 256,
313 .page_size = 256,
314 .tested = TEST_UNTESTED,
315 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000316 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000317 .erase = NULL,
318 .block_erasers =
319 {
320 {
321 .eraseblocks = { {4 * 1024, 64} },
322 .block_erase = spi_block_erase_20,
323 }, {
324 .eraseblocks = { {32 * 1024, 8} },
325 .block_erase = spi_block_erase_52,
326 }, {
327 .eraseblocks = { {64 * 1024, 4} },
328 .block_erase = spi_block_erase_d8,
329 }, {
330 .eraseblocks = { {256 * 1024, 1} },
331 .block_erase = spi_block_erase_60,
332 }, {
333 .eraseblocks = { {256 * 1024, 1} },
334 .block_erase = spi_block_erase_c7,
335 }
336 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000337 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000338 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000339 },
340
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000341 {
342 .vendor = "Atmel",
343 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000344 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000345 .manufacture_id = ATMEL_ID,
346 .model_id = AT_25DF041A,
347 .total_size = 512,
348 .page_size = 256,
349 .tested = TEST_UNTESTED,
350 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000351 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000352 .erase = NULL,
353 .block_erasers =
354 {
355 {
356 .eraseblocks = { {4 * 1024, 128} },
357 .block_erase = spi_block_erase_20,
358 }, {
359 .eraseblocks = { {32 * 1024, 16} },
360 .block_erase = spi_block_erase_52,
361 }, {
362 .eraseblocks = { {64 * 1024, 8} },
363 .block_erase = spi_block_erase_d8,
364 }, {
365 .eraseblocks = { {512 * 1024, 1} },
366 .block_erase = spi_block_erase_60,
367 }, {
368 .eraseblocks = { {512 * 1024, 1} },
369 .block_erase = spi_block_erase_c7,
370 }
371 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000372 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000373 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000374 },
375
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000376 {
377 .vendor = "Atmel",
378 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000379 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000380 .manufacture_id = ATMEL_ID,
381 .model_id = AT_25DF081,
382 .total_size = 1024,
383 .page_size = 256,
384 .tested = TEST_UNTESTED,
385 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000386 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000387 .erase = NULL,
388 .block_erasers =
389 {
390 {
391 .eraseblocks = { {4 * 1024, 256} },
392 .block_erase = spi_block_erase_20,
393 }, {
394 .eraseblocks = { {32 * 1024, 32} },
395 .block_erase = spi_block_erase_52,
396 }, {
397 .eraseblocks = { {64 * 1024, 16} },
398 .block_erase = spi_block_erase_d8,
399 }, {
400 .eraseblocks = { {1024 * 1024, 1} },
401 .block_erase = spi_block_erase_60,
402 }, {
403 .eraseblocks = { {1024 * 1024, 1} },
404 .block_erase = spi_block_erase_c7,
405 }
406 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000407 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000408 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000409 },
410
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000411 {
412 .vendor = "Atmel",
413 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000414 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000415 .manufacture_id = ATMEL_ID,
416 .model_id = AT_25DF161,
417 .total_size = 2048,
418 .page_size = 256,
419 .tested = TEST_UNTESTED,
420 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000421 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000422 .erase = NULL,
423 .block_erasers =
424 {
425 {
426 .eraseblocks = { {4 * 1024, 512} },
427 .block_erase = spi_block_erase_20,
428 }, {
429 .eraseblocks = { {32 * 1024, 64} },
430 .block_erase = spi_block_erase_52,
431 }, {
432 .eraseblocks = { {64 * 1024, 32} },
433 .block_erase = spi_block_erase_d8,
434 }, {
435 .eraseblocks = { {2 * 1024 * 1024, 1} },
436 .block_erase = spi_block_erase_60,
437 }, {
438 .eraseblocks = { {2 * 1024 * 1024, 1} },
439 .block_erase = spi_block_erase_c7,
440 }
441 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000442 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000443 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000444 },
445
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000446 {
447 .vendor = "Atmel",
448 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000449 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000450 .manufacture_id = ATMEL_ID,
451 .model_id = AT_25DF321,
452 .total_size = 4096,
453 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000454 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000455 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000456 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000457 .erase = NULL,
458 .block_erasers =
459 {
460 {
461 .eraseblocks = { {4 * 1024, 1024} },
462 .block_erase = spi_block_erase_20,
463 }, {
464 .eraseblocks = { {32 * 1024, 128} },
465 .block_erase = spi_block_erase_52,
466 }, {
467 .eraseblocks = { {64 * 1024, 64} },
468 .block_erase = spi_block_erase_d8,
469 }, {
470 .eraseblocks = { {4 * 1024 * 1024, 1} },
471 .block_erase = spi_block_erase_60,
472 }, {
473 .eraseblocks = { {4 * 1024 * 1024, 1} },
474 .block_erase = spi_block_erase_c7,
475 }
476 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000477 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000478 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000479 },
480
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000481 {
482 .vendor = "Atmel",
483 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000484 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000485 .manufacture_id = ATMEL_ID,
486 .model_id = AT_25DF321A,
487 .total_size = 4096,
488 .page_size = 256,
489 .tested = TEST_UNTESTED,
490 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000491 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000492 .erase = NULL,
493 .block_erasers =
494 {
495 {
496 .eraseblocks = { {4 * 1024, 1024} },
497 .block_erase = spi_block_erase_20,
498 }, {
499 .eraseblocks = { {32 * 1024, 128} },
500 .block_erase = spi_block_erase_52,
501 }, {
502 .eraseblocks = { {64 * 1024, 64} },
503 .block_erase = spi_block_erase_d8,
504 }, {
505 .eraseblocks = { {4 * 1024 * 1024, 1} },
506 .block_erase = spi_block_erase_60,
507 }, {
508 .eraseblocks = { {4 * 1024 * 1024, 1} },
509 .block_erase = spi_block_erase_c7,
510 }
511 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000512 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000513 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000514 },
515
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000516 {
517 .vendor = "Atmel",
518 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000519 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000520 .manufacture_id = ATMEL_ID,
521 .model_id = AT_25DF641,
522 .total_size = 8192,
523 .page_size = 256,
524 .tested = TEST_UNTESTED,
525 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000526 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000527 .erase = NULL,
528 .block_erasers =
529 {
530 {
531 .eraseblocks = { {4 * 1024, 2048} },
532 .block_erase = spi_block_erase_20,
533 }, {
534 .eraseblocks = { {32 * 1024, 256} },
535 .block_erase = spi_block_erase_52,
536 }, {
537 .eraseblocks = { {64 * 1024, 128} },
538 .block_erase = spi_block_erase_d8,
539 }, {
540 .eraseblocks = { {8 * 1024 * 1024, 1} },
541 .block_erase = spi_block_erase_60,
542 }, {
543 .eraseblocks = { {8 * 1024 * 1024, 1} },
544 .block_erase = spi_block_erase_c7,
545 }
546 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000547 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000548 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000549 },
550
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000551 {
552 .vendor = "Atmel",
553 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000554 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000555 .manufacture_id = ATMEL_ID,
556 .model_id = AT_25F512B,
557 .total_size = 64,
558 .page_size = 256,
559 .tested = TEST_UNTESTED,
560 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000561 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000562 .erase = NULL,
563 .block_erasers =
564 {
565 {
566 .eraseblocks = { {4 * 1024, 16} },
567 .block_erase = spi_block_erase_20,
568 }, {
569 .eraseblocks = { {32 * 1024, 2} },
570 .block_erase = spi_block_erase_52,
571 }, {
572 .eraseblocks = { {32 * 1024, 2} },
573 .block_erase = spi_block_erase_d8,
574 }, {
575 .eraseblocks = { {64 * 1024, 1} },
576 .block_erase = spi_block_erase_60,
577 }, {
578 .eraseblocks = { {64 * 1024, 1} },
579 .block_erase = spi_block_erase_c7,
580 }
581 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000582 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000583 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000584 },
585
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000586 {
587 .vendor = "Atmel",
588 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000589 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000590 .manufacture_id = ATMEL_ID,
591 .model_id = AT_25FS010,
592 .total_size = 128,
593 .page_size = 256,
594 .tested = TEST_UNTESTED,
595 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000596 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000597 .erase = NULL,
598 .block_erasers =
599 {
600 {
601 .eraseblocks = { {4 * 1024, 32} },
602 .block_erase = spi_block_erase_20,
603 }, {
604 .eraseblocks = { {32 * 1024, 4} },
605 .block_erase = spi_block_erase_52,
606 }, {
607 .eraseblocks = { {32 * 1024, 4} },
608 .block_erase = spi_block_erase_d8,
609 }, {
610 .eraseblocks = { {128 * 1024, 1} },
611 .block_erase = spi_block_erase_60,
612 }, {
613 .eraseblocks = { {128 * 1024, 1} },
614 .block_erase = spi_block_erase_c7,
615 }
616 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000617 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000618 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000619 },
620
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000621 {
622 .vendor = "Atmel",
623 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000624 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000625 .manufacture_id = ATMEL_ID,
626 .model_id = AT_25FS040,
627 .total_size = 512,
628 .page_size = 256,
629 .tested = TEST_UNTESTED,
630 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000631 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000632 .erase = NULL,
633 .block_erasers =
634 {
635 {
636 .eraseblocks = { {4 * 1024, 128} },
637 .block_erase = spi_block_erase_20,
638 }, {
639 .eraseblocks = { {64 * 1024, 8} },
640 .block_erase = spi_block_erase_52,
641 }, {
642 .eraseblocks = { {64 * 1024, 8} },
643 .block_erase = spi_block_erase_d8,
644 }, {
645 .eraseblocks = { {512 * 1024, 1} },
646 .block_erase = spi_block_erase_60,
647 }, {
648 .eraseblocks = { {512 * 1024, 1} },
649 .block_erase = spi_block_erase_c7,
650 }
651 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000652 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000653 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000654 },
655
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000656 {
657 .vendor = "Atmel",
658 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000659 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000660 .manufacture_id = ATMEL_ID,
661 .model_id = AT_26DF041,
662 .total_size = 512,
663 .page_size = 256,
664 .tested = TEST_UNTESTED,
665 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000666 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000667 .erase = NULL,
Sean Nelson89187292009-12-23 12:02:55 +0000668 .block_erasers =
669 {
670 {
671 .eraseblocks = { {4 * 1024, 128} },
672 .block_erase = spi_block_erase_20,
673 }
674 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000675 .write = NULL /* Incompatible Page write */,
676 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000677 },
678
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000679 {
680 .vendor = "Atmel",
681 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000682 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000683 .manufacture_id = ATMEL_ID,
684 .model_id = AT_26DF081A,
685 .total_size = 1024,
686 .page_size = 256,
687 .tested = TEST_UNTESTED,
688 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000689 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000690 .erase = NULL,
691 .block_erasers =
692 {
693 {
694 .eraseblocks = { {4 * 1024, 256} },
695 .block_erase = spi_block_erase_20,
696 }, {
697 .eraseblocks = { {32 * 1024, 32} },
698 .block_erase = spi_block_erase_52,
699 }, {
700 .eraseblocks = { {64 * 1024, 16} },
701 .block_erase = spi_block_erase_d8,
702 }, {
703 .eraseblocks = { {1024 * 1024, 1} },
704 .block_erase = spi_block_erase_60,
705 }, {
706 .eraseblocks = { {1024 * 1024, 1} },
707 .block_erase = spi_block_erase_c7,
708 }
709 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000710 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000711 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000712 },
713
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000714 {
715 .vendor = "Atmel",
716 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000717 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000718 .manufacture_id = ATMEL_ID,
719 .model_id = AT_26DF161,
720 .total_size = 2048,
721 .page_size = 256,
722 .tested = TEST_UNTESTED,
723 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000724 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000725 .erase = NULL,
726 .block_erasers =
727 {
728 {
729 .eraseblocks = { {4 * 1024, 512} },
730 .block_erase = spi_block_erase_20,
731 }, {
732 .eraseblocks = { {32 * 1024, 64} },
733 .block_erase = spi_block_erase_52,
734 }, {
735 .eraseblocks = { {64 * 1024, 32} },
736 .block_erase = spi_block_erase_d8,
737 }, {
738 .eraseblocks = { {2 * 1024 * 1024, 1} },
739 .block_erase = spi_block_erase_60,
740 }, {
741 .eraseblocks = { {2 * 1024 * 1024, 1} },
742 .block_erase = spi_block_erase_c7,
743 }
744 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000745 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000746 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000747 },
748
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000749 {
750 .vendor = "Atmel",
751 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000752 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000753 .manufacture_id = ATMEL_ID,
754 .model_id = AT_26DF161A,
755 .total_size = 2048,
756 .page_size = 256,
757 .tested = TEST_UNTESTED,
758 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000759 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000760 .erase = NULL,
761 .block_erasers =
762 {
763 {
764 .eraseblocks = { {4 * 1024, 512} },
765 .block_erase = spi_block_erase_20,
766 }, {
767 .eraseblocks = { {32 * 1024, 64} },
768 .block_erase = spi_block_erase_52,
769 }, {
770 .eraseblocks = { {64 * 1024, 32} },
771 .block_erase = spi_block_erase_d8,
772 }, {
773 .eraseblocks = { {2 * 1024 * 1024, 1} },
774 .block_erase = spi_block_erase_60,
775 }, {
776 .eraseblocks = { {2 * 1024 * 1024, 1} },
777 .block_erase = spi_block_erase_c7,
778 }
779 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000780 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000781 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000782 },
783
784 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000785 /*{
786 .vendor = "Atmel",
787 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000788 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000789 .manufacture_id = ATMEL_ID,
790 .model_id = AT_26DF321,
791 .total_size = 4096,
792 .page_size = 256,
793 .tested = TEST_UNTESTED,
794 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000795 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000796 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000797 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000798 .read = spi_chip_read,
799 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000800
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000801 {
802 .vendor = "Atmel",
803 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000804 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000805 .manufacture_id = ATMEL_ID,
806 .model_id = AT_26F004,
807 .total_size = 512,
808 .page_size = 256,
809 .tested = TEST_UNTESTED,
810 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000811 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000812 .erase = NULL,
813 .block_erasers =
814 {
815 {
816 .eraseblocks = { {4 * 1024, 128} },
817 .block_erase = spi_block_erase_20,
818 }, {
819 .eraseblocks = { {32 * 1024, 16} },
820 .block_erase = spi_block_erase_52,
821 }, {
822 .eraseblocks = { {64 * 1024, 8} },
823 .block_erase = spi_block_erase_d8,
824 }, {
825 .eraseblocks = { {512 * 1024, 1} },
826 .block_erase = spi_block_erase_60,
827 }, {
828 .eraseblocks = { {512 * 1024, 1} },
829 .block_erase = spi_block_erase_c7,
830 }
831 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000832 .write = NULL /* Incompatible Page write */,
833 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000834 },
835
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000836 {
837 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000838 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000839 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000840 .manufacture_id = ATMEL_ID,
841 .model_id = AT_29C512,
842 .total_size = 64,
843 .page_size = 128,
Sean Nelson89187292009-12-23 12:02:55 +0000844 .tested = TEST_OK_PRW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000845 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000846 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000847 .erase = NULL,
848 .block_erasers =
849 {
850 {
851 .eraseblocks = { {64 * 1024, 1} },
852 .block_erase = erase_chip_block_jedec,
853 }
854 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000855 .write = write_jedec,
856 .read = read_memmapped,
857
858 },
859
860 {
861 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000862 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000863 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000864 .manufacture_id = ATMEL_ID,
865 .model_id = AT_29C010A,
866 .total_size = 128,
867 .page_size = 128,
Sean Nelson89187292009-12-23 12:02:55 +0000868 .tested = TEST_OK_PR,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000869 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000870 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000871 .erase = NULL,
872 .block_erasers =
873 {
874 {
875 .eraseblocks = { {128 * 1024, 1} },
876 .block_erase = erase_chip_block_jedec,
877 }
878 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000879 .write = write_jedec, /* FIXME */
880 .read = read_memmapped,
881 },
882
883 {
884 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000885 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000886 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000887 .manufacture_id = ATMEL_ID,
888 .model_id = AT_29C020,
889 .total_size = 256,
890 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000891 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000892 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000893 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000894 .erase = NULL,
895 .block_erasers =
896 {
897 {
898 .eraseblocks = { {256 * 1024, 1} },
899 .block_erase = erase_chip_block_jedec,
900 }
901 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000902 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000903 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000904 },
905
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000906 {
907 .vendor = "Atmel",
908 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000909 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000910 .manufacture_id = ATMEL_ID,
911 .model_id = AT_29C040A,
912 .total_size = 512,
913 .page_size = 256,
914 .tested = TEST_UNTESTED,
915 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000916 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000917 .erase = NULL,
918 .block_erasers =
919 {
920 {
921 .eraseblocks = { {512 * 1024, 1} },
922 .block_erase = erase_chip_block_jedec,
923 }
924 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000925 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000926 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000927 },
928
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000929 {
930 .vendor = "Atmel",
931 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000932 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000933 .manufacture_id = ATMEL_ID,
934 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000935 .total_size = 16896 /* No power of two sizes */,
936 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000937 .tested = TEST_BAD_READ,
938 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000939 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000940 .erase = NULL,
941 .write = NULL /* Incompatible Page write */,
942 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000943 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000944
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000945 {
946 .vendor = "Atmel",
947 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000948 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000949 .manufacture_id = ATMEL_ID,
950 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000951 .total_size = 128 /* Size can only be determined from status register */,
952 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000953 .tested = TEST_BAD_READ,
954 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000955 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000956 .erase = NULL,
957 .write = NULL,
958 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000959 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000960
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000961 {
962 .vendor = "Atmel",
963 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000964 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000965 .manufacture_id = ATMEL_ID,
966 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000967 .total_size = 256 /* Size can only be determined from status register */,
968 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000969 .tested = TEST_BAD_READ,
970 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000971 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000972 .erase = NULL,
973 .write = NULL,
974 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000975 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000976
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000977 {
978 .vendor = "Atmel",
979 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000980 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000981 .manufacture_id = ATMEL_ID,
982 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000983 .total_size = 512 /* Size can only be determined from status register */,
984 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000985 .tested = TEST_BAD_READ,
986 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000987 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000988 .erase = NULL,
989 .write = NULL,
990 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000991 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000992
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000993 {
994 .vendor = "Atmel",
995 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000996 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000997 .manufacture_id = ATMEL_ID,
998 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000999 .total_size = 1024 /* Size can only be determined from status register */,
1000 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001001 .tested = TEST_BAD_READ,
1002 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001003 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001004 .erase = NULL,
1005 .write = NULL,
1006 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001007 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001008
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001009 {
1010 .vendor = "Atmel",
1011 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001012 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001013 .manufacture_id = ATMEL_ID,
1014 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001015 .total_size = 2048 /* Size can only be determined from status register */,
1016 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001017 .tested = TEST_BAD_READ,
1018 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001019 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001020 .erase = NULL,
1021 .write = NULL,
1022 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001023 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001024
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001025 {
1026 .vendor = "Atmel",
1027 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001028 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001029 .manufacture_id = ATMEL_ID,
1030 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001031 .total_size = 4224 /* No power of two sizes */,
1032 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001033 .tested = TEST_BAD_READ,
1034 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001035 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001036 .erase = NULL,
1037 .write = NULL,
1038 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001039 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001040
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001041 {
1042 .vendor = "Atmel",
1043 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001044 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001045 .manufacture_id = ATMEL_ID,
1046 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001047 .total_size = 4096 /* Size can only be determined from status register */,
1048 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001049 .tested = TEST_BAD_READ,
1050 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001051 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001052 .erase = NULL,
1053 .write = NULL,
1054 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001055 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001056
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001057 {
1058 .vendor = "Atmel",
1059 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001060 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001061 .manufacture_id = ATMEL_ID,
1062 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001063 .total_size = 8192 /* Size can only be determined from status register */,
1064 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001065 .tested = TEST_BAD_READ,
1066 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001067 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001068 .erase = NULL,
1069 .write = NULL,
1070 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001071 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001072
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001073 {
1074 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001075 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001076 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001077 .manufacture_id = ATMEL_ID,
1078 .model_id = AT_49BV512,
1079 .total_size = 64,
1080 .page_size = 64,
Sean Nelson89187292009-12-23 12:02:55 +00001081 .tested = TEST_OK_PRW,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001082 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001083 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001084 .erase = NULL,
1085 .block_erasers =
1086 {
1087 {
1088 .eraseblocks = { {64 * 1024, 1} },
1089 .block_erase = erase_chip_block_jedec,
1090 }
1091 },
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001092 .write = write_49f002,
1093 .read = read_memmapped,
1094 },
1095
1096 {
1097 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001098 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001099 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001100 .manufacture_id = ATMEL_ID,
1101 .model_id = AT_49F002N,
1102 .total_size = 256,
1103 .page_size = 256,
1104 .tested = TEST_UNTESTED,
1105 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001106 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001107 .erase = NULL,
1108 .block_erasers =
1109 {
1110 {
1111 .eraseblocks = {
1112 {16 * 1024, 1},
1113 {8 * 1024, 2},
1114 {96 * 1024, 1},
1115 {128 * 1024, 1},
1116 },
1117 .block_erase = erase_sector_jedec,
1118 }, {
1119 .eraseblocks = { {256 * 1024, 1} },
1120 .block_erase = erase_chip_block_jedec,
1121 }
1122 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001123 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001124 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001125 },
1126
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001127 {
1128 .vendor = "Atmel",
1129 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001130 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001131 .manufacture_id = ATMEL_ID,
1132 .model_id = AT_49F002NT,
1133 .total_size = 256,
1134 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +00001135 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001136 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001137 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001138 .erase = NULL,
1139 .block_erasers =
1140 {
1141 {
1142 .eraseblocks = {
1143 {128 * 1024, 1},
1144 {96 * 1024, 1},
1145 {8 * 1024, 2},
1146 {16 * 1024, 1},
1147 },
1148 .block_erase = erase_sector_jedec,
1149 }, {
1150 .eraseblocks = { {256 * 1024, 1} },
1151 .block_erase = erase_chip_block_jedec,
1152 }
1153 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001154 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001155 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001156 },
1157
Sean Nelson54596372010-01-09 05:30:14 +00001158 /* The next two chip definitions have top/bottom boot blocks, but has no
1159 device differenciation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001160 {
1161 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001162 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001163 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001164 .manufacture_id = AMIC_ID,
1165 .model_id = AMIC_A25L40P,
1166 .total_size = 512,
1167 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001168 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001169 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001170 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001171 .erase = NULL,
1172 .block_erasers =
1173 {
1174 {
1175 .eraseblocks = {
1176 {64 * 1024, 7},
1177 {32 * 1024, 1},
1178 {16 * 1024, 1},
1179 {8 * 1024, 1},
1180 {4 * 1024, 2},
1181 },
1182 .block_erase = spi_block_erase_d8,
1183 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001184 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001185 .block_erase = spi_block_erase_c7,
1186 }
1187 },
1188 .write = spi_chip_write_256,
1189 .read = spi_chip_read,
1190 },
1191
1192 {
1193 .vendor = "AMIC",
1194 .name = "A25L40PU",
1195 .bustype = CHIP_BUSTYPE_SPI,
1196 .manufacture_id = AMIC_ID,
1197 .model_id = AMIC_A25L40P,
1198 .total_size = 512,
1199 .page_size = 256,
1200 .tested = TEST_OK_PRW,
1201 .probe = probe_spi_rdid4,
1202 .probe_timing = TIMING_ZERO,
1203 .erase = NULL,
1204 .block_erasers =
1205 {
1206 {
1207 .eraseblocks = {
1208 {4 * 1024, 2},
1209 {8 * 1024, 1},
1210 {16 * 1024, 1},
1211 {32 * 1024, 1},
1212 {64 * 1024, 7},
1213 },
1214 .block_erase = spi_block_erase_d8,
1215 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001216 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001217 .block_erase = spi_block_erase_c7,
1218 }
1219 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001220 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001221 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001222 },
1223
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001224 {
1225 .vendor = "AMIC",
1226 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001227 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001228 .manufacture_id = AMIC_ID_NOPREFIX,
1229 .model_id = AMIC_A29002B,
1230 .total_size = 256,
1231 .page_size = 64 * 1024,
1232 .tested = TEST_UNTESTED,
1233 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001234 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001235 .erase = NULL,
1236 .block_erasers =
1237 {
1238 {
1239 .eraseblocks = {
1240 {16 * 1024, 1},
1241 {8 * 1024, 2},
1242 {32 * 1024, 1},
1243 {64 * 1024, 3},
1244 },
1245 .block_erase = erase_sector_29f002,
1246 }, {
1247 .eraseblocks = { {256 * 1024, 1} },
1248 .block_erase = erase_chip_29f002,
1249 },
1250 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001251 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001252 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001253 },
1254
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001255 {
1256 .vendor = "AMIC",
1257 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001258 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001259 .manufacture_id = AMIC_ID_NOPREFIX,
1260 .model_id = AMIC_A29002T,
1261 .total_size = 256,
1262 .page_size = 64 * 1024,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001263 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001264 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001265 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001266 .erase = NULL,
1267 .block_erasers =
1268 {
1269 {
1270 .eraseblocks = {
1271 {64 * 1024, 3},
1272 {32 * 1024, 1},
1273 {8 * 1024, 2},
1274 {16 * 1024, 1},
1275 },
1276 .block_erase = erase_sector_29f002,
1277 }, {
1278 .eraseblocks = { {256 * 1024, 1} },
1279 .block_erase = erase_chip_29f002,
1280 },
1281 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001282 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001283 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001284 },
1285
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001286 {
1287 .vendor = "AMIC",
1288 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001289 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001290 .manufacture_id = AMIC_ID_NOPREFIX,
1291 .model_id = AMIC_A29040B,
1292 .total_size = 512,
1293 .page_size = 64 * 1024,
1294 .tested = TEST_OK_PR,
1295 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001296 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001297 .erase = NULL,
1298 .block_erasers =
1299 {
1300 {
1301 .eraseblocks = { {64 * 1024, 8} },
1302 .block_erase = erase_sector_29f040b,
1303 }, {
1304 .eraseblocks = { {512 * 1024, 1} },
1305 .block_erase = erase_chip_29f040b,
1306 },
1307 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001308 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001309 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001310 },
1311
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001312 {
1313 .vendor = "AMIC",
1314 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001315 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001316 .manufacture_id = AMIC_ID_NOPREFIX,
1317 .model_id = AMIC_A49LF040A,
1318 .total_size = 512,
1319 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001320 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson54596372010-01-09 05:30:14 +00001321 .tested = TEST_OK_PRW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001322 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001323 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001324 .erase = NULL,
1325 .block_erasers =
1326 {
1327 {
1328 .eraseblocks = { {64 * 1024, 8} },
1329 .block_erase = erase_block_jedec,
1330 }, {
1331 .eraseblocks = { {512 * 1024, 1} },
1332 .block_erase = erase_chip_block_jedec,
1333 }
1334 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001335 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001336 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001337 },
1338
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001339 {
1340 .vendor = "EMST",
1341 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001342 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001343 .manufacture_id = EMST_ID,
1344 .model_id = EMST_F49B002UA,
1345 .total_size = 256,
1346 .page_size = 4096,
1347 .tested = TEST_UNTESTED,
1348 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001349 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001350 .erase = NULL,
1351 .block_erasers =
1352 {
1353 {
1354 .eraseblocks = {
1355 {128 * 1024, 1},
1356 {96 * 1024, 1},
1357 {8 * 1024, 2},
1358 {16 * 1024, 1},
1359 },
1360 .block_erase = erase_sector_jedec,
1361 }, {
1362 .eraseblocks = { {256 * 1024, 1} },
1363 .block_erase = erase_chip_block_jedec,
1364 }
1365 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001366 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001367 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001368 },
1369
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001370 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001371 .vendor = "Eon",
1372 .name = "EN25B05",
1373 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001374 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001375 .model_id = EN_25B05,
1376 .total_size = 64,
1377 .page_size = 256,
1378 .tested = TEST_UNTESTED,
1379 .probe = probe_spi_rdid,
1380 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001381 .erase = NULL,
1382 .block_erasers =
1383 {
1384 {
1385 .eraseblocks = {
1386 {4 * 1024, 2},
1387 {8 * 1024, 1},
1388 {16 * 1024, 1},
1389 {32 * 1024, 1},
1390 },
1391 .block_erase = spi_block_erase_d8,
1392 }, {
1393 .eraseblocks = { {64 * 1024, 1} },
1394 .block_erase = spi_block_erase_c7,
1395 }
1396 },
1397 .write = spi_chip_write_256,
1398 .read = spi_chip_read,
1399 },
1400
1401 {
1402 .vendor = "Eon",
1403 .name = "EN25B05T",
1404 .bustype = CHIP_BUSTYPE_SPI,
1405 .manufacture_id = EON_ID_NOPREFIX,
1406 .model_id = EN_25B05,
1407 .total_size = 64,
1408 .page_size = 256,
1409 .tested = TEST_UNTESTED,
1410 .probe = probe_spi_rdid,
1411 .probe_timing = TIMING_ZERO,
1412 .erase = NULL,
1413 .block_erasers =
1414 {
1415 {
1416 .eraseblocks = {
1417 {32 * 1024, 1},
1418 {16 * 1024, 1},
1419 {8 * 1024, 1},
1420 {4 * 1024, 2},
1421 },
1422 .block_erase = spi_block_erase_d8,
1423 }, {
1424 .eraseblocks = { {64 * 1024, 1} },
1425 .block_erase = spi_block_erase_c7,
1426 }
1427 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001428 .write = spi_chip_write_256,
1429 .read = spi_chip_read,
1430 },
1431
1432 {
1433 .vendor = "Eon",
1434 .name = "EN25B10",
1435 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001436 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001437 .model_id = EN_25B10,
1438 .total_size = 128,
1439 .page_size = 256,
1440 .tested = TEST_UNTESTED,
1441 .probe = probe_spi_rdid,
1442 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001443 .erase = NULL,
1444 .block_erasers =
1445 {
1446 {
1447 .eraseblocks = {
1448 {4 * 1024, 2},
1449 {8 * 1024, 1},
1450 {16 * 1024, 1},
1451 {32 * 1024, 3},
1452 },
1453 .block_erase = spi_block_erase_d8,
1454 }, {
1455 .eraseblocks = { {128 * 1024, 1} },
1456 .block_erase = spi_block_erase_c7,
1457 }
1458 },
1459 .write = spi_chip_write_256,
1460 .read = spi_chip_read,
1461 },
1462
1463 {
1464 .vendor = "Eon",
1465 .name = "EN25B10T",
1466 .bustype = CHIP_BUSTYPE_SPI,
1467 .manufacture_id = EON_ID_NOPREFIX,
1468 .model_id = EN_25B10,
1469 .total_size = 128,
1470 .page_size = 256,
1471 .tested = TEST_UNTESTED,
1472 .probe = probe_spi_rdid,
1473 .probe_timing = TIMING_ZERO,
1474 .erase = NULL,
1475 .block_erasers =
1476 {
1477 {
1478 .eraseblocks = {
1479 {32 * 1024, 3},
1480 {16 * 1024, 1},
1481 {8 * 1024, 1},
1482 {4 * 1024, 2},
1483 },
1484 .block_erase = spi_block_erase_d8,
1485 }, {
1486 .eraseblocks = { {128 * 1024, 1} },
1487 .block_erase = spi_block_erase_c7,
1488 }
1489 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001490 .write = spi_chip_write_256,
1491 .read = spi_chip_read,
1492 },
1493
1494 {
1495 .vendor = "Eon",
1496 .name = "EN25B20",
1497 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001498 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001499 .model_id = EN_25B20,
1500 .total_size = 256,
1501 .page_size = 256,
1502 .tested = TEST_UNTESTED,
1503 .probe = probe_spi_rdid,
1504 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001505 .erase = NULL,
1506 .block_erasers =
1507 {
1508 {
1509 .eraseblocks = {
1510 {4 * 1024, 2},
1511 {8 * 1024, 1},
1512 {16 * 1024, 1},
1513 {32 * 1024, 1},
1514 {64 * 1024, 3}
1515 },
1516 .block_erase = spi_block_erase_d8,
1517 }, {
1518 .eraseblocks = { {256 * 1024, 1} },
1519 .block_erase = spi_block_erase_c7,
1520 }
1521 },
1522 .write = spi_chip_write_256,
1523 .read = spi_chip_read,
1524 },
1525
1526 {
1527 .vendor = "Eon",
1528 .name = "EN25B20T",
1529 .bustype = CHIP_BUSTYPE_SPI,
1530 .manufacture_id = EON_ID_NOPREFIX,
1531 .model_id = EN_25B20,
1532 .total_size = 256,
1533 .page_size = 256,
1534 .tested = TEST_UNTESTED,
1535 .probe = probe_spi_rdid,
1536 .probe_timing = TIMING_ZERO,
1537 .erase = NULL,
1538 .block_erasers =
1539 {
1540 {
1541 .eraseblocks = {
1542 {64 * 1024, 3},
1543 {32 * 1024, 1},
1544 {16 * 1024, 1},
1545 {8 * 1024, 1},
1546 {4 * 1024, 2},
1547 },
1548 .block_erase = spi_block_erase_d8,
1549 }, {
1550 .eraseblocks = { {256 * 1024, 1} },
1551 .block_erase = spi_block_erase_c7,
1552 }
1553 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001554 .write = spi_chip_write_256,
1555 .read = spi_chip_read,
1556 },
1557
1558 {
1559 .vendor = "Eon",
1560 .name = "EN25B40",
1561 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001562 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001563 .model_id = EN_25B40,
1564 .total_size = 512,
1565 .page_size = 256,
1566 .tested = TEST_UNTESTED,
1567 .probe = probe_spi_rdid,
1568 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001569 .erase = NULL,
1570 .block_erasers =
1571 {
1572 {
1573 .eraseblocks = {
1574 {4 * 1024, 2},
1575 {8 * 1024, 1},
1576 {16 * 1024, 1},
1577 {32 * 1024, 1},
1578 {64 * 1024, 7}
1579 },
1580 .block_erase = spi_block_erase_d8,
1581 }, {
1582 .eraseblocks = { {512 * 1024, 1} },
1583 .block_erase = spi_block_erase_c7,
1584 }
1585 },
1586 .write = spi_chip_write_256,
1587 .read = spi_chip_read,
1588 },
1589
1590 {
1591 .vendor = "Eon",
1592 .name = "EN25B40T",
1593 .bustype = CHIP_BUSTYPE_SPI,
1594 .manufacture_id = EON_ID_NOPREFIX,
1595 .model_id = EN_25B40,
1596 .total_size = 512,
1597 .page_size = 256,
1598 .tested = TEST_UNTESTED,
1599 .probe = probe_spi_rdid,
1600 .probe_timing = TIMING_ZERO,
1601 .erase = NULL,
1602 .block_erasers =
1603 {
1604 {
1605 .eraseblocks = {
1606 {64 * 1024, 7},
1607 {32 * 1024, 1},
1608 {16 * 1024, 1},
1609 {8 * 1024, 1},
1610 {4 * 1024, 2},
1611 },
1612 .block_erase = spi_block_erase_d8,
1613 }, {
1614 .eraseblocks = { {512 * 1024, 1} },
1615 .block_erase = spi_block_erase_c7,
1616 }
1617 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001618 .write = spi_chip_write_256,
1619 .read = spi_chip_read,
1620 },
1621
1622 {
1623 .vendor = "Eon",
1624 .name = "EN25B80",
1625 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001626 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001627 .model_id = EN_25B80,
1628 .total_size = 1024,
1629 .page_size = 256,
1630 .tested = TEST_UNTESTED,
1631 .probe = probe_spi_rdid,
1632 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001633 .erase = NULL,
1634 .block_erasers =
1635 {
1636 {
1637 .eraseblocks = {
1638 {4 * 1024, 2},
1639 {8 * 1024, 1},
1640 {16 * 1024, 1},
1641 {32 * 1024, 1},
1642 {64 * 1024, 15}
1643 },
1644 .block_erase = spi_block_erase_d8,
1645 }, {
1646 .eraseblocks = { {1024 * 1024, 1} },
1647 .block_erase = spi_block_erase_c7,
1648 }
1649 },
1650 .write = spi_chip_write_256,
1651 .read = spi_chip_read,
1652 },
1653
1654 {
1655 .vendor = "Eon",
1656 .name = "EN25B80T",
1657 .bustype = CHIP_BUSTYPE_SPI,
1658 .manufacture_id = EON_ID_NOPREFIX,
1659 .model_id = EN_25B80,
1660 .total_size = 1024,
1661 .page_size = 256,
1662 .tested = TEST_UNTESTED,
1663 .probe = probe_spi_rdid,
1664 .probe_timing = TIMING_ZERO,
1665 .erase = NULL,
1666 .block_erasers =
1667 {
1668 {
1669 .eraseblocks = {
1670 {64 * 1024, 15},
1671 {32 * 1024, 1},
1672 {16 * 1024, 1},
1673 {8 * 1024, 1},
1674 {4 * 1024, 2},
1675 },
1676 .block_erase = spi_block_erase_d8,
1677 }, {
1678 .eraseblocks = { {1024 * 1024, 1} },
1679 .block_erase = spi_block_erase_c7,
1680 }
1681 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001682 .write = spi_chip_write_256,
1683 .read = spi_chip_read,
1684 },
1685
1686 {
1687 .vendor = "Eon",
1688 .name = "EN25B16",
1689 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001690 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001691 .model_id = EN_25B16,
1692 .total_size = 2048,
1693 .page_size = 256,
1694 .tested = TEST_UNTESTED,
1695 .probe = probe_spi_rdid,
1696 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001697 .erase = NULL,
1698 .block_erasers =
1699 {
1700 {
1701 .eraseblocks = {
1702 {4 * 1024, 2},
1703 {8 * 1024, 1},
1704 {16 * 1024, 1},
1705 {32 * 1024, 1},
1706 {64 * 1024, 31},
1707 },
1708 .block_erase = spi_block_erase_d8,
1709 }, {
1710 .eraseblocks = { {2 * 1024 * 1024, 1} },
1711 .block_erase = spi_block_erase_c7,
1712 }
1713 },
1714 .write = spi_chip_write_256,
1715 .read = spi_chip_read,
1716 },
1717
1718 {
1719 .vendor = "Eon",
1720 .name = "EN25B16T",
1721 .bustype = CHIP_BUSTYPE_SPI,
1722 .manufacture_id = EON_ID_NOPREFIX,
1723 .model_id = EN_25B16,
1724 .total_size = 2048,
1725 .page_size = 256,
1726 .tested = TEST_UNTESTED,
1727 .probe = probe_spi_rdid,
1728 .probe_timing = TIMING_ZERO,
1729 .erase = NULL,
1730 .block_erasers =
1731 {
1732 {
1733 .eraseblocks = {
1734 {64 * 1024, 31},
1735 {32 * 1024, 1},
1736 {16 * 1024, 1},
1737 {8 * 1024, 1},
1738 {4 * 1024, 2},
1739 },
1740 .block_erase = spi_block_erase_d8,
1741 }, {
1742 .eraseblocks = { {2 * 1024 * 1024, 1} },
1743 .block_erase = spi_block_erase_c7,
1744 }
1745 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001746 .write = spi_chip_write_256,
1747 .read = spi_chip_read,
1748 },
1749
1750 {
1751 .vendor = "Eon",
1752 .name = "EN25B32",
1753 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001754 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001755 .model_id = EN_25B32,
1756 .total_size = 4096,
1757 .page_size = 256,
1758 .tested = TEST_UNTESTED,
1759 .probe = probe_spi_rdid,
1760 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001761 .erase = NULL,
1762 .block_erasers =
1763 {
1764 {
1765 .eraseblocks = {
1766 {4 * 1024, 2},
1767 {8 * 1024, 1},
1768 {16 * 1024, 1},
1769 {32 * 1024, 1},
1770 {64 * 1024, 63},
1771 },
1772 .block_erase = spi_block_erase_d8,
1773 }, {
1774 .eraseblocks = { {4 * 1024 * 1024, 1} },
1775 .block_erase = spi_block_erase_c7,
1776 }
1777 },
1778 .write = spi_chip_write_256,
1779 .read = spi_chip_read,
1780 },
1781
1782 {
1783 .vendor = "Eon",
1784 .name = "EN25B32T",
1785 .bustype = CHIP_BUSTYPE_SPI,
1786 .manufacture_id = EON_ID_NOPREFIX,
1787 .model_id = EN_25B32,
1788 .total_size = 4096,
1789 .page_size = 256,
1790 .tested = TEST_UNTESTED,
1791 .probe = probe_spi_rdid,
1792 .probe_timing = TIMING_ZERO,
1793 .erase = NULL,
1794 .block_erasers =
1795 {
1796 {
1797 .eraseblocks = {
1798 {64 * 1024, 63},
1799 {32 * 1024, 1},
1800 {16 * 1024, 1},
1801 {8 * 1024, 1},
1802 {4 * 1024, 2},
1803 },
1804 .block_erase = spi_block_erase_d8,
1805 }, {
1806 .eraseblocks = { {4 * 1024 * 1024, 1} },
1807 .block_erase = spi_block_erase_c7,
1808 }
1809 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001810 .write = spi_chip_write_256,
1811 .read = spi_chip_read,
1812 },
1813
1814 {
1815 .vendor = "Eon",
1816 .name = "EN25B64",
1817 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001818 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001819 .model_id = EN_25B64,
1820 .total_size = 8192,
1821 .page_size = 256,
1822 .tested = TEST_UNTESTED,
1823 .probe = probe_spi_rdid,
1824 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001825 .erase = NULL,
1826 .block_erasers =
1827 {
1828 {
1829 .eraseblocks = {
1830 {4 * 1024, 2},
1831 {8 * 1024, 1},
1832 {16 * 1024, 1},
1833 {32 * 1024, 1},
1834 {64 * 1024, 127},
1835 },
1836 .block_erase = spi_block_erase_d8,
1837 }, {
1838 .eraseblocks = { {8 * 1024 * 1024, 1} },
1839 .block_erase = spi_block_erase_c7,
1840 }
1841 },
1842 .write = spi_chip_write_256,
1843 .read = spi_chip_read,
1844 },
1845
1846 {
1847 .vendor = "Eon",
1848 .name = "EN25B64T",
1849 .bustype = CHIP_BUSTYPE_SPI,
1850 .manufacture_id = EON_ID_NOPREFIX,
1851 .model_id = EN_25B64,
1852 .total_size = 8192,
1853 .page_size = 256,
1854 .tested = TEST_UNTESTED,
1855 .probe = probe_spi_rdid,
1856 .probe_timing = TIMING_ZERO,
1857 .erase = NULL,
1858 .block_erasers =
1859 {
1860 {
1861 .eraseblocks = {
1862 {64 * 1024, 127},
1863 {32 * 1024, 1},
1864 {16 * 1024, 1},
1865 {8 * 1024, 1},
1866 {4 * 1024, 2},
1867 },
1868 .block_erase = spi_block_erase_d8,
1869 }, {
1870 .eraseblocks = { {8 * 1024 * 1024, 1} },
1871 .block_erase = spi_block_erase_c7,
1872 }
1873 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001874 .write = spi_chip_write_256,
1875 .read = spi_chip_read,
1876 },
1877
1878 {
1879 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001880 .name = "EN25D16",
1881 .bustype = CHIP_BUSTYPE_SPI,
1882 .manufacture_id = EON_ID_NOPREFIX,
1883 .model_id = EN_25D16,
1884 .total_size = 2048,
1885 .page_size = 256,
1886 .tested = TEST_UNTESTED,
1887 .probe = probe_spi_rdid,
1888 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001889 .erase = NULL,
1890 .block_erasers =
1891 {
1892 {
1893 .eraseblocks = { {4 * 1024, 512} },
1894 .block_erase = spi_block_erase_20,
1895 }, {
1896 .eraseblocks = { {64 * 1024, 32} },
1897 .block_erase = spi_block_erase_d8,
1898 }, {
1899 .eraseblocks = { {64 * 1024, 32} },
1900 .block_erase = spi_block_erase_52,
1901 }, {
1902 .eraseblocks = { {2 * 1024 * 1024, 1} },
1903 .block_erase = spi_block_erase_60,
1904 }, {
1905 .eraseblocks = { {2 * 1024 * 1024, 1} },
1906 .block_erase = spi_block_erase_c7,
1907 }
1908 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001909 .write = spi_chip_write_256,
1910 .read = spi_chip_read,
1911 },
1912
1913 {
1914 .vendor = "Eon",
1915 .name = "EN25F05",
1916 .bustype = CHIP_BUSTYPE_SPI,
1917 .manufacture_id = EON_ID_NOPREFIX,
1918 .model_id = EN_25F05,
1919 .total_size = 64,
1920 .page_size = 256,
1921 .tested = TEST_UNTESTED,
1922 .probe = probe_spi_rdid,
1923 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001924 .erase = NULL,
1925 .block_erasers =
1926 {
1927 {
1928 .eraseblocks = { {4 * 1024, 16} },
1929 .block_erase = spi_block_erase_20,
1930 }, {
1931 .eraseblocks = { {32 * 1024, 2} },
1932 .block_erase = spi_block_erase_d8,
1933 }, {
1934 .eraseblocks = { {32 * 1024, 2} },
1935 .block_erase = spi_block_erase_52,
1936 }, {
1937 .eraseblocks = { {64 * 1024, 1} },
1938 .block_erase = spi_block_erase_60,
1939 }, {
1940 .eraseblocks = { {64 * 1024, 1} },
1941 .block_erase = spi_block_erase_c7,
1942 }
1943 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001944 .write = spi_chip_write_256,
1945 .read = spi_chip_read,
1946 },
1947
1948 {
1949 .vendor = "Eon",
1950 .name = "EN25F10",
1951 .bustype = CHIP_BUSTYPE_SPI,
1952 .manufacture_id = EON_ID_NOPREFIX,
1953 .model_id = EN_25F10,
1954 .total_size = 128,
1955 .page_size = 256,
1956 .tested = TEST_UNTESTED,
1957 .probe = probe_spi_rdid,
1958 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001959 .erase = NULL,
1960 .block_erasers =
1961 {
1962 {
1963 .eraseblocks = { {4 * 1024, 32} },
1964 .block_erase = spi_block_erase_20,
1965 }, {
1966 .eraseblocks = { {32 * 1024, 4} },
1967 .block_erase = spi_block_erase_d8,
1968 }, {
1969 .eraseblocks = { {32 * 1024, 4} },
1970 .block_erase = spi_block_erase_52,
1971 }, {
1972 .eraseblocks = { {128 * 1024, 1} },
1973 .block_erase = spi_block_erase_60,
1974 }, {
1975 .eraseblocks = { {128 * 1024, 1} },
1976 .block_erase = spi_block_erase_c7,
1977 }
1978 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001979 .write = spi_chip_write_256,
1980 .read = spi_chip_read,
1981 },
1982
1983 {
1984 .vendor = "Eon",
1985 .name = "EN25F20",
1986 .bustype = CHIP_BUSTYPE_SPI,
1987 .manufacture_id = EON_ID_NOPREFIX,
1988 .model_id = EN_25F20,
1989 .total_size = 256,
1990 .page_size = 256,
1991 .tested = TEST_UNTESTED,
1992 .probe = probe_spi_rdid,
1993 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001994 .erase = NULL,
1995 .block_erasers =
1996 {
1997 {
1998 .eraseblocks = { {4 * 1024, 64} },
1999 .block_erase = spi_block_erase_20,
2000 }, {
2001 .eraseblocks = { {64 * 1024, 4} },
2002 .block_erase = spi_block_erase_d8,
2003 }, {
2004 .eraseblocks = { {64 * 1024, 4} },
2005 .block_erase = spi_block_erase_52,
2006 }, {
2007 .eraseblocks = { {256 * 1024, 1} },
2008 .block_erase = spi_block_erase_60,
2009 }, {
2010 .eraseblocks = { {256 * 1024, 1} },
2011 .block_erase = spi_block_erase_c7,
2012 }
2013 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002014 .write = spi_chip_write_256,
2015 .read = spi_chip_read,
2016 },
2017
2018 {
2019 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002020 .name = "EN25F40",
2021 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002022 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002023 .model_id = EN_25F40,
2024 .total_size = 512,
2025 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002026 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002027 .probe = probe_spi_rdid,
2028 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002029 .erase = NULL,
2030 .block_erasers =
2031 {
2032 {
Sean Nelson54596372010-01-09 05:30:14 +00002033 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002034 .block_erase = spi_block_erase_20,
2035 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002036 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002037 .block_erase = spi_block_erase_d8,
2038 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002039 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002040 .block_erase = spi_block_erase_60,
2041 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002042 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002043 .block_erase = spi_block_erase_c7,
2044 },
2045 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002046 .write = spi_chip_write_256,
2047 .read = spi_chip_read,
2048 },
2049
2050 {
2051 .vendor = "Eon",
2052 .name = "EN25F80",
2053 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002054 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002055 .model_id = EN_25F80,
2056 .total_size = 1024,
2057 .page_size = 256,
2058 .tested = TEST_UNTESTED,
2059 .probe = probe_spi_rdid,
2060 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002061 .erase = NULL,
2062 .block_erasers =
2063 {
2064 {
2065 .eraseblocks = { {4 * 1024, 256} },
2066 .block_erase = spi_block_erase_20,
2067 }, {
2068 .eraseblocks = { {64 * 1024, 16} },
2069 .block_erase = spi_block_erase_d8,
2070 }, {
2071 .eraseblocks = { {1024 * 1024, 1} },
2072 .block_erase = spi_block_erase_60,
2073 }, {
2074 .eraseblocks = { {1024 * 1024, 1} },
2075 .block_erase = spi_block_erase_c7,
2076 }
2077 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002078 .write = spi_chip_write_256,
2079 .read = spi_chip_read,
2080 },
2081
2082 {
2083 .vendor = "Eon",
2084 .name = "EN25F16",
2085 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002086 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002087 .model_id = EN_25F16,
2088 .total_size = 2048,
2089 .page_size = 256,
2090 .tested = TEST_UNTESTED,
2091 .probe = probe_spi_rdid,
2092 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002093 .erase = NULL,
2094 .block_erasers =
2095 {
2096 {
2097 .eraseblocks = { {4 * 1024, 512} },
2098 .block_erase = spi_block_erase_20,
2099 }, {
2100 .eraseblocks = { {64 * 1024, 32} },
2101 .block_erase = spi_block_erase_d8,
2102 }, {
2103 .eraseblocks = { {2 * 1024 * 1024, 1} },
2104 .block_erase = spi_block_erase_60,
2105 }, {
2106 .eraseblocks = { {2 * 1024 * 1024, 1} },
2107 .block_erase = spi_block_erase_c7,
2108 }
2109 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002110 .write = spi_chip_write_256,
2111 .read = spi_chip_read,
2112 },
2113
2114 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002115 .vendor = "Eon",
2116 .name = "EN25F32",
2117 .bustype = CHIP_BUSTYPE_SPI,
2118 .manufacture_id = EON_ID_NOPREFIX,
2119 .model_id = EN_25F32,
2120 .total_size = 4096,
2121 .page_size = 256,
2122 .tested = TEST_UNTESTED,
2123 .probe = probe_spi_rdid,
2124 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002125 .erase = NULL,
2126 .block_erasers =
2127 {
2128 {
2129 .eraseblocks = { {4 * 1024, 1024} },
2130 .block_erase = spi_block_erase_20,
2131 }, {
2132 .eraseblocks = { {64 * 1024, 64} },
2133 .block_erase = spi_block_erase_d8,
2134 }, {
2135 .eraseblocks = { {4 * 1024 * 1024, 1} },
2136 .block_erase = spi_block_erase_60,
2137 }, {
2138 .eraseblocks = { {4 * 1024 * 1024, 1} },
2139 .block_erase = spi_block_erase_c7,
2140 }
2141 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002142 .write = spi_chip_write_256,
2143 .read = spi_chip_read,
2144 },
2145
2146 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002147 .vendor = "EON",
2148 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002149 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002150 .manufacture_id = EON_ID,
2151 .model_id = EN_29F002B,
2152 .total_size = 256,
2153 .page_size = 256,
2154 .tested = TEST_UNTESTED,
2155 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002156 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002157 .erase = NULL,
2158 .block_erasers =
2159 {
2160 {
2161 .eraseblocks = {
2162 {64 * 1024, 3},
2163 {32 * 1024, 1},
2164 {8 * 1024, 2},
2165 {16 * 1024, 1},
2166 },
2167 .block_erase = erase_sector_jedec,
2168 }, {
2169 .eraseblocks = { {256 * 1024, 1} },
2170 .block_erase = erase_chip_block_jedec,
2171 },
2172 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002173 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002174 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002175 },
2176
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002177 {
2178 .vendor = "EON",
2179 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002180 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002181 .manufacture_id = EON_ID,
2182 .model_id = EN_29F002T,
2183 .total_size = 256,
2184 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002185 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002186 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002187 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002188 .erase = NULL,
2189 .block_erasers =
2190 {
2191 {
2192 .eraseblocks = {
2193 {16 * 1024, 1},
2194 {8 * 1024, 2},
2195 {32 * 1024, 1},
2196 {64 * 1024, 3},
2197 },
2198 .block_erase = erase_sector_jedec,
2199 }, {
2200 .eraseblocks = { {256 * 1024, 1} },
2201 .block_erase = erase_chip_block_jedec,
2202 },
2203 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002204 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002205 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002206 },
2207
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002208 {
2209 .vendor = "Fujitsu",
2210 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002211 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002212 .manufacture_id = FUJITSU_ID,
2213 .model_id = MBM29F004BC,
2214 .total_size = 512,
2215 .page_size = 64 * 1024,
2216 .tested = TEST_UNTESTED,
2217 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002218 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002219 .erase = NULL,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002220 .block_erasers =
2221 {
2222 {
2223 .eraseblocks = {
2224 {16 * 1024, 1},
2225 {8 * 1024, 2},
2226 {32 * 1024, 1},
2227 {64 * 1024, 7},
2228 },
2229 .block_erase = erase_sector_29f040b,
2230 }, {
2231 .eraseblocks = { {512 * 1024, 1} },
2232 .block_erase = erase_chip_29f040b,
2233 },
2234 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002235 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002236 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002237 },
2238
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002239 {
2240 .vendor = "Fujitsu",
2241 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002242 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002243 .manufacture_id = FUJITSU_ID,
2244 .model_id = MBM29F004TC,
2245 .total_size = 512,
2246 .page_size = 64 * 1024,
2247 .tested = TEST_UNTESTED,
2248 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002249 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002250 .erase = NULL,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002251 .block_erasers =
2252 {
2253 {
2254 .eraseblocks = {
2255 {64 * 1024, 7},
2256 {32 * 1024, 1},
2257 {8 * 1024, 2},
2258 {16 * 1024, 1},
2259 },
2260 .block_erase = erase_sector_29f040b,
2261 }, {
2262 .eraseblocks = { {512 * 1024, 1} },
2263 .block_erase = erase_chip_29f040b,
2264 },
2265 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002266 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002267 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002268 },
2269
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002270 {
2271 .vendor = "Fujitsu",
2272 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002273 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002274 .manufacture_id = FUJITSU_ID,
2275 .model_id = MBM29F400BC,
2276 .total_size = 512,
2277 .page_size = 64 * 1024,
2278 .tested = TEST_UNTESTED,
2279 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002280 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002281 .erase = NULL,
2282 .block_erasers =
2283 {
2284 {
2285 .eraseblocks = {
2286 {16 * 1024, 1},
2287 {8 * 1024, 2},
2288 {32 * 1024, 1},
2289 {64 * 1024, 7},
2290 },
2291 .block_erase = block_erase_m29f400bt,
2292 }, {
2293 .eraseblocks = { {512 * 1024, 1} },
2294 .block_erase = block_erase_chip_m29f400bt,
2295 },
2296 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002297 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002298 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002299 },
2300
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002301 {
2302 .vendor = "Fujitsu",
2303 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002304 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002305 .manufacture_id = FUJITSU_ID,
2306 .model_id = MBM29F400TC,
2307 .total_size = 512,
2308 .page_size = 64 * 1024,
2309 .tested = TEST_UNTESTED,
2310 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002311 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002312 .erase = NULL,
2313 .block_erasers =
2314 {
2315 {
2316 .eraseblocks = {
2317 {64 * 1024, 7},
2318 {32 * 1024, 1},
2319 {8 * 1024, 2},
2320 {16 * 1024, 1},
2321 },
2322 .block_erase = block_erase_m29f400bt,
2323 }, {
2324 .eraseblocks = { {512 * 1024, 1} },
2325 .block_erase = block_erase_chip_m29f400bt,
2326 },
2327 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002328 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002329 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002330 },
2331
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002332 {
2333 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002334 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002335 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002336 .manufacture_id = INTEL_ID,
2337 .model_id = P28F001BXB,
2338 .total_size = 128,
2339 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelson54596372010-01-09 05:30:14 +00002340 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002341 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002342 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002343 .erase = NULL,
Sean Nelson54596372010-01-09 05:30:14 +00002344 .block_erasers =
2345 {
2346 {
2347 .eraseblocks = {
2348 {8 * 1024, 1},
2349 {4 * 1024, 2},
2350 {112 * 1024, 1},
2351 },
2352 .block_erase = erase_82802ab_block,
2353 },
2354 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002355 .write = NULL,
2356 .read = read_memmapped,
2357 },
2358
2359 {
2360 .vendor = "Intel",
2361 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002362 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002363 .manufacture_id = INTEL_ID,
2364 .model_id = P28F001BXT,
2365 .total_size = 128,
2366 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelson54596372010-01-09 05:30:14 +00002367 .tested = TEST_OK_PR|TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002368 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002369 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002370 .erase = NULL,
Sean Nelson54596372010-01-09 05:30:14 +00002371 .block_erasers =
2372 {
2373 {
2374 .eraseblocks = {
2375 {112 * 1024, 1},
2376 {4 * 1024, 2},
2377 {8 * 1024, 1},
2378 },
2379 .block_erase = erase_82802ab_block,
2380 },
2381 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002382 .write = NULL,
2383 .read = read_memmapped,
2384 },
2385
2386 {
2387 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002388 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002389 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002390 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002391 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002392 .total_size = 512,
2393 .page_size = 64 * 1024,
Sean Nelson54596372010-01-09 05:30:14 +00002394 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002395 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002396 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002397 .erase = NULL,
2398 .block_erasers =
2399 {
2400 {
2401 .eraseblocks = { {64 * 1024, 8} },
2402 .block_erase = erase_82802ab_block,
2403 },
2404 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002405 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002406 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002407 },
2408
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002409 {
2410 .vendor = "Intel",
2411 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002412 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002413 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002414 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002415 .total_size = 1024,
2416 .page_size = 64 * 1024,
Sean Nelson54596372010-01-09 05:30:14 +00002417 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002418 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002419 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002420 .erase = NULL,
2421 .block_erasers =
2422 {
2423 {
2424 .eraseblocks = { {64 * 1024, 16} },
2425 .block_erase = erase_82802ab_block,
2426 },
2427 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002428 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002429 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002430 },
2431
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002432 {
2433 .vendor = "Macronix",
2434 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002435 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002436 .manufacture_id = MX_ID,
2437 .model_id = MX_25L512,
2438 .total_size = 64,
2439 .page_size = 256,
2440 .tested = TEST_UNTESTED,
2441 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002442 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002443 .erase = NULL,
2444 .block_erasers =
2445 {
2446 {
2447 .eraseblocks = { {4 * 1024, 16} },
2448 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002449 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002450 .eraseblocks = { {64 * 1024, 1} },
2451 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002452 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002453 .eraseblocks = { {64 * 1024, 1} },
2454 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002455 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002456 .eraseblocks = { {64 * 1024, 1} },
2457 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002458 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002459 .eraseblocks = { {64 * 1024, 1} },
2460 .block_erase = spi_block_erase_c7,
2461 },
2462 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002463 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002464 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002465 },
2466
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002467 {
2468 .vendor = "Macronix",
2469 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002470 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002471 .manufacture_id = MX_ID,
2472 .model_id = MX_25L1005,
2473 .total_size = 128,
2474 .page_size = 256,
2475 .tested = TEST_UNTESTED,
2476 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002477 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002478 .erase = NULL,
2479 .block_erasers =
2480 {
2481 {
2482 .eraseblocks = { {4 * 1024, 32} },
2483 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002484 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002485 .eraseblocks = { {64 * 1024, 2} },
2486 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002487 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002488 .eraseblocks = { {128 * 1024, 1} },
2489 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002490 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002491 .eraseblocks = { {128 * 1024, 1} },
2492 .block_erase = spi_block_erase_c7,
2493 },
2494 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002495 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002496 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002497 },
2498
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002499 {
2500 .vendor = "Macronix",
2501 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002502 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002503 .manufacture_id = MX_ID,
2504 .model_id = MX_25L2005,
2505 .total_size = 256,
2506 .page_size = 256,
2507 .tested = TEST_UNTESTED,
2508 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002509 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002510 .erase = NULL,
2511 .block_erasers =
2512 {
2513 {
2514 .eraseblocks = { {4 * 1024, 64} },
2515 .block_erase = spi_block_erase_20,
2516 }, {
2517 .eraseblocks = { {64 * 1024, 4} },
2518 .block_erase = spi_block_erase_52,
2519 }, {
2520 .eraseblocks = { {64 * 1024, 4} },
2521 .block_erase = spi_block_erase_d8,
2522 }, {
2523 .eraseblocks = { {256 * 1024, 1} },
2524 .block_erase = spi_block_erase_60,
2525 }, {
2526 .eraseblocks = { {256 * 1024, 1} },
2527 .block_erase = spi_block_erase_c7,
2528 },
2529 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002530 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002531 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002532 },
2533
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002534 {
2535 .vendor = "Macronix",
2536 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002537 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002538 .manufacture_id = MX_ID,
2539 .model_id = MX_25L4005,
2540 .total_size = 512,
2541 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002542 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002543 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002544 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002545 .erase = NULL,
2546 .block_erasers =
2547 {
2548 {
2549 .eraseblocks = { {4 * 1024, 128} },
2550 .block_erase = spi_block_erase_20,
2551 }, {
2552 .eraseblocks = { {64 * 1024, 8} },
2553 .block_erase = spi_block_erase_52,
2554 }, {
2555 .eraseblocks = { {64 * 1024, 8} },
2556 .block_erase = spi_block_erase_d8,
2557 }, {
2558 .eraseblocks = { {512 * 1024, 1} },
2559 .block_erase = spi_block_erase_60,
2560 }, {
2561 .eraseblocks = { {512 * 1024, 1} },
2562 .block_erase = spi_block_erase_c7,
2563 },
2564 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002565 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002566 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002567 },
2568
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002569 {
2570 .vendor = "Macronix",
2571 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002572 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002573 .manufacture_id = MX_ID,
2574 .model_id = MX_25L8005,
2575 .total_size = 1024,
2576 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002577 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002578 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002579 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002580 .erase = NULL,
2581 .block_erasers =
2582 {
2583 {
2584 .eraseblocks = { {4 * 1024, 256} },
2585 .block_erase = spi_block_erase_20,
2586 }, {
2587 .eraseblocks = { {64 * 1024, 16} },
2588 .block_erase = spi_block_erase_52,
2589 }, {
2590 .eraseblocks = { {64 * 1024, 16} },
2591 .block_erase = spi_block_erase_d8,
2592 }, {
2593 .eraseblocks = { {1024 * 1024, 1} },
2594 .block_erase = spi_block_erase_60,
2595 }, {
2596 .eraseblocks = { {1024 * 1024, 1} },
2597 .block_erase = spi_block_erase_c7,
2598 },
2599 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002600 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002601 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002602 },
2603
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002604 {
2605 .vendor = "Macronix",
2606 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002607 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002608 .manufacture_id = MX_ID,
2609 .model_id = MX_25L1605,
2610 .total_size = 2048,
2611 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002612 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002613 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002614 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002615 .erase = NULL,
2616 .block_erasers =
2617 {
2618 {
2619 .eraseblocks = { {4 * 1024, 512} },
2620 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2621 }, {
2622 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2623 .block_erase = spi_block_erase_52,
2624 }, {
2625 .eraseblocks = { {64 * 1024, 32} },
2626 .block_erase = spi_block_erase_d8,
2627 }, {
2628 .eraseblocks = { {2 * 1024 * 1024, 1} },
2629 .block_erase = spi_block_erase_60,
2630 }, {
2631 .eraseblocks = { {2 * 1024 * 1024, 1} },
2632 .block_erase = spi_block_erase_c7,
2633 },
2634 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002635 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002636 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002637 },
2638
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002639 {
2640 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002641 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002642 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002643 .manufacture_id = MX_ID,
2644 .model_id = MX_25L1635D,
2645 .total_size = 2048,
2646 .page_size = 256,
2647 .tested = TEST_UNTESTED,
2648 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002649 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002650 .erase = NULL,
2651 .block_erasers =
2652 {
2653 {
2654 .eraseblocks = { {4 * 1024, 512} },
2655 .block_erase = spi_block_erase_20,
2656 }, {
2657 .eraseblocks = { {64 * 1024, 32} },
2658 .block_erase = spi_block_erase_d8,
2659 }, {
2660 .eraseblocks = { {2 * 1024 * 1024, 1} },
2661 .block_erase = spi_block_erase_60,
2662 }, {
2663 .eraseblocks = { {2 * 1024 * 1024, 1} },
2664 .block_erase = spi_block_erase_c7,
2665 }
2666 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002667 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002668 .read = spi_chip_read,
2669 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002670
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002671 {
2672 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002673 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002674 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002675 .manufacture_id = MX_ID,
2676 .model_id = MX_25L3205,
2677 .total_size = 4096,
2678 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002679 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002680 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002681 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002682 .erase = NULL,
2683 .block_erasers =
2684 {
2685 {
2686 .eraseblocks = { {4 * 1024, 1024} },
2687 .block_erase = spi_block_erase_20,
2688 }, {
2689 .eraseblocks = { {4 * 1024, 1024} },
2690 .block_erase = spi_block_erase_d8,
2691 }, {
2692 .eraseblocks = { {4 * 1024 * 1024, 1} },
2693 .block_erase = spi_block_erase_60,
2694 }, {
2695 .eraseblocks = { {4 * 1024 * 1024, 1} },
2696 .block_erase = spi_block_erase_c7,
2697 },
2698 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002699 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002700 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002701 },
2702
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002703 {
2704 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002705 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002706 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002707 .manufacture_id = MX_ID,
2708 .model_id = MX_25L3235D,
2709 .total_size = 4096,
2710 .page_size = 256,
2711 .tested = TEST_UNTESTED,
2712 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002713 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002714 .erase = NULL,
2715 .block_erasers =
2716 {
2717 {
2718 .eraseblocks = { {4 * 1024, 1024} },
2719 .block_erase = spi_block_erase_20,
2720 }, {
2721 .eraseblocks = { {64 * 1024, 64} },
2722 .block_erase = spi_block_erase_d8,
2723 }, {
2724 .eraseblocks = { {4 * 1024 * 1024, 1} },
2725 .block_erase = spi_block_erase_60,
2726 }, {
2727 .eraseblocks = { {4 * 1024 * 1024, 1} },
2728 .block_erase = spi_block_erase_c7,
2729 }
2730 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002731 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002732 .read = spi_chip_read,
2733 },
2734
2735 {
2736 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002737 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002738 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002739 .manufacture_id = MX_ID,
2740 .model_id = MX_25L6405,
2741 .total_size = 8192,
2742 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002743 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002744 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002745 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002746 .erase = NULL,
2747 .block_erasers =
2748 {
2749 {
2750 .eraseblocks = { {64 * 1024, 128} },
2751 .block_erase = spi_block_erase_20,
2752 }, {
2753 .eraseblocks = { {64 * 1024, 128} },
2754 .block_erase = spi_block_erase_d8,
2755 }, {
2756 .eraseblocks = { {8 * 1024 * 1024, 1} },
2757 .block_erase = spi_block_erase_60,
2758 }, {
2759 .eraseblocks = { {8 * 1024 * 1024, 1} },
2760 .block_erase = spi_block_erase_c7,
2761 }
2762 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002763 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002764 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002765 },
2766
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002767 {
2768 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002769 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002770 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002771 .manufacture_id = MX_ID,
2772 .model_id = MX_25L12805,
2773 .total_size = 16384,
2774 .page_size = 256,
2775 .tested = TEST_UNTESTED,
2776 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002777 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002778 .erase = NULL,
2779 .block_erasers =
2780 {
2781 {
2782 .eraseblocks = { {4 * 1024, 4096} },
2783 .block_erase = spi_block_erase_20,
2784 }, {
2785 .eraseblocks = { {64 * 1024, 256} },
2786 .block_erase = spi_block_erase_d8,
2787 }, {
2788 .eraseblocks = { {16 * 1024 * 1024, 1} },
2789 .block_erase = spi_block_erase_60,
2790 }, {
2791 .eraseblocks = { {16 * 1024 * 1024, 1} },
2792 .block_erase = spi_block_erase_c7,
2793 }
2794 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002795 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002796 .read = spi_chip_read,
2797 },
2798
2799 {
2800 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002801 .name = "MX29F001B",
2802 .bustype = CHIP_BUSTYPE_PARALLEL,
2803 .manufacture_id = MX_ID,
2804 .model_id = MX_29F001B,
2805 .total_size = 128,
2806 .page_size = 32 * 1024,
Sean Nelson54596372010-01-09 05:30:14 +00002807 .tested = TEST_OK_PR,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002808 .probe = probe_29f002,
2809 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002810 .erase = NULL,
2811 .block_erasers =
2812 {
2813 {
2814 .eraseblocks = {
2815 {8 * 1024, 1},
2816 {4 * 1024, 2},
2817 {8 * 1024, 2},
2818 {32 * 1024, 1},
2819 {64 * 1024, 1},
2820 },
2821 .block_erase = erase_sector_29f002,
2822 }, {
2823 .eraseblocks = { {128 * 1024, 1} },
2824 .block_erase = erase_chip_29f002,
2825 }
2826 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002827 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002828 .read = read_memmapped,
2829 },
2830
2831 {
2832 .vendor = "Macronix",
2833 .name = "MX29F001T",
2834 .bustype = CHIP_BUSTYPE_PARALLEL,
2835 .manufacture_id = MX_ID,
2836 .model_id = MX_29F001T,
2837 .total_size = 128,
2838 .page_size = 32 * 1024,
Sean Nelson54596372010-01-09 05:30:14 +00002839 .tested = TEST_OK_PR,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002840 .probe = probe_29f002,
2841 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002842 .erase = NULL,
2843 .block_erasers =
2844 {
2845 {
2846 .eraseblocks = {
2847 {64 * 1024, 1},
2848 {32 * 1024, 1},
2849 {8 * 1024, 2},
2850 {4 * 1024, 2},
2851 {8 * 1024, 1},
2852 },
2853 .block_erase = erase_sector_29f002,
2854 }, {
2855 .eraseblocks = { {128 * 1024, 1} },
2856 .block_erase = erase_chip_29f002,
2857 }
2858 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002859 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002860 .read = read_memmapped,
2861 },
2862
2863 {
2864 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002865 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002866 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002867 .manufacture_id = MX_ID,
2868 .model_id = MX_29F002B,
2869 .total_size = 256,
2870 .page_size = 64 * 1024,
2871 .tested = TEST_UNTESTED,
2872 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002873 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002874 .erase = NULL,
2875 .block_erasers =
2876 {
2877 {
2878 .eraseblocks = {
2879 {16 * 1024, 1},
2880 {8 * 1024, 2},
2881 {32 * 1024, 1},
2882 {64 * 1024, 3},
2883 },
2884 .block_erase = erase_sector_29f002, /* This erase function has 64k blocksize for eLiteFlash */
2885 }, {
2886 .eraseblocks = { {256 * 1024, 1} },
2887 .block_erase = erase_chip_29f002,
2888 },
2889 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002890 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002891 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002892 },
2893
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002894 {
2895 .vendor = "Macronix",
2896 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002897 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002898 .manufacture_id = MX_ID,
2899 .model_id = MX_29F002T,
2900 .total_size = 256,
2901 .page_size = 64 * 1024,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002902 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002903 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002904 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002905 .erase = NULL,
2906 .block_erasers =
2907 {
2908 {
2909 .eraseblocks = {
2910 {64 * 1024, 3},
2911 {32 * 1024, 1},
2912 {8 * 1024, 2},
2913 {16 * 1024, 1},
2914 },
2915 .block_erase = erase_sector_29f002, /* This erase function has 64k blocksize for eLiteFlash */
2916 }, {
2917 .eraseblocks = { {256 * 1024, 1} },
2918 .block_erase = erase_chip_29f002,
2919 },
2920 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002921 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002922 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002923 },
2924
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002925 {
2926 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002927 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002928 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002929 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002930 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002931 .total_size = 512,
2932 .page_size = 64 * 1024,
2933 .tested = TEST_OK_PR,
2934 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002935 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002936 .erase = NULL,
2937 .block_erasers =
2938 {
2939 {
2940 .eraseblocks = { {64 * 1024, 8}, },
2941 .block_erase = erase_sector_29f002,
2942 }, {
2943 .eraseblocks = { {512 * 1024, 1} },
2944 .block_erase = erase_chip_29f002,
2945 },
2946 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002947 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002948 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002949 },
2950
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002951 {
2952 .vendor = "Numonyx",
2953 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002954 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002955 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002956 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002957 .total_size = 128,
2958 .page_size = 256,
2959 .tested = TEST_UNTESTED,
2960 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002961 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002962 .erase = NULL,
2963 .block_erasers =
2964 {
2965 {
2966 .eraseblocks = { {4 * 1024, 32} },
2967 .block_erase = spi_block_erase_20,
2968 }, {
2969 .eraseblocks = { {64 * 1024, 2} },
2970 .block_erase = spi_block_erase_d8,
2971 }, {
2972 .eraseblocks = { {128 * 1024, 1} },
2973 .block_erase = spi_block_erase_c7,
2974 }
2975 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002976 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002977 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002978 },
2979
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002980 {
2981 .vendor = "Numonyx",
2982 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002983 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002984 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002985 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002986 .total_size = 256,
2987 .page_size = 256,
2988 .tested = TEST_UNTESTED,
2989 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002990 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002991 .erase = NULL,
2992 .block_erasers =
2993 {
2994 {
2995 .eraseblocks = { {4 * 1024, 64} },
2996 .block_erase = spi_block_erase_20,
2997 }, {
2998 .eraseblocks = { {64 * 1024, 4} },
2999 .block_erase = spi_block_erase_d8,
3000 }, {
3001 .eraseblocks = { {256 * 1024, 1} },
3002 .block_erase = spi_block_erase_c7,
3003 }
3004 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003005 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003006 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003007 },
3008
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003009 {
3010 .vendor = "Numonyx",
3011 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003012 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003013 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003014 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003015 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003016 .page_size = 256,
3017 .tested = TEST_UNTESTED,
3018 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003019 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003020 .erase = NULL,
3021 .block_erasers =
3022 {
3023 {
3024 .eraseblocks = { {4 * 1024, 128} },
3025 .block_erase = spi_block_erase_20,
3026 }, {
3027 .eraseblocks = { {64 * 1024, 8} },
3028 .block_erase = spi_block_erase_d8,
3029 }, {
3030 .eraseblocks = { {512 * 1024, 1} },
3031 .block_erase = spi_block_erase_c7,
3032 }
3033 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003034 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003035 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003036 },
3037
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003038 {
3039 .vendor = "Numonyx",
3040 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003041 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003042 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003043 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003044 .total_size = 1024,
3045 .page_size = 256,
3046 .tested = TEST_OK_PREW,
3047 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003048 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003049 .erase = NULL,
3050 .block_erasers =
3051 {
3052 {
3053 .eraseblocks = { {4 * 1024, 256} },
3054 .block_erase = spi_block_erase_20,
3055 }, {
3056 .eraseblocks = { {64 * 1024, 16} },
3057 .block_erase = spi_block_erase_d8,
3058 }, {
3059 .eraseblocks = { {1024 * 1024, 1} },
3060 .block_erase = spi_block_erase_c7,
3061 }
3062 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003063 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003064 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003065 },
3066
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003067 {
3068 .vendor = "Numonyx",
3069 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003070 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003071 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003072 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003073 .total_size = 2048,
3074 .page_size = 256,
3075 .tested = TEST_UNTESTED,
3076 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003077 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003078 .erase = NULL,
3079 .block_erasers =
3080 {
3081 {
3082 .eraseblocks = { {4 * 1024, 512} },
3083 .block_erase = spi_block_erase_20,
3084 }, {
3085 .eraseblocks = { {64 * 1024, 32} },
3086 .block_erase = spi_block_erase_d8,
3087 }, {
3088 .eraseblocks = { {2 * 1024 * 1024, 1} },
3089 .block_erase = spi_block_erase_c7,
3090 }
3091 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003092 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003093 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003094 },
3095
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003096 {
3097 .vendor = "PMC",
3098 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003099 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003100 .manufacture_id = PMC_ID,
3101 .model_id = PMC_25LV010,
3102 .total_size = 128,
3103 .page_size = 256,
3104 .tested = TEST_UNTESTED,
3105 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003106 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003107 .erase = NULL,
3108 .block_erasers =
3109 {
3110 {
3111 .eraseblocks = { {4 * 1024, 32} },
3112 .block_erase = spi_block_erase_d7,
3113 }, {
3114 .eraseblocks = { {32 * 1024, 4} },
3115 .block_erase = spi_block_erase_d8,
3116 }, {
3117 .eraseblocks = { {128 * 1024, 1} },
3118 .block_erase = spi_block_erase_c7,
3119 }
3120 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003121 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003122 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003123 },
3124
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003125 {
3126 .vendor = "PMC",
3127 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003128 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003129 .manufacture_id = PMC_ID,
3130 .model_id = PMC_25LV016B,
3131 .total_size = 2048,
3132 .page_size = 256,
3133 .tested = TEST_UNTESTED,
3134 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003135 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003136 .erase = NULL,
3137 .block_erasers =
3138 {
3139 {
3140 .eraseblocks = { {4 * 1024, 512} },
3141 .block_erase = spi_block_erase_d7,
3142 }, {
3143 .eraseblocks = { {4 * 1024, 512} },
3144 .block_erase = spi_block_erase_20,
3145 }, {
3146 .eraseblocks = { {64 * 1024, 32} },
3147 .block_erase = spi_block_erase_d8,
3148 }, {
3149 .eraseblocks = { {2 * 1024 * 1024, 1} },
3150 .block_erase = spi_block_erase_60,
3151 }, {
3152 .eraseblocks = { {2 * 1024 * 1024, 1} },
3153 .block_erase = spi_block_erase_c7,
3154 }
3155 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003156 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003157 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003158 },
3159
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003160 {
3161 .vendor = "PMC",
3162 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003163 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003164 .manufacture_id = PMC_ID,
3165 .model_id = PMC_25LV020,
3166 .total_size = 256,
3167 .page_size = 256,
3168 .tested = TEST_UNTESTED,
3169 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003170 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003171 .erase = NULL,
3172 .block_erasers =
3173 {
3174 {
3175 .eraseblocks = { {4 * 1024, 64} },
3176 .block_erase = spi_block_erase_d7,
3177 }, {
3178 .eraseblocks = { {64 * 1024, 4} },
3179 .block_erase = spi_block_erase_d8,
3180 }, {
3181 .eraseblocks = { {256 * 1024, 1} },
3182 .block_erase = spi_block_erase_c7,
3183 }
3184 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003185 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003186 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003187 },
3188
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003189 {
3190 .vendor = "PMC",
3191 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003192 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003193 .manufacture_id = PMC_ID,
3194 .model_id = PMC_25LV040,
3195 .total_size = 512,
3196 .page_size = 256,
3197 .tested = TEST_UNTESTED,
3198 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003199 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003200 .erase = NULL,
3201 .block_erasers =
3202 {
3203 {
3204 .eraseblocks = { {4 * 1024, 128} },
3205 .block_erase = spi_block_erase_d7,
3206 }, {
3207 .eraseblocks = { {64 * 1024, 8} },
3208 .block_erase = spi_block_erase_d8,
3209 }, {
3210 .eraseblocks = { {512 * 1024, 1} },
3211 .block_erase = spi_block_erase_c7,
3212 }
3213 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003214 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003215 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003216 },
3217
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003218 {
3219 .vendor = "PMC",
3220 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003221 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003222 .manufacture_id = PMC_ID,
3223 .model_id = PMC_25LV080B,
3224 .total_size = 1024,
3225 .page_size = 256,
3226 .tested = TEST_UNTESTED,
3227 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003228 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003229 .erase = NULL,
3230 .block_erasers =
3231 {
3232 {
3233 .eraseblocks = { {4 * 1024, 256} },
3234 .block_erase = spi_block_erase_d7,
3235 }, {
3236 .eraseblocks = { {4 * 1024, 256} },
3237 .block_erase = spi_block_erase_20,
3238 }, {
3239 .eraseblocks = { {64 * 1024, 16} },
3240 .block_erase = spi_block_erase_d8,
3241 }, {
3242 .eraseblocks = { {1024 * 1024, 1} },
3243 .block_erase = spi_block_erase_60,
3244 }, {
3245 .eraseblocks = { {1024 * 1024, 1} },
3246 .block_erase = spi_block_erase_c7,
3247 }
3248 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003249 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003250 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003251 },
3252
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003253 {
3254 .vendor = "PMC",
3255 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003256 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003257 .manufacture_id = PMC_ID,
3258 .model_id = PMC_25LV512,
3259 .total_size = 64,
3260 .page_size = 256,
3261 .tested = TEST_UNTESTED,
3262 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003263 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003264 .erase = NULL,
3265 .block_erasers =
3266 {
3267 {
3268 .eraseblocks = { {4 * 1024, 16} },
3269 .block_erase = spi_block_erase_d7,
3270 }, {
3271 .eraseblocks = { {32 * 1024, 2} },
3272 .block_erase = spi_block_erase_d8,
3273 }, {
3274 .eraseblocks = { {64 * 1024, 1} },
3275 .block_erase = spi_block_erase_c7,
3276 }
3277 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003278 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003279 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003280 },
3281
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003282 {
3283 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003284 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003285 .bustype = CHIP_BUSTYPE_PARALLEL,
3286 .manufacture_id = PMC_ID_NOPREFIX,
3287 .model_id = PMC_29F002T,
3288 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003289 .page_size = 8 * 1024,
3290 .tested = TEST_OK_PRW,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003291 .probe = probe_29f040b,
3292 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003293 .erase = NULL,
3294 .block_erasers =
3295 {
3296 {
3297 .eraseblocks = {
3298 {128 * 1024, 1},
3299 {96 * 1024, 1},
3300 {8 * 1024, 2},
3301 {16 * 1024, 1},
3302 },
3303 .block_erase = erase_sector_29f040b,
3304 }, {
3305 .eraseblocks = { {256 * 1024, 1} },
3306 .block_erase = erase_chip_29f040b,
3307 },
3308 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003309 .write = write_pm29f002,
3310 .read = read_memmapped,
3311 },
3312
3313 {
3314 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003315 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003316 .bustype = CHIP_BUSTYPE_PARALLEL,
3317 .manufacture_id = PMC_ID_NOPREFIX,
3318 .model_id = PMC_29F002B,
3319 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003320 .page_size = 8 * 1024,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003321 .tested = TEST_UNTESTED,
3322 .probe = probe_29f040b,
3323 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003324 .erase = NULL,
3325 .block_erasers =
3326 {
3327 {
3328 .eraseblocks = {
3329 {16 * 1024, 1},
3330 {8 * 1024, 2},
3331 {96 * 1024, 1},
3332 {128 * 1024, 1},
3333 },
3334 .block_erase = erase_sector_29f040b,
3335 }, {
3336 .eraseblocks = { {256 * 1024, 1} },
3337 .block_erase = erase_chip_29f040b,
3338 },
3339 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003340 .write = write_pm29f002,
3341 .read = read_memmapped,
3342 },
3343
3344 {
3345 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003346 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003347 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003348 .manufacture_id = PMC_ID_NOPREFIX,
3349 .model_id = PMC_39F010,
3350 .total_size = 128,
3351 .page_size = 4096,
Sean Nelson5643c072010-01-19 03:23:07 +00003352 .tested = TEST_OK_PRW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003353 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003354 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003355 .erase = NULL,
3356 .block_erasers =
3357 {
3358 {
3359 .eraseblocks = { {4 * 1024, 32} },
3360 .block_erase = erase_sector_jedec,
3361 }, {
3362 .eraseblocks = { {64 * 1024, 2} },
3363 .block_erase = erase_block_jedec,
3364 }, {
3365 .eraseblocks = { {128 * 1024, 1} },
3366 .block_erase = erase_chip_block_jedec,
3367 }
3368 },
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003369 .write = write_49f002,
3370 .read = read_memmapped,
3371 },
3372
3373 {
3374 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003375 .name = "Pm49FL002",
Urja Rannikko038a3122009-06-28 19:19:25 +00003376 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003377 .manufacture_id = PMC_ID_NOPREFIX,
3378 .model_id = PMC_49FL002,
3379 .total_size = 256,
3380 .page_size = 16 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003381 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson5643c072010-01-19 03:23:07 +00003382 .tested = TEST_OK_PRW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003383 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003384 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003385 .erase = NULL, /* Was: erase_49fl00x */
3386 .block_erasers =
3387 {
3388 {
3389 .eraseblocks = { {4 * 1024, 64} },
3390 .block_erase = erase_sector_jedec,
3391 }, {
3392 .eraseblocks = { {16 * 1024, 16} },
3393 .block_erase = erase_block_jedec,
3394 }, {
3395 .eraseblocks = { {256 * 1024, 1} },
3396 .block_erase = erase_chip_block_jedec,
3397 }
3398 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003399 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003400 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003401 },
3402
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003403 {
3404 .vendor = "PMC",
3405 .name = "Pm49FL004",
Urja Rannikko038a3122009-06-28 19:19:25 +00003406 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003407 .manufacture_id = PMC_ID_NOPREFIX,
3408 .model_id = PMC_49FL004,
3409 .total_size = 512,
3410 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003411 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson5643c072010-01-19 03:23:07 +00003412 .tested = TEST_OK_PRW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003413 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003414 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003415 .erase = NULL, /* Was: erase_49fl00x */
3416 .block_erasers =
3417 {
3418 {
3419 .eraseblocks = { {4 * 1024, 128} },
3420 .block_erase = erase_sector_jedec,
3421 }, {
3422 .eraseblocks = { {64 * 1024, 8} },
3423 .block_erase = erase_block_jedec,
3424 }, {
3425 .eraseblocks = { {512 * 1024, 1} },
3426 .block_erase = erase_chip_block_jedec,
3427 }
3428 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003429 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003430 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003431 },
3432
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003433 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003434 .vendor = "Sanyo",
3435 .name = "LF25FW203A",
3436 .bustype = CHIP_BUSTYPE_SPI,
3437 .manufacture_id = SANYO_ID,
3438 .model_id = SANYO_LE25FW203A,
3439 .total_size = 2048,
3440 .page_size = 256,
3441 .tested = TEST_UNTESTED,
3442 .probe = probe_spi_rdid,
3443 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003444 .erase = NULL,
3445 .block_erasers =
3446 {
3447 {
3448 .eraseblocks = { {64 * 1024, 32} },
3449 .block_erase = spi_block_erase_d8,
3450 }, {
3451 .eraseblocks = { {2 * 1024 * 1024, 1} },
3452 .block_erase = spi_block_erase_c7,
3453 }
3454 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003455 .write = spi_chip_write_256,
3456 .read = spi_chip_read,
3457 },
3458
3459 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003460 .vendor = "Sharp",
3461 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003462 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003463 .manufacture_id = SHARP_ID,
3464 .model_id = SHARP_LHF00L04,
3465 .total_size = 1024,
3466 .page_size = 64 * 1024,
3467 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003468 .probe = probe_49lfxxxc,
3469 .probe_timing = TIMING_ZERO,
3470 .erase = NULL,
3471 .block_erasers =
3472 {
3473 {
3474 .eraseblocks = {
3475 {64 * 1024, 15},
3476 {8 * 1024, 8}
3477 },
3478 .block_erase = erase_lhf00l04_block,
3479 }, {
3480 .eraseblocks = {
3481 {1024 * 1024, 1}
3482 },
3483 .block_erase = NULL, /* 30 D0, only in PP mode */
3484 },
3485 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003486 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003487 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003488 },
3489
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003490 {
3491 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003492 .name = "S25FL008A",
3493 .bustype = CHIP_BUSTYPE_SPI,
3494 .manufacture_id = SPANSION_ID,
3495 .model_id = SPANSION_S25FL008A,
3496 .total_size = 1024,
3497 .page_size = 256,
3498 .tested = TEST_OK_PREW,
3499 .probe = probe_spi_rdid,
3500 .probe_timing = TIMING_ZERO,
3501 .erase = NULL,
3502 .block_erasers =
3503 {
3504 {
3505 .eraseblocks = { {64 * 1024, 16} },
3506 .block_erase = spi_block_erase_d8,
3507 }, {
3508 .eraseblocks = { {1024 * 1024, 1} },
3509 .block_erase = spi_block_erase_c7,
3510 }
3511 },
3512 .write = spi_chip_write_256,
3513 .read = spi_chip_read,
3514 },
3515
3516 {
3517 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003518 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003519 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003520 .manufacture_id = SPANSION_ID,
3521 .model_id = SPANSION_S25FL016A,
3522 .total_size = 2048,
3523 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003524 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003525 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003526 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003527 .erase = NULL,
3528 .block_erasers =
3529 {
3530 {
3531 .eraseblocks = { {64 * 1024, 32} },
3532 .block_erase = spi_block_erase_d8,
3533 }, {
3534 .eraseblocks = { {2 * 1024 * 1024, 1} },
3535 .block_erase = spi_block_erase_c7,
3536 }
3537 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003538 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003539 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003540 },
3541
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003542 {
3543 .vendor = "SST",
3544 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003545 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003546 .manufacture_id = SST_ID,
3547 .model_id = SST_25VF016B,
3548 .total_size = 2048,
3549 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003550 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003551 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003552 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003553 .erase = NULL,
3554 .block_erasers =
3555 {
3556 {
3557 .eraseblocks = { {4 * 1024, 512} },
3558 .block_erase = spi_block_erase_20,
3559 }, {
3560 .eraseblocks = { {32 * 1024, 64} },
3561 .block_erase = spi_block_erase_52,
3562 }, {
3563 .eraseblocks = { {64 * 1024, 32} },
3564 .block_erase = spi_block_erase_d8,
3565 }, {
3566 .eraseblocks = { {2 * 1024 * 1024, 1} },
3567 .block_erase = spi_block_erase_60,
3568 }, {
3569 .eraseblocks = { {2 * 1024 * 1024, 1} },
3570 .block_erase = spi_block_erase_c7,
3571 },
3572 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003573 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003574 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003575 },
3576
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003577 {
3578 .vendor = "SST",
3579 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003580 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003581 .manufacture_id = SST_ID,
3582 .model_id = SST_25VF032B,
3583 .total_size = 4096,
3584 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003585 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003586 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003587 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003588 .erase = NULL,
3589 .block_erasers =
3590 {
3591 {
3592 .eraseblocks = { {4 * 1024, 1024} },
3593 .block_erase = spi_block_erase_20,
3594 }, {
3595 .eraseblocks = { {32 * 1024, 128} },
3596 .block_erase = spi_block_erase_52,
3597 }, {
3598 .eraseblocks = { {64 * 1024, 64} },
3599 .block_erase = spi_block_erase_d8,
3600 }, {
3601 .eraseblocks = { {4 * 1024 * 1024, 1} },
3602 .block_erase = spi_block_erase_60,
3603 }, {
3604 .eraseblocks = { {4 * 1024 * 1024, 1} },
3605 .block_erase = spi_block_erase_c7,
3606 },
3607 },
3608 .write = spi_chip_write_1,
3609 .read = spi_chip_read,
3610 },
3611
3612 {
3613 .vendor = "SST",
3614 .name = "SST25VF040.REMS",
3615 .bustype = CHIP_BUSTYPE_SPI,
3616 .manufacture_id = SST_ID,
3617 .model_id = SST_25VF040_REMS,
3618 .total_size = 512,
3619 .page_size = 256,
3620 .tested = TEST_OK_PR,
3621 .probe = probe_spi_rems,
3622 .probe_timing = TIMING_ZERO,
3623 .erase = NULL,
3624 .block_erasers =
3625 {
3626 {
3627 .eraseblocks = { {4 * 1024, 128} },
3628 .block_erase = spi_block_erase_20,
3629 }, {
3630 .eraseblocks = { {32 * 1024, 16} },
3631 .block_erase = spi_block_erase_52,
3632 }, {
3633 .eraseblocks = { {512 * 1024, 1} },
3634 .block_erase = spi_block_erase_60,
3635 },
3636 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003637 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003638 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003639 },
3640
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003641 {
3642 .vendor = "SST",
3643 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003644 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003645 .manufacture_id = SST_ID,
3646 .model_id = SST_25VF040B,
3647 .total_size = 512,
3648 .page_size = 256,
3649 .tested = TEST_UNTESTED,
3650 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003651 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003652 .erase = NULL,
3653 .block_erasers =
3654 {
3655 {
3656 .eraseblocks = { {4 * 1024, 128} },
3657 .block_erase = spi_block_erase_20,
3658 }, {
3659 .eraseblocks = { {32 * 1024, 16} },
3660 .block_erase = spi_block_erase_52,
3661 }, {
3662 .eraseblocks = { {64 * 1024, 8} },
3663 .block_erase = spi_block_erase_d8,
3664 }, {
3665 .eraseblocks = { {512 * 1024, 1} },
3666 .block_erase = spi_block_erase_60,
3667 }, {
3668 .eraseblocks = { {512 * 1024, 1} },
3669 .block_erase = spi_block_erase_c7,
3670 },
3671 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003672 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003673 .read = spi_chip_read,
3674 },
3675
3676 {
3677 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003678 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003679 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003680 .manufacture_id = SST_ID,
3681 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003682 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003683 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003684 .tested = TEST_OK_PR,
3685 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003686 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003687 .erase = NULL,
3688 .block_erasers =
3689 {
3690 {
3691 .eraseblocks = { {4 * 1024, 128} },
3692 .block_erase = spi_block_erase_20,
3693 }, {
3694 .eraseblocks = { {32 * 1024, 16} },
3695 .block_erase = spi_block_erase_52,
3696 }, {
3697 .eraseblocks = { {64 * 1024, 8} },
3698 .block_erase = spi_block_erase_d8,
3699 }, {
3700 .eraseblocks = { {512 * 1024, 1} },
3701 .block_erase = spi_block_erase_60,
3702 }, {
3703 .eraseblocks = { {512 * 1024, 1} },
3704 .block_erase = spi_block_erase_c7,
3705 },
3706 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003707 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003708 .read = spi_chip_read,
3709 },
3710
3711 {
3712 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003713 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003714 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003715 .manufacture_id = SST_ID,
3716 .model_id = SST_25VF080B,
3717 .total_size = 1024,
3718 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003719 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003720 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003721 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003722 .erase = NULL,
3723 .block_erasers =
3724 {
3725 {
3726 .eraseblocks = { {4 * 1024, 256} },
3727 .block_erase = spi_block_erase_20,
3728 }, {
3729 .eraseblocks = { {32 * 1024, 32} },
3730 .block_erase = spi_block_erase_52,
3731 }, {
3732 .eraseblocks = { {64 * 1024, 16} },
3733 .block_erase = spi_block_erase_d8,
3734 }, {
3735 .eraseblocks = { {1024 * 1024, 1} },
3736 .block_erase = spi_block_erase_60,
3737 }, {
3738 .eraseblocks = { {1024 * 1024, 1} },
3739 .block_erase = spi_block_erase_c7,
3740 },
3741 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003742 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003743 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003744 },
3745
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003746 {
3747 .vendor = "SST",
3748 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003749 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003750 .manufacture_id = SST_ID,
3751 .model_id = SST_28SF040,
3752 .total_size = 512,
3753 .page_size = 256,
3754 .tested = TEST_UNTESTED,
3755 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003756 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003757 .erase = erase_28sf040,
3758 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003759 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003760 },
3761
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003762 {
3763 .vendor = "SST",
3764 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003765 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003766 .manufacture_id = SST_ID,
3767 .model_id = SST_29EE010,
3768 .total_size = 128,
3769 .page_size = 128,
3770 .tested = TEST_OK_PREW,
3771 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003772 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003773 .erase = erase_chip_jedec,
3774 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003775 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003776 },
3777
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003778 {
3779 .vendor = "SST",
3780 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003781 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003782 .manufacture_id = SST_ID,
3783 .model_id = SST_29LE010,
3784 .total_size = 128,
3785 .page_size = 128,
3786 .tested = TEST_UNTESTED,
3787 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003788 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003789 .erase = erase_chip_jedec,
3790 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003791 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003792 },
3793
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003794 {
3795 .vendor = "SST",
3796 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003797 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003798 .manufacture_id = SST_ID,
3799 .model_id = SST_29EE020A,
3800 .total_size = 256,
3801 .page_size = 128,
Peter Stugeb27d0a22009-02-22 21:07:28 +00003802 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003803 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003804 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003805 .erase = erase_chip_jedec,
3806 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003807 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003808 },
3809
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003810 {
3811 .vendor = "SST",
3812 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003813 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003814 .manufacture_id = SST_ID,
3815 .model_id = SST_29LE020,
3816 .total_size = 256,
3817 .page_size = 128,
3818 .tested = TEST_UNTESTED,
3819 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003820 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003821 .erase = erase_chip_jedec,
3822 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003823 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003824 },
3825
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003826 {
3827 .vendor = "SST",
3828 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003829 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003830 .manufacture_id = SST_ID,
3831 .model_id = SST_39SF010,
3832 .total_size = 128,
3833 .page_size = 4096,
3834 .tested = TEST_OK_PREW,
3835 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003836 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003837 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003838 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003839 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003840 },
3841
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003842 {
3843 .vendor = "SST",
3844 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003845 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003846 .manufacture_id = SST_ID,
3847 .model_id = SST_39SF020,
3848 .total_size = 256,
3849 .page_size = 4096,
3850 .tested = TEST_OK_PREW,
3851 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003852 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003853 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003854 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003855 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003856 },
3857
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003858 {
3859 .vendor = "SST",
3860 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003861 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003862 .manufacture_id = SST_ID,
3863 .model_id = SST_39SF040,
3864 .total_size = 512,
3865 .page_size = 4096,
3866 .tested = TEST_OK_PREW,
3867 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003868 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003869 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003870 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003871 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003872 },
3873
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003874 {
3875 .vendor = "SST",
3876 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00003877 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003878 .manufacture_id = SST_ID,
3879 .model_id = SST_39VF512,
3880 .total_size = 64,
3881 .page_size = 4096,
Rudolf Mareke186da62009-05-17 18:24:24 +00003882 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003883 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003884 .probe_timing = 1, /* 150 ns*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003885 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003886 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003887 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003888 },
3889
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003890 {
3891 .vendor = "SST",
3892 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003893 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003894 .manufacture_id = SST_ID,
3895 .model_id = SST_39VF010,
3896 .total_size = 128,
3897 .page_size = 4096,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003898 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003899 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003900 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003901 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003902 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003903 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003904 },
3905
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003906 {
3907 .vendor = "SST",
3908 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003909 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003910 .manufacture_id = SST_ID,
3911 .model_id = SST_39VF020,
3912 .total_size = 256,
3913 .page_size = 4096,
3914 .tested = TEST_OK_PREW,
3915 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003916 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003917 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003918 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003919 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003920 },
3921
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003922 {
3923 .vendor = "SST",
3924 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003925 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003926 .manufacture_id = SST_ID,
3927 .model_id = SST_39VF040,
3928 .total_size = 512,
3929 .page_size = 4096,
3930 .tested = TEST_OK_PROBE,
3931 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003932 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003933 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003934 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003935 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00003936 },
FENG yu ningff692fb2008-12-08 18:15:10 +00003937
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003938 {
3939 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00003940 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00003941 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003942 .manufacture_id = SST_ID,
3943 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00003944 .total_size = 1024,
3945 .page_size = 4096,
3946 .tested = TEST_UNTESTED,
3947 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003948 .probe_timing = 1, /* 150 ns */
Peter Stuge8440cc02009-01-25 23:55:12 +00003949 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003950 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003951 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00003952 },
3953
3954 {
3955 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003956 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003957 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003958 .manufacture_id = SST_ID,
3959 .model_id = SST_49LF002A,
3960 .total_size = 256,
3961 .page_size = 16 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003962 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003963 .tested = TEST_OK_PREW,
3964 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003965 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003966 .erase = erase_sst_fwhub,
3967 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003968 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003969 },
3970
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003971 {
3972 .vendor = "SST",
3973 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003974 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003975 .manufacture_id = SST_ID,
3976 .model_id = SST_49LF003A,
3977 .total_size = 384,
3978 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003979 .feature_bits = FEATURE_REGISTERMAP,
Peter Lemenkov45835c42009-09-25 01:09:18 +00003980 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003981 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003982 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003983 .erase = erase_sst_fwhub,
3984 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003985 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003986 },
3987
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003988 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00003989 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
3990 * and is only honored for 64k block erase, but not 4k sector erase.
3991 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003992 .vendor = "SST",
3993 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003994 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003995 .manufacture_id = SST_ID,
3996 .model_id = SST_49LF004A,
3997 .total_size = 512,
3998 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003999 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004000 .tested = TEST_OK_PREW,
4001 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004002 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004003 .erase = NULL,
4004 .block_erasers =
4005 {
4006 {
4007 .eraseblocks = { {4 * 1024, 128} },
4008 .block_erase = erase_sector_jedec, /* missing unlock */
4009 }, {
4010 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00004011 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004012 }, {
4013 .eraseblocks = { {512 * 1024, 1} },
4014 .block_erase = NULL, /* AA 55 80 AA 55 10, only in PP mode */
4015 },
4016 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004017 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004018 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004019 },
4020
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004021 {
4022 .vendor = "SST",
4023 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004024 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004025 .manufacture_id = SST_ID,
4026 .model_id = SST_49LF004C,
4027 .total_size = 512,
4028 .page_size = 4 * 1024,
4029 .tested = TEST_UNTESTED,
4030 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004031 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004032 .erase = erase_49lfxxxc,
4033 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004034 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004035 },
4036
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004037 {
4038 .vendor = "SST",
4039 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004040 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004041 .manufacture_id = SST_ID,
4042 .model_id = SST_49LF008A,
4043 .total_size = 1024,
4044 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004045 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004046 .tested = TEST_OK_PREW,
4047 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004048 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004049 .erase = erase_sst_fwhub,
4050 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004051 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004052 },
4053
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004054 {
4055 .vendor = "SST",
4056 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004057 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004058 .manufacture_id = SST_ID,
4059 .model_id = SST_49LF008C,
4060 .total_size = 1024,
4061 .page_size = 4 * 1024,
4062 .tested = TEST_UNTESTED,
4063 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004064 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004065 .erase = erase_49lfxxxc,
4066 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004067 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004068 },
4069
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004070 {
4071 .vendor = "SST",
4072 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004073 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004074 .manufacture_id = SST_ID,
4075 .model_id = SST_49LF016C,
4076 .total_size = 2048,
4077 .page_size = 4 * 1024,
4078 .tested = TEST_OK_PREW,
4079 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004080 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004081 .erase = erase_49lfxxxc,
4082 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004083 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004084 },
4085
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004086 {
4087 .vendor = "SST",
4088 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004089 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004090 .manufacture_id = SST_ID,
4091 .model_id = SST_49LF020,
4092 .total_size = 256,
4093 .page_size = 16 * 1024,
4094 .tested = TEST_OK_PR,
4095 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004096 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004097 .erase = erase_49lf040,
4098 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004099 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004100 },
4101
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004102 {
4103 .vendor = "SST",
4104 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004105 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004106 .manufacture_id = SST_ID,
4107 .model_id = SST_49LF020A,
4108 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004109 .page_size = 4 * 1024,
Nils Jacobsc0252682009-09-23 21:58:34 +00004110 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004111 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004112 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004113 .erase = erase_49lf040,
4114 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004115 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004116 },
4117
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004118 {
4119 .vendor = "SST",
4120 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004121 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004122 .manufacture_id = SST_ID,
4123 .model_id = SST_49LF040,
4124 .total_size = 512,
4125 .page_size = 4096,
4126 .tested = TEST_OK_PREW,
4127 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004128 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004129 .erase = erase_49lf040,
4130 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004131 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004132 },
4133
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004134 {
4135 .vendor = "SST",
4136 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004137 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004138 .manufacture_id = SST_ID,
4139 .model_id = SST_49LF040B,
4140 .total_size = 512,
4141 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004142 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004143 .tested = TEST_OK_PREW,
4144 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004145 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004146 .erase = erase_sst_fwhub,
4147 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004148 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004149 },
4150
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004151 {
4152 .vendor = "SST",
4153 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004154 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004155 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004156 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004157 .total_size = 1024,
4158 .page_size = 4096,
4159 .tested = TEST_OK_PREW,
4160 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004161 .probe_timing = TIMING_FIXME,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004162 .erase = erase_49lf040,
4163 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004164 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004165 },
4166
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004167 {
4168 .vendor = "SST",
4169 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004170 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004171 .manufacture_id = SST_ID,
4172 .model_id = SST_49LF160C,
4173 .total_size = 2048,
4174 .page_size = 4 * 1024,
4175 .tested = TEST_OK_PREW,
4176 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004177 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004178 .erase = erase_49lfxxxc,
4179 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004180 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004181 },
4182
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004183 {
4184 .vendor = "ST",
4185 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004186 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004187 .manufacture_id = ST_ID,
4188 .model_id = ST_M25P05A,
4189 .total_size = 64,
4190 .page_size = 256,
4191 .tested = TEST_UNTESTED,
4192 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004193 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004194 .erase = NULL,
4195 .block_erasers =
4196 {
4197 {
4198 .eraseblocks = { {32 * 1024, 2} },
4199 .block_erase = spi_block_erase_d8,
4200 }, {
4201 .eraseblocks = { {64 * 1024, 1} },
4202 .block_erase = spi_block_erase_c7,
4203 }
4204 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004205 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004206 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004207 },
4208
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004209 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4210 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
4211 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
4212 * only is successful if RDID does not work.
4213 */
4214 {
4215 .vendor = "ST",
4216 .name = "M25P05.RES",
4217 .bustype = CHIP_BUSTYPE_SPI,
4218 .manufacture_id = ST_ID,
4219 .model_id = ST_M25P05_RES,
4220 .total_size = 64,
4221 .page_size = 256,
4222 .tested = TEST_UNTESTED,
4223 .probe = probe_spi_res,
4224 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004225 .erase = NULL,
4226 .block_erasers =
4227 {
4228 {
4229 .eraseblocks = { {32 * 1024, 2} },
4230 .block_erase = spi_block_erase_d8,
4231 }, {
4232 .eraseblocks = { {64 * 1024, 1} },
4233 .block_erase = spi_block_erase_c7,
4234 }
4235 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004236 .write = spi_chip_write_1, /* 128 */
4237 .read = spi_chip_read,
4238 },
4239
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004240 {
4241 .vendor = "ST",
4242 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004243 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004244 .manufacture_id = ST_ID,
4245 .model_id = ST_M25P10A,
4246 .total_size = 128,
4247 .page_size = 256,
4248 .tested = TEST_UNTESTED,
4249 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004250 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004251 .erase = NULL,
4252 .block_erasers =
4253 {
4254 {
4255 .eraseblocks = { {32 * 1024, 4} },
4256 .block_erase = spi_block_erase_d8,
4257 }, {
4258 .eraseblocks = { {128 * 1024, 1} },
4259 .block_erase = spi_block_erase_c7,
4260 }
4261 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004262 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004263 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004264 },
4265
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004266 /* The ST M25P10 has the same problem as the M25P05. */
4267 {
4268 .vendor = "ST",
4269 .name = "M25P10.RES",
4270 .bustype = CHIP_BUSTYPE_SPI,
4271 .manufacture_id = ST_ID,
4272 .model_id = ST_M25P10_RES,
4273 .total_size = 128,
4274 .page_size = 256,
4275 .tested = TEST_UNTESTED,
4276 .probe = probe_spi_res,
4277 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004278 .erase = NULL,
4279 .block_erasers =
4280 {
4281 {
4282 .eraseblocks = { {32 * 1024, 4} },
4283 .block_erase = spi_block_erase_d8,
4284 }, {
4285 .eraseblocks = { {128 * 1024, 1} },
4286 .block_erase = spi_block_erase_c7,
4287 }
4288 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004289 .write = spi_chip_write_1, /* 128 */
4290 .read = spi_chip_read,
4291 },
4292
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004293 {
4294 .vendor = "ST",
4295 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004296 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004297 .manufacture_id = ST_ID,
4298 .model_id = ST_M25P20,
4299 .total_size = 256,
4300 .page_size = 256,
4301 .tested = TEST_UNTESTED,
4302 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004303 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004304 .erase = NULL,
4305 .block_erasers =
4306 {
4307 {
4308 .eraseblocks = { {64 * 1024, 4} },
4309 .block_erase = spi_block_erase_d8,
4310 }, {
4311 .eraseblocks = { {256 * 1024, 1} },
4312 .block_erase = spi_block_erase_c7,
4313 }
4314 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004315 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004316 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004317 },
4318
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004319 {
4320 .vendor = "ST",
4321 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004322 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004323 .manufacture_id = ST_ID,
4324 .model_id = ST_M25P40,
4325 .total_size = 512,
4326 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004327 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004328 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004329 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004330 .erase = NULL,
4331 .block_erasers =
4332 {
4333 {
4334 .eraseblocks = { {64 * 1024, 8} },
4335 .block_erase = spi_block_erase_d8,
4336 }, {
4337 .eraseblocks = { {512 * 1024, 1} },
4338 .block_erase = spi_block_erase_c7,
4339 }
4340 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004341 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004342 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004343 },
4344
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004345 {
4346 .vendor = "ST",
4347 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004348 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004349 .manufacture_id = ST_ID,
4350 .model_id = ST_M25P40_RES,
4351 .total_size = 512,
4352 .page_size = 256,
4353 .tested = TEST_UNTESTED,
4354 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004355 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004356 .erase = NULL,
4357 .block_erasers =
4358 {
4359 {
4360 .eraseblocks = { {64 * 1024, 8} },
4361 .block_erase = spi_block_erase_d8,
4362 }, {
4363 .eraseblocks = { {512 * 1024, 1} },
4364 .block_erase = spi_block_erase_c7,
4365 }
4366 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004367 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004368 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004369 },
4370
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004371 {
4372 .vendor = "ST",
4373 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004374 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004375 .manufacture_id = ST_ID,
4376 .model_id = ST_M25P80,
4377 .total_size = 1024,
4378 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004379 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004380 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004381 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004382 .erase = NULL,
4383 .block_erasers =
4384 {
4385 {
4386 .eraseblocks = { {64 * 1024, 16} },
4387 .block_erase = spi_block_erase_d8,
4388 }, {
4389 .eraseblocks = { {1024 * 1024, 1} },
4390 .block_erase = spi_block_erase_c7,
4391 }
4392 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004393 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004394 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004395 },
4396
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004397 {
4398 .vendor = "ST",
4399 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004400 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004401 .manufacture_id = ST_ID,
4402 .model_id = ST_M25P16,
4403 .total_size = 2048,
4404 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004405 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004406 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004407 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004408 .erase = NULL,
4409 .block_erasers =
4410 {
4411 {
4412 .eraseblocks = { {64 * 1024, 32} },
4413 .block_erase = spi_block_erase_d8,
4414 }, {
4415 .eraseblocks = { {2 * 1024 * 1024, 1} },
4416 .block_erase = spi_block_erase_c7,
4417 }
4418 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004419 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004420 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004421 },
4422
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004423 {
4424 .vendor = "ST",
4425 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004426 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004427 .manufacture_id = ST_ID,
4428 .model_id = ST_M25P32,
4429 .total_size = 4096,
4430 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004431 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004432 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004433 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004434 .erase = NULL,
4435 .block_erasers =
4436 {
4437 {
4438 .eraseblocks = { {64 * 1024, 64} },
4439 .block_erase = spi_block_erase_d8,
4440 }, {
4441 .eraseblocks = { {4 * 1024 * 1024, 1} },
4442 .block_erase = spi_block_erase_c7,
4443 }
4444 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004445 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004446 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004447 },
4448
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004449 {
4450 .vendor = "ST",
4451 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004452 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004453 .manufacture_id = ST_ID,
4454 .model_id = ST_M25P64,
4455 .total_size = 8192,
4456 .page_size = 256,
4457 .tested = TEST_UNTESTED,
4458 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004459 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004460 .erase = NULL,
4461 .block_erasers =
4462 {
4463 {
4464 .eraseblocks = { {64 * 1024, 128} },
4465 .block_erase = spi_block_erase_d8,
4466 }, {
4467 .eraseblocks = { {8 * 1024 * 1024, 1} },
4468 .block_erase = spi_block_erase_c7,
4469 }
4470 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004471 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004472 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004473 },
4474
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004475 {
4476 .vendor = "ST",
4477 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004478 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004479 .manufacture_id = ST_ID,
4480 .model_id = ST_M25P128,
4481 .total_size = 16384,
4482 .page_size = 256,
4483 .tested = TEST_UNTESTED,
4484 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004485 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004486 .erase = NULL,
4487 .block_erasers =
4488 {
4489 {
4490 .eraseblocks = { {256 * 1024, 64} },
4491 .block_erase = spi_block_erase_d8,
4492 }, {
4493 .eraseblocks = { {16 * 1024 * 1024, 1} },
4494 .block_erase = spi_block_erase_c7,
4495 }
4496 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004497 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004498 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004499 },
4500
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004501 {
4502 .vendor = "ST",
4503 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004504 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004505 .manufacture_id = ST_ID,
4506 .model_id = ST_M29F002B,
4507 .total_size = 256,
4508 .page_size = 64 * 1024,
4509 .tested = TEST_UNTESTED,
4510 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004511 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004512 .erase = NULL,
4513 .block_erasers =
4514 {
4515 {
4516 .eraseblocks = {
4517 {16 * 1024, 1},
4518 {8 * 1024, 2},
4519 {32 * 1024, 1},
4520 {64 * 1024, 3},
4521 },
4522 .block_erase = erase_sector_jedec,
4523 }, {
4524 .eraseblocks = { {256 * 1024, 1} },
4525 .block_erase = erase_chip_block_jedec,
4526 }
4527 },
Peter Stugeaf8ffac2009-01-26 06:42:02 +00004528 .write = write_m29f002b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004529 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004530 },
4531
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004532 {
4533 .vendor = "ST",
4534 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004535 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004536 .manufacture_id = ST_ID,
4537 .model_id = ST_M29F002T,
4538 .total_size = 256,
4539 .page_size = 64 * 1024,
Sean Nelson56358aa2010-01-19 16:08:51 +00004540 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004541 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004542 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004543 .erase = NULL,
4544 .block_erasers =
4545 {
4546 {
4547 .eraseblocks = {
4548 {64 * 1024, 3},
4549 {32 * 1024, 1},
4550 {8 * 1024, 2},
4551 {16 * 1024, 1},
4552 },
4553 .block_erase = erase_sector_jedec,
4554 }, {
4555 .eraseblocks = { {256 * 1024, 1} },
4556 .block_erase = erase_chip_block_jedec,
4557 }
4558 },
Peter Stugeaf8ffac2009-01-26 06:42:02 +00004559 .write = write_m29f002t,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004560 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004561 },
4562
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004563 {
4564 .vendor = "ST",
4565 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004566 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004567 .manufacture_id = ST_ID,
4568 .model_id = ST_M29F040B,
4569 .total_size = 512,
4570 .page_size = 64 * 1024,
Sean Nelson56358aa2010-01-19 16:08:51 +00004571 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004572 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004573 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004574 .erase = NULL,
4575 .block_erasers =
4576 {
4577 {
4578 .eraseblocks = { {64 * 1024, 8}, },
4579 .block_erase = erase_sector_29f040b,
4580 }, {
4581 .eraseblocks = { {512 * 1024, 1} },
4582 .block_erase = erase_chip_29f040b,
4583 }
4584 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004585 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004586 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004587 },
4588
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004589 {
4590 .vendor = "ST",
4591 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004592 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004593 .manufacture_id = ST_ID,
4594 .model_id = ST_M29F400BT,
4595 .total_size = 512,
4596 .page_size = 64 * 1024,
4597 .tested = TEST_UNTESTED,
4598 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004599 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004600 .erase = NULL,
4601 .block_erasers =
4602 {
4603 {
4604 .eraseblocks = {
4605 {64 * 1024, 7},
4606 {32 * 1024, 1},
4607 {8 * 1024, 2},
4608 {16 * 1024, 1},
4609 },
4610 .block_erase = block_erase_m29f400bt,
4611 }, {
4612 .eraseblocks = { {512 * 1024, 1} },
4613 .block_erase = block_erase_chip_m29f400bt,
4614 }
4615 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004616 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004617 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004618 },
4619
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004620 {
4621 .vendor = "ST",
4622 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004623 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004624 .manufacture_id = ST_ID,
4625 .model_id = ST_M29W010B,
4626 .total_size = 128,
4627 .page_size = 16 * 1024,
4628 .tested = TEST_UNTESTED,
4629 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004630 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004631 .erase = NULL,
4632 .block_erasers =
4633 {
4634 {
4635 .eraseblocks = { {16 * 1024, 8}, },
4636 .block_erase = erase_sector_jedec,
4637 }, {
4638 .eraseblocks = { {128 * 1024, 1} },
4639 .block_erase = erase_chip_block_jedec,
4640 }
4641 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004642 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004643 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004644 },
4645
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004646 {
4647 .vendor = "ST",
4648 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004649 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004650 .manufacture_id = ST_ID,
4651 .model_id = ST_M29W040B,
4652 .total_size = 512,
4653 .page_size = 64 * 1024,
4654 .tested = TEST_UNTESTED,
4655 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004656 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004657 .erase = NULL,
4658 .block_erasers =
4659 {
4660 {
4661 .eraseblocks = { {64 * 1024, 8}, },
4662 .block_erase = erase_sector_jedec,
4663 }, {
4664 .eraseblocks = { {512 * 1024, 1} },
4665 .block_erase = erase_chip_block_jedec,
4666 }
4667 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004668 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004669 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004670 },
4671
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004672 {
4673 .vendor = "ST",
4674 .name = "M50FLW040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004675 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004676 .manufacture_id = ST_ID,
4677 .model_id = ST_M50FLW040A,
4678 .total_size = 512,
4679 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004680 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004681 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004682 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004683 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004684 .erase = NULL,
4685 .block_erasers =
4686 {
4687 {
4688 .eraseblocks = { {64 * 1024, 8}, },
4689 .block_erase = erase_block_stm50flw0x0x,
4690 }, {
4691 .eraseblocks = { {512 * 1024, 1} },
4692 .block_erase = erase_chip_stm50flw0x0x,
4693 }
4694 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004695 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004696 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004697 },
4698
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004699 {
4700 .vendor = "ST",
4701 .name = "M50FLW040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004702 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004703 .manufacture_id = ST_ID,
4704 .model_id = ST_M50FLW040B,
4705 .total_size = 512,
4706 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004707 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004708 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004709 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004710 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004711 .erase = NULL,
4712 .block_erasers =
4713 {
4714 {
4715 .eraseblocks = { {64 * 1024, 8}, },
4716 .block_erase = erase_block_stm50flw0x0x,
4717 }, {
4718 .eraseblocks = { {512 * 1024, 1} },
4719 .block_erase = erase_chip_stm50flw0x0x,
4720 }
4721 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004722 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004723 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004724 },
4725
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004726 {
4727 .vendor = "ST",
4728 .name = "M50FLW080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004729 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004730 .manufacture_id = ST_ID,
4731 .model_id = ST_M50FLW080A,
4732 .total_size = 1024,
4733 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004734 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson56358aa2010-01-19 16:08:51 +00004735 .tested = TEST_OK_PRW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004736 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004737 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004738 .erase = NULL,
4739 .block_erasers =
4740 {
4741 {
4742 .eraseblocks = { {64 * 1024, 16}, },
4743 .block_erase = erase_block_stm50flw0x0x,
4744 }, {
4745 .eraseblocks = { {1024 * 1024, 1} },
4746 .block_erase = erase_chip_stm50flw0x0x,
4747 }
4748 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004749 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004750 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004751 },
4752
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004753 {
4754 .vendor = "ST",
4755 .name = "M50FLW080B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004756 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004757 .manufacture_id = ST_ID,
4758 .model_id = ST_M50FLW080B,
4759 .total_size = 1024,
4760 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004761 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004762 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004763 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004764 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004765 .erase = NULL,
4766 .block_erasers =
4767 {
4768 {
4769 .eraseblocks = { {64 * 1024, 16}, },
4770 .block_erase = erase_block_stm50flw0x0x,
4771 }, {
4772 .eraseblocks = { {1024 * 1024, 1} },
4773 .block_erase = erase_chip_stm50flw0x0x,
4774 }
4775 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004776 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004777 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004778 },
4779
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004780 {
4781 .vendor = "ST",
4782 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00004783 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004784 .manufacture_id = ST_ID,
4785 .model_id = ST_M50FW002,
4786 .total_size = 256,
4787 .page_size = 64 * 1024,
4788 .tested = TEST_UNTESTED,
4789 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004790 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004791 .erase = NULL,
Sean Nelson56358aa2010-01-19 16:08:51 +00004792 .block_erasers =
4793 {
4794 {
4795 .eraseblocks = {
4796 {64 * 1024, 3},
4797 {32 * 1024, 1},
4798 {8 * 1024, 2},
4799 {16 * 1024, 1},
4800 },
4801 .block_erase = erase_block_stm50flw0x0x,
4802 }, {
4803 .eraseblocks = { {256 * 1024, 1} },
4804 .block_erase = erase_chip_stm50flw0x0x,
4805 }
4806 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004807 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004808 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004809 },
4810
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004811 {
4812 .vendor = "ST",
4813 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00004814 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004815 .manufacture_id = ST_ID,
4816 .model_id = ST_M50FW016,
4817 .total_size = 2048,
4818 .page_size = 64 * 1024,
4819 .tested = TEST_UNTESTED,
4820 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004821 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004822 .erase = NULL,
4823 .block_erasers =
4824 {
4825 {
4826 .eraseblocks = { {64 * 1024, 32}, },
4827 .block_erase = erase_block_stm50flw0x0x,
4828 }, {
4829 .eraseblocks = { {2 * 1024 * 1024, 1} },
4830 .block_erase = erase_chip_stm50flw0x0x,
4831 }
4832 },
4833 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004834 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004835 },
4836
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004837 {
4838 .vendor = "ST",
4839 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004840 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004841 .manufacture_id = ST_ID,
4842 .model_id = ST_M50FW040,
4843 .total_size = 512,
4844 .page_size = 64 * 1024,
Sean Nelson56358aa2010-01-19 16:08:51 +00004845 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004846 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004847 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004848 .erase = NULL,
4849 .block_erasers =
4850 {
4851 {
4852 .eraseblocks = { {64 * 1024, 8}, },
4853 .block_erase = erase_block_stm50flw0x0x,
4854 }, {
4855 .eraseblocks = { {512 * 1024, 1} },
4856 .block_erase = erase_chip_stm50flw0x0x,
4857 }
4858 },
4859 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004860 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004861 },
4862
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004863 {
4864 .vendor = "ST",
4865 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004866 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004867 .manufacture_id = ST_ID,
4868 .model_id = ST_M50FW080,
4869 .total_size = 1024,
4870 .page_size = 64 * 1024,
Sean Nelson56358aa2010-01-19 16:08:51 +00004871 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004872 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004873 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004874 .erase = NULL,
4875 .block_erasers =
4876 {
4877 {
4878 .eraseblocks = { {64 * 1024, 16}, },
4879 .block_erase = erase_block_stm50flw0x0x,
4880 }, {
4881 .eraseblocks = { {1024 * 1024, 1} },
4882 .block_erase = erase_chip_stm50flw0x0x,
4883 }
4884 },
4885 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004886 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004887 },
4888
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004889 {
4890 .vendor = "ST",
4891 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00004892 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004893 .manufacture_id = ST_ID,
4894 .model_id = ST_M50LPW116,
4895 .total_size = 2048,
4896 .page_size = 64 * 1024,
4897 .tested = TEST_UNTESTED,
4898 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004899 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004900 .erase = NULL,
4901 .block_erasers =
4902 {
4903 {
4904 .eraseblocks = {
4905 {4 * 1024, 16},
4906 {64 * 1024, 30},
4907 {32 * 1024, 1},
4908 {8 * 1024, 2},
4909 {16 * 1024, 1},
4910 },
4911 .block_erase = erase_block_stm50flw0x0x,
4912 }, {
4913 .eraseblocks = { {2 * 1024 * 1024, 1} },
4914 .block_erase = erase_chip_block_jedec,
4915 }
4916 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004917 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004918 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004919 },
4920
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004921 {
4922 .vendor = "SyncMOS",
4923 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00004924 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004925 .manufacture_id = SYNCMOS_ID,
4926 .model_id = S29C31004T,
4927 .total_size = 512,
4928 .page_size = 128,
4929 .tested = TEST_UNTESTED,
4930 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004931 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004932 .erase = NULL,
4933 .block_erasers =
4934 {
4935 {
4936 .eraseblocks = { {1 * 1024, 512} },
4937 .block_erase = erase_sector_jedec,
4938 }, {
4939 .eraseblocks = { {512 * 1024, 1} },
4940 .block_erase = erase_chip_block_jedec,
4941 },
4942 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004943 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004944 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004945 },
4946
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004947 {
4948 .vendor = "SyncMOS",
4949 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00004950 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004951 .manufacture_id = SYNCMOS_ID,
4952 .model_id = S29C51001T,
4953 .total_size = 128,
4954 .page_size = 128,
4955 .tested = TEST_UNTESTED,
4956 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004957 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004958 .erase = NULL,
4959 .block_erasers =
4960 {
4961 {
4962 .eraseblocks = { {512, 256} },
4963 .block_erase = erase_sector_jedec,
4964 }, {
4965 .eraseblocks = { {128 * 1024, 1} },
4966 .block_erase = erase_chip_block_jedec,
4967 },
4968 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004969 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004970 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004971 },
4972
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004973 {
4974 .vendor = "SyncMOS",
4975 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00004976 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004977 .manufacture_id = SYNCMOS_ID,
4978 .model_id = S29C51002T,
4979 .total_size = 256,
4980 .page_size = 128,
Sean Nelson56358aa2010-01-19 16:08:51 +00004981 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004982 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004983 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004984 .erase = NULL,
4985 .block_erasers =
4986 {
4987 {
4988 .eraseblocks = { {512, 512} },
4989 .block_erase = erase_sector_jedec,
4990 }, {
4991 .eraseblocks = { {256 * 1024, 1} },
4992 .block_erase = erase_chip_block_jedec,
4993 },
4994 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004995 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004996 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004997 },
4998
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004999 {
5000 .vendor = "SyncMOS",
5001 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005002 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005003 .manufacture_id = SYNCMOS_ID,
5004 .model_id = S29C51004T,
5005 .total_size = 512,
5006 .page_size = 128,
5007 .tested = TEST_UNTESTED,
5008 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005009 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005010 .erase = NULL,
5011 .block_erasers =
5012 {
5013 {
5014 .eraseblocks = { {1 * 1024, 496} },
5015 .block_erase = erase_sector_jedec,
5016 }, {
5017 .eraseblocks = { {512 * 1024, 1} },
5018 .block_erase = erase_chip_block_jedec,
5019 },
5020 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005021 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005022 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005023 },
5024
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005025 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005026 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005027 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005028 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005029 .manufacture_id = TI_OLD_ID,
5030 .model_id = TI_TMS29F002RB,
5031 .total_size = 256,
5032 .page_size = 16384, /* Non-uniform sectors */
5033 .tested = TEST_UNTESTED,
5034 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005035 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005036 .erase = NULL,
Sean Nelson56358aa2010-01-19 16:08:51 +00005037 .block_erasers =
5038 {
5039 {
5040 .eraseblocks = {
5041 {16 * 1024, 1},
5042 {8 * 1024, 2},
5043 {32 * 1024, 1},
5044 {64 * 1024, 3},
5045 },
5046 .block_erase = erase_sector_jedec,
5047 }, {
5048 .eraseblocks = { {256 * 1024, 1} },
5049 .block_erase = erase_chip_block_jedec,
5050 },
5051 },
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005052 .write = NULL,
5053 .read = read_memmapped,
5054 },
5055
5056 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005057 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005058 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005059 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005060 .manufacture_id = TI_OLD_ID,
5061 .model_id = TI_TMS29F002RT,
5062 .total_size = 256,
5063 .page_size = 16384, /* Non-uniform sectors */
5064 .tested = TEST_UNTESTED,
5065 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005066 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005067 .erase = NULL,
Sean Nelson56358aa2010-01-19 16:08:51 +00005068 .block_erasers =
5069 {
5070 {
5071 .eraseblocks = {
5072 {64 * 1024, 3},
5073 {32 * 1024, 1},
5074 {8 * 1024, 2},
5075 {16 * 1024, 1},
5076 },
5077 .block_erase = erase_sector_jedec,
5078 }, {
5079 .eraseblocks = { {256 * 1024, 1} },
5080 .block_erase = erase_chip_block_jedec,
5081 },
5082 },
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005083 .write = NULL,
5084 .read = read_memmapped,
5085 },
5086
5087 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005088 .vendor = "Winbond",
5089 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005090 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005091 .manufacture_id = WINBOND_NEX_ID,
5092 .model_id = W_25X10,
5093 .total_size = 128,
5094 .page_size = 256,
5095 .tested = TEST_UNTESTED,
5096 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005097 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005098 .erase = NULL,
5099 .block_erasers =
5100 {
5101 {
5102 .eraseblocks = { {4 * 1024, 32} },
5103 .block_erase = spi_block_erase_20,
5104 }, {
5105 .eraseblocks = { {32 * 1024, 4} },
5106 .block_erase = spi_block_erase_52,
5107 }, {
5108 .eraseblocks = { {64 * 1024, 2} },
5109 .block_erase = spi_block_erase_d8,
5110 }, {
5111 .eraseblocks = { {128 * 1024, 1} },
5112 .block_erase = spi_block_erase_60,
5113 }, {
5114 .eraseblocks = { {128 * 1024, 1} },
5115 .block_erase = spi_block_erase_c7,
5116 }
5117 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005118 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005119 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005120 },
5121
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005122 {
5123 .vendor = "Winbond",
5124 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005125 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005126 .manufacture_id = WINBOND_NEX_ID,
5127 .model_id = W_25X20,
5128 .total_size = 256,
5129 .page_size = 256,
5130 .tested = TEST_UNTESTED,
5131 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005132 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005133 .erase = NULL,
5134 .block_erasers =
5135 {
5136 {
5137 .eraseblocks = { {4 * 1024, 64} },
5138 .block_erase = spi_block_erase_20,
5139 }, {
5140 .eraseblocks = { {32 * 1024, 8} },
5141 .block_erase = spi_block_erase_52,
5142 }, {
5143 .eraseblocks = { {64 * 1024, 4} },
5144 .block_erase = spi_block_erase_d8,
5145 }, {
5146 .eraseblocks = { {256 * 1024, 1} },
5147 .block_erase = spi_block_erase_60,
5148 }, {
5149 .eraseblocks = { {256 * 1024, 1} },
5150 .block_erase = spi_block_erase_c7,
5151 }
5152 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005153 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005154 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005155 },
5156
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005157 {
5158 .vendor = "Winbond",
5159 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005160 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005161 .manufacture_id = WINBOND_NEX_ID,
5162 .model_id = W_25X40,
5163 .total_size = 512,
5164 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005165 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005166 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005167 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005168 .erase = NULL,
5169 .block_erasers =
5170 {
5171 {
5172 .eraseblocks = { {4 * 1024, 128} },
5173 .block_erase = spi_block_erase_20,
5174 }, {
5175 .eraseblocks = { {32 * 1024, 16} },
5176 .block_erase = spi_block_erase_52,
5177 }, {
5178 .eraseblocks = { {64 * 1024, 8} },
5179 .block_erase = spi_block_erase_d8,
5180 }, {
5181 .eraseblocks = { {512 * 1024, 1} },
5182 .block_erase = spi_block_erase_60,
5183 }, {
5184 .eraseblocks = { {512 * 1024, 1} },
5185 .block_erase = spi_block_erase_c7,
5186 }
5187 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005188 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005189 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005190 },
5191
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005192 {
5193 .vendor = "Winbond",
5194 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005195 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005196 .manufacture_id = WINBOND_NEX_ID,
5197 .model_id = W_25X80,
5198 .total_size = 1024,
5199 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005200 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005201 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005202 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005203 .erase = NULL,
5204 .block_erasers =
5205 {
5206 {
5207 .eraseblocks = { {4 * 1024, 256} },
5208 .block_erase = spi_block_erase_20,
5209 }, {
5210 .eraseblocks = { {32 * 1024, 32} },
5211 .block_erase = spi_block_erase_52,
5212 }, {
5213 .eraseblocks = { {64 * 1024, 16} },
5214 .block_erase = spi_block_erase_d8,
5215 }, {
5216 .eraseblocks = { {1024 * 1024, 1} },
5217 .block_erase = spi_block_erase_60,
5218 }, {
5219 .eraseblocks = { {1024 * 1024, 1} },
5220 .block_erase = spi_block_erase_c7,
5221 }
5222 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005223 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005224 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005225 },
5226
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005227 {
5228 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005229 .name = "W25x16",
5230 .bustype = CHIP_BUSTYPE_SPI,
5231 .manufacture_id = WINBOND_NEX_ID,
5232 .model_id = W_25X16,
5233 .total_size = 2048,
5234 .page_size = 256,
5235 .tested = TEST_OK_PR,
5236 .probe = probe_spi_rdid,
5237 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005238 .erase = NULL,
5239 .block_erasers =
5240 {
5241 {
5242 .eraseblocks = { {4 * 1024, 512} },
5243 .block_erase = spi_block_erase_20,
5244 }, {
5245 .eraseblocks = { {32 * 1024, 64} },
5246 .block_erase = spi_block_erase_52,
5247 }, {
5248 .eraseblocks = { {64 * 1024, 32} },
5249 .block_erase = spi_block_erase_d8,
5250 }, {
5251 .eraseblocks = { {2 * 1024 * 1024, 1} },
5252 .block_erase = spi_block_erase_60,
5253 }, {
5254 .eraseblocks = { {2 * 1024 * 1024, 1} },
5255 .block_erase = spi_block_erase_c7,
5256 }
5257 },
Hector Martina721ae22009-07-11 19:39:11 +00005258 .write = spi_chip_write_256,
5259 .read = spi_chip_read,
5260 },
5261
5262 {
5263 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005264 .name = "W25x32",
5265 .bustype = CHIP_BUSTYPE_SPI,
5266 .manufacture_id = WINBOND_NEX_ID,
5267 .model_id = W_25X32,
5268 .total_size = 4096,
5269 .page_size = 256,
5270 .tested = TEST_OK_PROBE,
5271 .probe = probe_spi_rdid,
5272 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005273 .erase = NULL,
5274 .block_erasers =
5275 {
5276 {
5277 .eraseblocks = { {4 * 1024, 1024} },
5278 .block_erase = spi_block_erase_20,
5279 }, {
5280 .eraseblocks = { {32 * 1024, 128} },
5281 .block_erase = spi_block_erase_52,
5282 }, {
5283 .eraseblocks = { {64 * 1024, 64} },
5284 .block_erase = spi_block_erase_d8,
5285 }, {
5286 .eraseblocks = { {4 * 1024 * 1024, 1} },
5287 .block_erase = spi_block_erase_60,
5288 }, {
5289 .eraseblocks = { {4 * 1024 * 1024, 1} },
5290 .block_erase = spi_block_erase_c7,
5291 }
5292 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005293 .write = spi_chip_write_256,
5294 .read = spi_chip_read,
5295 },
5296
5297 {
5298 .vendor = "Winbond",
5299 .name = "W25x64",
5300 .bustype = CHIP_BUSTYPE_SPI,
5301 .manufacture_id = WINBOND_NEX_ID,
5302 .model_id = W_25X64,
5303 .total_size = 8192,
5304 .page_size = 256,
5305 .tested = TEST_UNTESTED,
5306 .probe = probe_spi_rdid,
5307 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005308 .erase = NULL,
5309 .block_erasers =
5310 {
5311 {
5312 .eraseblocks = { {4 * 1024, 2048} },
5313 .block_erase = spi_block_erase_20,
5314 }, {
5315 .eraseblocks = { {32 * 1024, 256} },
5316 .block_erase = spi_block_erase_52,
5317 }, {
5318 .eraseblocks = { {64 * 1024, 128} },
5319 .block_erase = spi_block_erase_d8,
5320 }, {
5321 .eraseblocks = { {8 * 1024 * 1024, 1} },
5322 .block_erase = spi_block_erase_60,
5323 }, {
5324 .eraseblocks = { {8 * 1024 * 1024, 1} },
5325 .block_erase = spi_block_erase_c7,
5326 }
5327 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005328 .write = spi_chip_write_256,
5329 .read = spi_chip_read,
5330 },
5331
5332 {
5333 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005334 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005335 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005336 .manufacture_id = WINBOND_ID,
5337 .model_id = W_29C011,
5338 .total_size = 128,
5339 .page_size = 128,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005340 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005341 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005342 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005343 .erase = NULL,
5344 .block_erasers =
5345 {
5346 {
5347 .eraseblocks = { {128 * 1024, 1} },
5348 .block_erase = erase_chip_block_jedec,
5349 }
5350 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005351 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005352 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005353 },
5354
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005355 {
5356 .vendor = "Winbond",
5357 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005358 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005359 .manufacture_id = WINBOND_ID,
5360 .model_id = W_29C020C,
5361 .total_size = 256,
5362 .page_size = 128,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005363 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005364 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005365 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005366 .erase = NULL,
5367 .block_erasers =
5368 {
5369 {
5370 .eraseblocks = { {256 * 1024, 1} },
5371 .block_erase = erase_chip_block_jedec,
5372 }
5373 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005374 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005375 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005376 },
5377
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005378 {
5379 .vendor = "Winbond",
5380 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005381 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005382 .manufacture_id = WINBOND_ID,
5383 .model_id = W_29C040P,
5384 .total_size = 512,
5385 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005386 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005387 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005388 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005389 .erase = NULL,
5390 .block_erasers =
5391 {
5392 {
5393 .eraseblocks = { {512 * 1024, 1} },
5394 .block_erase = erase_chip_block_jedec,
5395 }
5396 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005397 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005398 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005399 },
5400
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005401 {
5402 .vendor = "Winbond",
5403 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005404 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005405 .manufacture_id = WINBOND_ID,
5406 .model_id = W_29C011,
5407 .total_size = 128,
5408 .page_size = 128,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005409 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005410 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005411 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005412 .erase = NULL,
5413 .block_erasers =
5414 {
5415 {
5416 .eraseblocks = { {128 * 1024, 1} },
5417 .block_erase = erase_chip_block_jedec,
5418 }
5419 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005420 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005421 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005422 },
5423
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005424 {
5425 .vendor = "Winbond",
5426 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005427 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005428 .manufacture_id = WINBOND_ID,
5429 .model_id = W_39V040A,
5430 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005431 .page_size = 64 * 1024,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005432 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005433 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005434 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005435 .erase = NULL,
5436 .block_erasers =
5437 {
5438 {
5439 .eraseblocks = { {64 * 1024, 8} },
5440 .block_erase = erase_sector_jedec,
5441 }, {
5442 .eraseblocks = { {512 * 1024, 1} },
5443 .block_erase = erase_chip_block_jedec,
5444 }
5445 },
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00005446 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005447 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005448 },
5449
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005450 {
5451 .vendor = "Winbond",
5452 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005453 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005454 .manufacture_id = WINBOND_ID,
5455 .model_id = W_39V040B,
5456 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005457 .page_size = 64 * 1024,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005458 .tested = TEST_OK_PR | TEST_BAD_WRITE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005459 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005460 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005461 .erase = NULL,
5462 .block_erasers =
5463 {
5464 {
5465 .eraseblocks = { {64 * 1024, 8} },
5466 .block_erase = erase_sector_jedec,
5467 }, {
5468 .eraseblocks = { {512 * 1024, 1} },
5469 .block_erase = erase_chip_block_jedec,
5470 }
5471 },
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00005472 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005473 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005474 },
5475
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005476 {
5477 .vendor = "Winbond",
5478 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005479 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005480 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005481 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005482 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005483 .page_size = 64 * 1024,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005484 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005485 .probe = probe_w39v040c,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005486 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005487 .erase = NULL, /* Was erase_w39v040c */
5488 .block_erasers =
5489 {
5490 {
5491 .eraseblocks = { {64 * 1024, 8} },
5492 .block_erase = erase_sector_jedec,
5493 }, {
5494 .eraseblocks = { {512 * 1024, 1} },
5495 .block_erase = erase_chip_block_jedec,
5496 }
5497 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005498 .write = write_w39v040c,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005499 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005500 },
5501
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005502 {
5503 .vendor = "Winbond",
5504 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005505 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005506 .manufacture_id = WINBOND_ID,
5507 .model_id = W_39V040FA,
5508 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005509 .page_size = 64 * 1024,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005510 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005511 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005512 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005513 .erase = NULL,
5514 .block_erasers =
5515 {
5516 {
5517 .eraseblocks = { {4 * 1024, 128} },
5518 .block_erase = erase_block_jedec,
5519 }, {
5520 .eraseblocks = { {64 * 1024, 8} },
5521 .block_erase = erase_sector_jedec,
5522 }, {
5523 .eraseblocks = { {512 * 1024, 1} },
5524 .block_erase = erase_chip_block_jedec,
5525 }
5526 },
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00005527 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005528 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005529 },
5530
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005531 {
5532 .vendor = "Winbond",
5533 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005534 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005535 .manufacture_id = WINBOND_ID,
5536 .model_id = W_39V080A,
5537 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005538 .page_size = 64 * 1024,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005539 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005540 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005541 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005542 .erase = NULL,
5543 .block_erasers =
5544 {
5545 {
5546 .eraseblocks = { {64 * 1024, 16} },
5547 .block_erase = erase_sector_jedec,
5548 }, {
5549 .eraseblocks = { {1024 * 1024, 1} },
5550 .block_erase = erase_chip_block_jedec,
5551 }
5552 },
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00005553 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005554 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005555 },
5556
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005557 {
5558 .vendor = "Winbond",
5559 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00005560 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005561 .manufacture_id = WINBOND_ID,
5562 .model_id = W_49F002U,
5563 .total_size = 256,
5564 .page_size = 128,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005565 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005566 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005567 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005568 .erase = NULL,
5569 .block_erasers =
5570 {
5571 {
5572 .eraseblocks = {
5573 {128 * 1024, 1},
5574 {96 * 1024, 1},
5575 {8 * 1024, 2},
5576 {16 * 1024, 1},
5577 },
5578 .block_erase = erase_sector_jedec,
5579 }, {
5580 .eraseblocks = { {256 * 1024, 1} },
5581 .block_erase = erase_chip_block_jedec,
5582 }
5583 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005584 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005585 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005586 },
5587
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005588 {
5589 .vendor = "Winbond",
5590 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005591 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005592 .manufacture_id = WINBOND_ID,
5593 .model_id = W_49V002A,
5594 .total_size = 256,
5595 .page_size = 128,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005596 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005597 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005598 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005599 .erase = NULL,
5600 .block_erasers =
5601 {
5602 {
5603 .eraseblocks = {
5604 {64 * 1024, 3},
5605 {32 * 1024, 1},
5606 {8 * 1024, 2},
5607 {16 * 1024, 1},
5608 },
5609 .block_erase = erase_sector_jedec,
5610 }, {
5611 .eraseblocks = { {256 * 1024, 1} },
5612 .block_erase = erase_chip_block_jedec,
5613 }
5614 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005615 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005616 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005617 },
5618
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005619 {
5620 .vendor = "Winbond",
5621 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005622 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005623 .manufacture_id = WINBOND_ID,
5624 .model_id = W_49V002FA,
5625 .total_size = 256,
5626 .page_size = 128,
5627 .tested = TEST_UNTESTED,
5628 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005629 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005630 .erase = NULL,
5631 .block_erasers =
5632 {
5633 {
5634 .eraseblocks = {
5635 {64 * 1024, 3},
5636 {32 * 1024, 1},
5637 {8 * 1024, 2},
5638 {16 * 1024, 1},
5639 },
5640 .block_erase = erase_sector_jedec,
5641 }, {
5642 .eraseblocks = { {256 * 1024, 1} },
5643 .block_erase = erase_chip_block_jedec,
5644 }
5645 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005646 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005647 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005648 },
5649
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005650 {
5651 .vendor = "Winbond",
5652 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005653 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005654 .manufacture_id = WINBOND_ID,
5655 .model_id = W_39V080FA,
5656 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005657 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005658 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005659 .tested = TEST_OK_PRW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005660 .probe = probe_jedec,
5661 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005662 .erase = NULL, /* Was erase_winbond_fwhub */
5663 .block_erasers =
5664 {
5665 {
5666 .eraseblocks = { {64 * 1024, 16}, },
5667 .block_erase = erase_sector_jedec,
5668 }, {
5669 .eraseblocks = { {1024 * 1024, 1} },
5670 .block_erase = erase_chip_block_jedec,
5671 }
5672 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005673 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005674 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005675 },
5676
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005677 {
5678 .vendor = "Winbond",
5679 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005680 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005681 .manufacture_id = WINBOND_ID,
5682 .model_id = W_39V080FA_DM,
5683 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005684 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005685 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005686 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005687 .probe = probe_jedec,
5688 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005689 .erase = NULL, /* Was erase_winbond_fwhub */
5690 .block_erasers =
5691 {
5692 {
5693 .eraseblocks = { {64 * 1024, 8}, },
5694 .block_erase = erase_sector_jedec,
5695 }, {
5696 .eraseblocks = { {512 * 1024, 1} },
5697 .block_erase = erase_chip_block_jedec,
5698 }
5699 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005700 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005701 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005702 },
5703
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005704 {
5705 .vendor = "Atmel",
5706 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005707 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005708 .manufacture_id = ATMEL_ID,
5709 .model_id = GENERIC_DEVICE_ID,
5710 .total_size = 0,
5711 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005712 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005713 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005714 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005715 .erase = NULL,
5716 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005717 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005718 },
5719
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005720 {
5721 .vendor = "EON",
5722 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005723 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005724 .manufacture_id = EON_ID_NOPREFIX,
5725 .model_id = GENERIC_DEVICE_ID,
5726 .total_size = 0,
5727 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005728 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005729 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005730 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005731 .erase = NULL,
5732 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005733 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005734 },
5735
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005736 {
5737 .vendor = "Macronix",
5738 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005739 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005740 .manufacture_id = MX_ID,
5741 .model_id = GENERIC_DEVICE_ID,
5742 .total_size = 0,
5743 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005744 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005745 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005746 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005747 .erase = NULL,
5748 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005749 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005750 },
5751
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005752 {
5753 .vendor = "PMC",
5754 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005755 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005756 .manufacture_id = PMC_ID,
5757 .model_id = GENERIC_DEVICE_ID,
5758 .total_size = 0,
5759 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005760 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005761 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005762 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005763 .erase = NULL,
5764 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005765 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005766 },
5767
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005768 {
5769 .vendor = "SST",
5770 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005771 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005772 .manufacture_id = SST_ID,
5773 .model_id = GENERIC_DEVICE_ID,
5774 .total_size = 0,
5775 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005776 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005777 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005778 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005779 .erase = NULL,
5780 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005781 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005782 },
5783
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005784 {
5785 .vendor = "ST",
5786 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005787 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005788 .manufacture_id = ST_ID,
5789 .model_id = GENERIC_DEVICE_ID,
5790 .total_size = 0,
5791 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005792 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005793 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005794 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005795 .erase = NULL,
5796 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005797 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005798 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00005799
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00005800 {
Sean Nelson118e1d62009-11-24 02:08:11 +00005801 .vendor = "Sanyo",
5802 .name = "unknown Sanyo SPI chip",
5803 .bustype = CHIP_BUSTYPE_SPI,
5804 .manufacture_id = SANYO_ID,
5805 .model_id = GENERIC_DEVICE_ID,
5806 .total_size = 0,
5807 .page_size = 256,
5808 .tested = TEST_BAD_PREW,
5809 .probe = probe_spi_rdid,
5810 .probe_timing = TIMING_ZERO,
5811 .erase = NULL,
5812 .write = NULL,
5813 .read = NULL,
5814 },
5815
5816 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00005817 .vendor = "Generic",
5818 .name = "unknown SPI chip (RDID)",
5819 .bustype = CHIP_BUSTYPE_SPI,
5820 .manufacture_id = GENERIC_MANUF_ID,
5821 .model_id = GENERIC_DEVICE_ID,
5822 .total_size = 0,
5823 .page_size = 256,
5824 .tested = TEST_BAD_PREW,
5825 .probe = probe_spi_rdid,
5826 .erase = NULL,
5827 .write = NULL,
5828 },
5829 {
5830 .vendor = "Generic",
5831 .name = "unknown SPI chip (REMS)",
5832 .bustype = CHIP_BUSTYPE_SPI,
5833 .manufacture_id = GENERIC_MANUF_ID,
5834 .model_id = GENERIC_DEVICE_ID,
5835 .total_size = 0,
5836 .page_size = 256,
5837 .tested = TEST_BAD_PREW,
5838 .probe = probe_spi_rems,
5839 .erase = NULL,
5840 .write = NULL,
5841 },
5842
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005843 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00005844};