blob: 913e030562e3614432935b5a47d3bae929375c16 [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,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000286 .erase = erase_chip_jedec,
287 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000288 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000289 },
290
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000291 {
292 .vendor = "Atmel",
293 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000294 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000295 .manufacture_id = ATMEL_ID,
296 .model_id = AT_25DF021,
297 .total_size = 256,
298 .page_size = 256,
299 .tested = TEST_UNTESTED,
300 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000301 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000302 .erase = NULL,
303 .block_erasers =
304 {
305 {
306 .eraseblocks = { {4 * 1024, 64} },
307 .block_erase = spi_block_erase_20,
308 }, {
309 .eraseblocks = { {32 * 1024, 8} },
310 .block_erase = spi_block_erase_52,
311 }, {
312 .eraseblocks = { {64 * 1024, 4} },
313 .block_erase = spi_block_erase_d8,
314 }, {
315 .eraseblocks = { {256 * 1024, 1} },
316 .block_erase = spi_block_erase_60,
317 }, {
318 .eraseblocks = { {256 * 1024, 1} },
319 .block_erase = spi_block_erase_c7,
320 }
321 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000322 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000323 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000324 },
325
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000326 {
327 .vendor = "Atmel",
328 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000329 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000330 .manufacture_id = ATMEL_ID,
331 .model_id = AT_25DF041A,
332 .total_size = 512,
333 .page_size = 256,
334 .tested = TEST_UNTESTED,
335 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000336 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000337 .erase = NULL,
338 .block_erasers =
339 {
340 {
341 .eraseblocks = { {4 * 1024, 128} },
342 .block_erase = spi_block_erase_20,
343 }, {
344 .eraseblocks = { {32 * 1024, 16} },
345 .block_erase = spi_block_erase_52,
346 }, {
347 .eraseblocks = { {64 * 1024, 8} },
348 .block_erase = spi_block_erase_d8,
349 }, {
350 .eraseblocks = { {512 * 1024, 1} },
351 .block_erase = spi_block_erase_60,
352 }, {
353 .eraseblocks = { {512 * 1024, 1} },
354 .block_erase = spi_block_erase_c7,
355 }
356 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000357 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000358 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000359 },
360
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000361 {
362 .vendor = "Atmel",
363 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000364 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000365 .manufacture_id = ATMEL_ID,
366 .model_id = AT_25DF081,
367 .total_size = 1024,
368 .page_size = 256,
369 .tested = TEST_UNTESTED,
370 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000371 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000372 .erase = NULL,
373 .block_erasers =
374 {
375 {
376 .eraseblocks = { {4 * 1024, 256} },
377 .block_erase = spi_block_erase_20,
378 }, {
379 .eraseblocks = { {32 * 1024, 32} },
380 .block_erase = spi_block_erase_52,
381 }, {
382 .eraseblocks = { {64 * 1024, 16} },
383 .block_erase = spi_block_erase_d8,
384 }, {
385 .eraseblocks = { {1024 * 1024, 1} },
386 .block_erase = spi_block_erase_60,
387 }, {
388 .eraseblocks = { {1024 * 1024, 1} },
389 .block_erase = spi_block_erase_c7,
390 }
391 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000392 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000393 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000394 },
395
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000396 {
397 .vendor = "Atmel",
398 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000399 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000400 .manufacture_id = ATMEL_ID,
401 .model_id = AT_25DF161,
402 .total_size = 2048,
403 .page_size = 256,
404 .tested = TEST_UNTESTED,
405 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000406 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000407 .erase = NULL,
408 .block_erasers =
409 {
410 {
411 .eraseblocks = { {4 * 1024, 512} },
412 .block_erase = spi_block_erase_20,
413 }, {
414 .eraseblocks = { {32 * 1024, 64} },
415 .block_erase = spi_block_erase_52,
416 }, {
417 .eraseblocks = { {64 * 1024, 32} },
418 .block_erase = spi_block_erase_d8,
419 }, {
420 .eraseblocks = { {2 * 1024 * 1024, 1} },
421 .block_erase = spi_block_erase_60,
422 }, {
423 .eraseblocks = { {2 * 1024 * 1024, 1} },
424 .block_erase = spi_block_erase_c7,
425 }
426 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000427 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000428 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000429 },
430
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000431 {
432 .vendor = "Atmel",
433 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000434 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000435 .manufacture_id = ATMEL_ID,
436 .model_id = AT_25DF321,
437 .total_size = 4096,
438 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000439 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000440 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000441 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000442 .erase = NULL,
443 .block_erasers =
444 {
445 {
446 .eraseblocks = { {4 * 1024, 1024} },
447 .block_erase = spi_block_erase_20,
448 }, {
449 .eraseblocks = { {32 * 1024, 128} },
450 .block_erase = spi_block_erase_52,
451 }, {
452 .eraseblocks = { {64 * 1024, 64} },
453 .block_erase = spi_block_erase_d8,
454 }, {
455 .eraseblocks = { {4 * 1024 * 1024, 1} },
456 .block_erase = spi_block_erase_60,
457 }, {
458 .eraseblocks = { {4 * 1024 * 1024, 1} },
459 .block_erase = spi_block_erase_c7,
460 }
461 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000462 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000463 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000464 },
465
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000466 {
467 .vendor = "Atmel",
468 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000469 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000470 .manufacture_id = ATMEL_ID,
471 .model_id = AT_25DF321A,
472 .total_size = 4096,
473 .page_size = 256,
474 .tested = TEST_UNTESTED,
475 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000476 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000477 .erase = NULL,
478 .block_erasers =
479 {
480 {
481 .eraseblocks = { {4 * 1024, 1024} },
482 .block_erase = spi_block_erase_20,
483 }, {
484 .eraseblocks = { {32 * 1024, 128} },
485 .block_erase = spi_block_erase_52,
486 }, {
487 .eraseblocks = { {64 * 1024, 64} },
488 .block_erase = spi_block_erase_d8,
489 }, {
490 .eraseblocks = { {4 * 1024 * 1024, 1} },
491 .block_erase = spi_block_erase_60,
492 }, {
493 .eraseblocks = { {4 * 1024 * 1024, 1} },
494 .block_erase = spi_block_erase_c7,
495 }
496 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000497 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000498 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000499 },
500
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000501 {
502 .vendor = "Atmel",
503 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000504 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000505 .manufacture_id = ATMEL_ID,
506 .model_id = AT_25DF641,
507 .total_size = 8192,
508 .page_size = 256,
509 .tested = TEST_UNTESTED,
510 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000511 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000512 .erase = NULL,
513 .block_erasers =
514 {
515 {
516 .eraseblocks = { {4 * 1024, 2048} },
517 .block_erase = spi_block_erase_20,
518 }, {
519 .eraseblocks = { {32 * 1024, 256} },
520 .block_erase = spi_block_erase_52,
521 }, {
522 .eraseblocks = { {64 * 1024, 128} },
523 .block_erase = spi_block_erase_d8,
524 }, {
525 .eraseblocks = { {8 * 1024 * 1024, 1} },
526 .block_erase = spi_block_erase_60,
527 }, {
528 .eraseblocks = { {8 * 1024 * 1024, 1} },
529 .block_erase = spi_block_erase_c7,
530 }
531 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000532 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000533 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000534 },
535
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000536 {
537 .vendor = "Atmel",
538 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000539 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000540 .manufacture_id = ATMEL_ID,
541 .model_id = AT_25F512B,
542 .total_size = 64,
543 .page_size = 256,
544 .tested = TEST_UNTESTED,
545 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000546 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000547 .erase = NULL,
548 .block_erasers =
549 {
550 {
551 .eraseblocks = { {4 * 1024, 16} },
552 .block_erase = spi_block_erase_20,
553 }, {
554 .eraseblocks = { {32 * 1024, 2} },
555 .block_erase = spi_block_erase_52,
556 }, {
557 .eraseblocks = { {32 * 1024, 2} },
558 .block_erase = spi_block_erase_d8,
559 }, {
560 .eraseblocks = { {64 * 1024, 1} },
561 .block_erase = spi_block_erase_60,
562 }, {
563 .eraseblocks = { {64 * 1024, 1} },
564 .block_erase = spi_block_erase_c7,
565 }
566 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000567 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000568 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000569 },
570
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000571 {
572 .vendor = "Atmel",
573 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000574 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000575 .manufacture_id = ATMEL_ID,
576 .model_id = AT_25FS010,
577 .total_size = 128,
578 .page_size = 256,
579 .tested = TEST_UNTESTED,
580 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000581 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000582 .erase = NULL,
583 .block_erasers =
584 {
585 {
586 .eraseblocks = { {4 * 1024, 32} },
587 .block_erase = spi_block_erase_20,
588 }, {
589 .eraseblocks = { {32 * 1024, 4} },
590 .block_erase = spi_block_erase_52,
591 }, {
592 .eraseblocks = { {32 * 1024, 4} },
593 .block_erase = spi_block_erase_d8,
594 }, {
595 .eraseblocks = { {128 * 1024, 1} },
596 .block_erase = spi_block_erase_60,
597 }, {
598 .eraseblocks = { {128 * 1024, 1} },
599 .block_erase = spi_block_erase_c7,
600 }
601 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000602 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000603 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000604 },
605
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000606 {
607 .vendor = "Atmel",
608 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000609 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000610 .manufacture_id = ATMEL_ID,
611 .model_id = AT_25FS040,
612 .total_size = 512,
613 .page_size = 256,
614 .tested = TEST_UNTESTED,
615 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000616 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000617 .erase = NULL,
618 .block_erasers =
619 {
620 {
621 .eraseblocks = { {4 * 1024, 128} },
622 .block_erase = spi_block_erase_20,
623 }, {
624 .eraseblocks = { {64 * 1024, 8} },
625 .block_erase = spi_block_erase_52,
626 }, {
627 .eraseblocks = { {64 * 1024, 8} },
628 .block_erase = spi_block_erase_d8,
629 }, {
630 .eraseblocks = { {512 * 1024, 1} },
631 .block_erase = spi_block_erase_60,
632 }, {
633 .eraseblocks = { {512 * 1024, 1} },
634 .block_erase = spi_block_erase_c7,
635 }
636 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000637 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000638 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000639 },
640
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000641 {
642 .vendor = "Atmel",
643 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000644 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000645 .manufacture_id = ATMEL_ID,
646 .model_id = AT_26DF041,
647 .total_size = 512,
648 .page_size = 256,
649 .tested = TEST_UNTESTED,
650 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000651 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000652 .erase = NULL,
Sean Nelson89187292009-12-23 12:02:55 +0000653 .block_erasers =
654 {
655 {
656 .eraseblocks = { {4 * 1024, 128} },
657 .block_erase = spi_block_erase_20,
658 }
659 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000660 .write = NULL /* Incompatible Page write */,
661 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000662 },
663
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000664 {
665 .vendor = "Atmel",
666 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000667 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000668 .manufacture_id = ATMEL_ID,
669 .model_id = AT_26DF081A,
670 .total_size = 1024,
671 .page_size = 256,
672 .tested = TEST_UNTESTED,
673 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000674 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000675 .erase = NULL,
676 .block_erasers =
677 {
678 {
679 .eraseblocks = { {4 * 1024, 256} },
680 .block_erase = spi_block_erase_20,
681 }, {
682 .eraseblocks = { {32 * 1024, 32} },
683 .block_erase = spi_block_erase_52,
684 }, {
685 .eraseblocks = { {64 * 1024, 16} },
686 .block_erase = spi_block_erase_d8,
687 }, {
688 .eraseblocks = { {1024 * 1024, 1} },
689 .block_erase = spi_block_erase_60,
690 }, {
691 .eraseblocks = { {1024 * 1024, 1} },
692 .block_erase = spi_block_erase_c7,
693 }
694 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000695 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000696 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000697 },
698
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000699 {
700 .vendor = "Atmel",
701 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000702 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000703 .manufacture_id = ATMEL_ID,
704 .model_id = AT_26DF161,
705 .total_size = 2048,
706 .page_size = 256,
707 .tested = TEST_UNTESTED,
708 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000709 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000710 .erase = NULL,
711 .block_erasers =
712 {
713 {
714 .eraseblocks = { {4 * 1024, 512} },
715 .block_erase = spi_block_erase_20,
716 }, {
717 .eraseblocks = { {32 * 1024, 64} },
718 .block_erase = spi_block_erase_52,
719 }, {
720 .eraseblocks = { {64 * 1024, 32} },
721 .block_erase = spi_block_erase_d8,
722 }, {
723 .eraseblocks = { {2 * 1024 * 1024, 1} },
724 .block_erase = spi_block_erase_60,
725 }, {
726 .eraseblocks = { {2 * 1024 * 1024, 1} },
727 .block_erase = spi_block_erase_c7,
728 }
729 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000730 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000731 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000732 },
733
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000734 {
735 .vendor = "Atmel",
736 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000737 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000738 .manufacture_id = ATMEL_ID,
739 .model_id = AT_26DF161A,
740 .total_size = 2048,
741 .page_size = 256,
742 .tested = TEST_UNTESTED,
743 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000744 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000745 .erase = NULL,
746 .block_erasers =
747 {
748 {
749 .eraseblocks = { {4 * 1024, 512} },
750 .block_erase = spi_block_erase_20,
751 }, {
752 .eraseblocks = { {32 * 1024, 64} },
753 .block_erase = spi_block_erase_52,
754 }, {
755 .eraseblocks = { {64 * 1024, 32} },
756 .block_erase = spi_block_erase_d8,
757 }, {
758 .eraseblocks = { {2 * 1024 * 1024, 1} },
759 .block_erase = spi_block_erase_60,
760 }, {
761 .eraseblocks = { {2 * 1024 * 1024, 1} },
762 .block_erase = spi_block_erase_c7,
763 }
764 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000765 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000766 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000767 },
768
769 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000770 /*{
771 .vendor = "Atmel",
772 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000773 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000774 .manufacture_id = ATMEL_ID,
775 .model_id = AT_26DF321,
776 .total_size = 4096,
777 .page_size = 256,
778 .tested = TEST_UNTESTED,
779 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000780 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000781 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000782 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000783 .read = spi_chip_read,
784 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000785
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000786 {
787 .vendor = "Atmel",
788 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000789 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000790 .manufacture_id = ATMEL_ID,
791 .model_id = AT_26F004,
792 .total_size = 512,
793 .page_size = 256,
794 .tested = TEST_UNTESTED,
795 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000796 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000797 .erase = NULL,
798 .block_erasers =
799 {
800 {
801 .eraseblocks = { {4 * 1024, 128} },
802 .block_erase = spi_block_erase_20,
803 }, {
804 .eraseblocks = { {32 * 1024, 16} },
805 .block_erase = spi_block_erase_52,
806 }, {
807 .eraseblocks = { {64 * 1024, 8} },
808 .block_erase = spi_block_erase_d8,
809 }, {
810 .eraseblocks = { {512 * 1024, 1} },
811 .block_erase = spi_block_erase_60,
812 }, {
813 .eraseblocks = { {512 * 1024, 1} },
814 .block_erase = spi_block_erase_c7,
815 }
816 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000817 .write = NULL /* Incompatible Page write */,
818 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000819 },
820
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000821 {
822 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000823 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000824 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000825 .manufacture_id = ATMEL_ID,
826 .model_id = AT_29C512,
827 .total_size = 64,
828 .page_size = 128,
Sean Nelson89187292009-12-23 12:02:55 +0000829 .tested = TEST_OK_PRW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000830 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000831 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000832 .erase = NULL,
833 .block_erasers =
834 {
835 {
836 .eraseblocks = { {64 * 1024, 1} },
837 .block_erase = erase_chip_block_jedec,
838 }
839 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000840 .write = write_jedec,
841 .read = read_memmapped,
842
843 },
844
845 {
846 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000847 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000848 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000849 .manufacture_id = ATMEL_ID,
850 .model_id = AT_29C010A,
851 .total_size = 128,
852 .page_size = 128,
Sean Nelson89187292009-12-23 12:02:55 +0000853 .tested = TEST_OK_PR,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000854 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000855 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000856 .erase = NULL,
857 .block_erasers =
858 {
859 {
860 .eraseblocks = { {128 * 1024, 1} },
861 .block_erase = erase_chip_block_jedec,
862 }
863 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000864 .write = write_jedec, /* FIXME */
865 .read = read_memmapped,
866 },
867
868 {
869 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000870 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000871 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000872 .manufacture_id = ATMEL_ID,
873 .model_id = AT_29C020,
874 .total_size = 256,
875 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000876 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000877 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000878 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000879 .erase = NULL,
880 .block_erasers =
881 {
882 {
883 .eraseblocks = { {256 * 1024, 1} },
884 .block_erase = erase_chip_block_jedec,
885 }
886 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000887 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000888 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000889 },
890
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000891 {
892 .vendor = "Atmel",
893 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000894 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000895 .manufacture_id = ATMEL_ID,
896 .model_id = AT_29C040A,
897 .total_size = 512,
898 .page_size = 256,
899 .tested = TEST_UNTESTED,
900 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000901 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000902 .erase = NULL,
903 .block_erasers =
904 {
905 {
906 .eraseblocks = { {512 * 1024, 1} },
907 .block_erase = erase_chip_block_jedec,
908 }
909 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000910 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000911 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000912 },
913
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000914 {
915 .vendor = "Atmel",
916 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000917 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000918 .manufacture_id = ATMEL_ID,
919 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000920 .total_size = 16896 /* No power of two sizes */,
921 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000922 .tested = TEST_BAD_READ,
923 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000924 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000925 .erase = NULL,
926 .write = NULL /* Incompatible Page write */,
927 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000928 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000929
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000930 {
931 .vendor = "Atmel",
932 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000933 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000934 .manufacture_id = ATMEL_ID,
935 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000936 .total_size = 128 /* Size can only be determined from status register */,
937 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000938 .tested = TEST_BAD_READ,
939 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000940 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000941 .erase = NULL,
942 .write = NULL,
943 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000944 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000945
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000946 {
947 .vendor = "Atmel",
948 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000949 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000950 .manufacture_id = ATMEL_ID,
951 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000952 .total_size = 256 /* Size can only be determined from status register */,
953 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000954 .tested = TEST_BAD_READ,
955 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000956 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000957 .erase = NULL,
958 .write = NULL,
959 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000960 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000961
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000962 {
963 .vendor = "Atmel",
964 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000965 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000966 .manufacture_id = ATMEL_ID,
967 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000968 .total_size = 512 /* Size can only be determined from status register */,
969 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000970 .tested = TEST_BAD_READ,
971 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000972 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000973 .erase = NULL,
974 .write = NULL,
975 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000976 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000977
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000978 {
979 .vendor = "Atmel",
980 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000981 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000982 .manufacture_id = ATMEL_ID,
983 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000984 .total_size = 1024 /* Size can only be determined from status register */,
985 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000986 .tested = TEST_BAD_READ,
987 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000988 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000989 .erase = NULL,
990 .write = NULL,
991 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000992 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000993
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000994 {
995 .vendor = "Atmel",
996 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000997 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000998 .manufacture_id = ATMEL_ID,
999 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001000 .total_size = 2048 /* Size can only be determined from status register */,
1001 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001002 .tested = TEST_BAD_READ,
1003 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001004 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001005 .erase = NULL,
1006 .write = NULL,
1007 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001008 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001009
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001010 {
1011 .vendor = "Atmel",
1012 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001013 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001014 .manufacture_id = ATMEL_ID,
1015 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001016 .total_size = 4224 /* No power of two sizes */,
1017 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001018 .tested = TEST_BAD_READ,
1019 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001020 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001021 .erase = NULL,
1022 .write = NULL,
1023 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001024 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001025
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001026 {
1027 .vendor = "Atmel",
1028 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001029 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001030 .manufacture_id = ATMEL_ID,
1031 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001032 .total_size = 4096 /* Size can only be determined from status register */,
1033 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001034 .tested = TEST_BAD_READ,
1035 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001036 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001037 .erase = NULL,
1038 .write = NULL,
1039 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001040 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001041
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001042 {
1043 .vendor = "Atmel",
1044 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001045 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001046 .manufacture_id = ATMEL_ID,
1047 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001048 .total_size = 8192 /* Size can only be determined from status register */,
1049 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001050 .tested = TEST_BAD_READ,
1051 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001052 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001053 .erase = NULL,
1054 .write = NULL,
1055 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001056 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001057
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001058 {
1059 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001060 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001061 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001062 .manufacture_id = ATMEL_ID,
1063 .model_id = AT_49BV512,
1064 .total_size = 64,
1065 .page_size = 64,
Sean Nelson89187292009-12-23 12:02:55 +00001066 .tested = TEST_OK_PRW,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001067 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001068 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001069 .erase = NULL,
1070 .block_erasers =
1071 {
1072 {
1073 .eraseblocks = { {64 * 1024, 1} },
1074 .block_erase = erase_chip_block_jedec,
1075 }
1076 },
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001077 .write = write_49f002,
1078 .read = read_memmapped,
1079 },
1080
1081 {
1082 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001083 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001084 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001085 .manufacture_id = ATMEL_ID,
1086 .model_id = AT_49F002N,
1087 .total_size = 256,
1088 .page_size = 256,
1089 .tested = TEST_UNTESTED,
1090 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001091 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001092 .erase = NULL,
1093 .block_erasers =
1094 {
1095 {
1096 .eraseblocks = {
1097 {16 * 1024, 1},
1098 {8 * 1024, 2},
1099 {96 * 1024, 1},
1100 {128 * 1024, 1},
1101 },
1102 .block_erase = erase_sector_jedec,
1103 }, {
1104 .eraseblocks = { {256 * 1024, 1} },
1105 .block_erase = erase_chip_block_jedec,
1106 }
1107 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001108 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001109 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001110 },
1111
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001112 {
1113 .vendor = "Atmel",
1114 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001115 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001116 .manufacture_id = ATMEL_ID,
1117 .model_id = AT_49F002NT,
1118 .total_size = 256,
1119 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +00001120 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001121 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001122 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001123 .erase = NULL,
1124 .block_erasers =
1125 {
1126 {
1127 .eraseblocks = {
1128 {128 * 1024, 1},
1129 {96 * 1024, 1},
1130 {8 * 1024, 2},
1131 {16 * 1024, 1},
1132 },
1133 .block_erase = erase_sector_jedec,
1134 }, {
1135 .eraseblocks = { {256 * 1024, 1} },
1136 .block_erase = erase_chip_block_jedec,
1137 }
1138 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001139 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001140 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001141 },
1142
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001143 {
1144 .vendor = "AMIC",
1145 .name = "A25L40P",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001146 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001147 .manufacture_id = AMIC_ID,
1148 .model_id = AMIC_A25L40P,
1149 .total_size = 512,
1150 .page_size = 256,
1151 .tested = TEST_OK_PREW,
1152 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001153 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001154 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001155 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001156 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001157 },
1158
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001159 {
1160 .vendor = "AMIC",
1161 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001162 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001163 .manufacture_id = AMIC_ID_NOPREFIX,
1164 .model_id = AMIC_A29002B,
1165 .total_size = 256,
1166 .page_size = 64 * 1024,
1167 .tested = TEST_UNTESTED,
1168 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001169 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001170 .erase = NULL,
1171 .block_erasers =
1172 {
1173 {
1174 .eraseblocks = {
1175 {16 * 1024, 1},
1176 {8 * 1024, 2},
1177 {32 * 1024, 1},
1178 {64 * 1024, 3},
1179 },
1180 .block_erase = erase_sector_29f002,
1181 }, {
1182 .eraseblocks = { {256 * 1024, 1} },
1183 .block_erase = erase_chip_29f002,
1184 },
1185 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001186 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001187 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001188 },
1189
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001190 {
1191 .vendor = "AMIC",
1192 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001193 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001194 .manufacture_id = AMIC_ID_NOPREFIX,
1195 .model_id = AMIC_A29002T,
1196 .total_size = 256,
1197 .page_size = 64 * 1024,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001198 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001199 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001200 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001201 .erase = NULL,
1202 .block_erasers =
1203 {
1204 {
1205 .eraseblocks = {
1206 {64 * 1024, 3},
1207 {32 * 1024, 1},
1208 {8 * 1024, 2},
1209 {16 * 1024, 1},
1210 },
1211 .block_erase = erase_sector_29f002,
1212 }, {
1213 .eraseblocks = { {256 * 1024, 1} },
1214 .block_erase = erase_chip_29f002,
1215 },
1216 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001217 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001218 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001219 },
1220
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001221 {
1222 .vendor = "AMIC",
1223 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001224 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001225 .manufacture_id = AMIC_ID_NOPREFIX,
1226 .model_id = AMIC_A29040B,
1227 .total_size = 512,
1228 .page_size = 64 * 1024,
1229 .tested = TEST_OK_PR,
1230 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001231 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001232 .erase = NULL,
1233 .block_erasers =
1234 {
1235 {
1236 .eraseblocks = { {64 * 1024, 8} },
1237 .block_erase = erase_sector_29f040b,
1238 }, {
1239 .eraseblocks = { {512 * 1024, 1} },
1240 .block_erase = erase_chip_29f040b,
1241 },
1242 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001243 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001244 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001245 },
1246
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001247 {
1248 .vendor = "AMIC",
1249 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001250 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001251 .manufacture_id = AMIC_ID_NOPREFIX,
1252 .model_id = AMIC_A49LF040A,
1253 .total_size = 512,
1254 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001255 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001256 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001257 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001258 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001259 .erase = erase_49fl00x,
1260 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001261 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001262 },
1263
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001264 {
1265 .vendor = "EMST",
1266 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001267 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001268 .manufacture_id = EMST_ID,
1269 .model_id = EMST_F49B002UA,
1270 .total_size = 256,
1271 .page_size = 4096,
1272 .tested = TEST_UNTESTED,
1273 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001274 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001275 .erase = erase_chip_jedec,
1276 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001277 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001278 },
1279
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001280 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001281 .vendor = "Eon",
1282 .name = "EN25B05",
1283 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001284 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001285 .model_id = EN_25B05,
1286 .total_size = 64,
1287 .page_size = 256,
1288 .tested = TEST_UNTESTED,
1289 .probe = probe_spi_rdid,
1290 .probe_timing = TIMING_ZERO,
1291 .erase = spi_chip_erase_c7,
1292 .write = spi_chip_write_256,
1293 .read = spi_chip_read,
1294 },
1295
1296 {
1297 .vendor = "Eon",
1298 .name = "EN25B10",
1299 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001300 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001301 .model_id = EN_25B10,
1302 .total_size = 128,
1303 .page_size = 256,
1304 .tested = TEST_UNTESTED,
1305 .probe = probe_spi_rdid,
1306 .probe_timing = TIMING_ZERO,
1307 .erase = spi_chip_erase_c7,
1308 .write = spi_chip_write_256,
1309 .read = spi_chip_read,
1310 },
1311
1312 {
1313 .vendor = "Eon",
1314 .name = "EN25B20",
1315 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001316 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001317 .model_id = EN_25B20,
1318 .total_size = 256,
1319 .page_size = 256,
1320 .tested = TEST_UNTESTED,
1321 .probe = probe_spi_rdid,
1322 .probe_timing = TIMING_ZERO,
1323 .erase = spi_chip_erase_c7,
1324 .write = spi_chip_write_256,
1325 .read = spi_chip_read,
1326 },
1327
1328 {
1329 .vendor = "Eon",
1330 .name = "EN25B40",
1331 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001332 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001333 .model_id = EN_25B40,
1334 .total_size = 512,
1335 .page_size = 256,
1336 .tested = TEST_UNTESTED,
1337 .probe = probe_spi_rdid,
1338 .probe_timing = TIMING_ZERO,
1339 .erase = spi_chip_erase_c7,
1340 .write = spi_chip_write_256,
1341 .read = spi_chip_read,
1342 },
1343
1344 {
1345 .vendor = "Eon",
1346 .name = "EN25B80",
1347 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001348 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001349 .model_id = EN_25B80,
1350 .total_size = 1024,
1351 .page_size = 256,
1352 .tested = TEST_UNTESTED,
1353 .probe = probe_spi_rdid,
1354 .probe_timing = TIMING_ZERO,
1355 .erase = spi_chip_erase_c7,
1356 .write = spi_chip_write_256,
1357 .read = spi_chip_read,
1358 },
1359
1360 {
1361 .vendor = "Eon",
1362 .name = "EN25B16",
1363 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001364 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001365 .model_id = EN_25B16,
1366 .total_size = 2048,
1367 .page_size = 256,
1368 .tested = TEST_UNTESTED,
1369 .probe = probe_spi_rdid,
1370 .probe_timing = TIMING_ZERO,
1371 .erase = spi_chip_erase_c7,
1372 .write = spi_chip_write_256,
1373 .read = spi_chip_read,
1374 },
1375
1376 {
1377 .vendor = "Eon",
1378 .name = "EN25B32",
1379 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001380 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001381 .model_id = EN_25B32,
1382 .total_size = 4096,
1383 .page_size = 256,
1384 .tested = TEST_UNTESTED,
1385 .probe = probe_spi_rdid,
1386 .probe_timing = TIMING_ZERO,
1387 .erase = spi_chip_erase_c7,
1388 .write = spi_chip_write_256,
1389 .read = spi_chip_read,
1390 },
1391
1392 {
1393 .vendor = "Eon",
1394 .name = "EN25B64",
1395 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001396 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001397 .model_id = EN_25B64,
1398 .total_size = 8192,
1399 .page_size = 256,
1400 .tested = TEST_UNTESTED,
1401 .probe = probe_spi_rdid,
1402 .probe_timing = TIMING_ZERO,
1403 .erase = spi_chip_erase_c7,
1404 .write = spi_chip_write_256,
1405 .read = spi_chip_read,
1406 },
1407
1408 {
1409 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001410 .name = "EN25D16",
1411 .bustype = CHIP_BUSTYPE_SPI,
1412 .manufacture_id = EON_ID_NOPREFIX,
1413 .model_id = EN_25D16,
1414 .total_size = 2048,
1415 .page_size = 256,
1416 .tested = TEST_UNTESTED,
1417 .probe = probe_spi_rdid,
1418 .probe_timing = TIMING_ZERO,
1419 .erase = spi_chip_erase_60_c7,
1420 .write = spi_chip_write_256,
1421 .read = spi_chip_read,
1422 },
1423
1424 {
1425 .vendor = "Eon",
1426 .name = "EN25F05",
1427 .bustype = CHIP_BUSTYPE_SPI,
1428 .manufacture_id = EON_ID_NOPREFIX,
1429 .model_id = EN_25F05,
1430 .total_size = 64,
1431 .page_size = 256,
1432 .tested = TEST_UNTESTED,
1433 .probe = probe_spi_rdid,
1434 .probe_timing = TIMING_ZERO,
1435 .erase = spi_chip_erase_60_c7,
1436 .write = spi_chip_write_256,
1437 .read = spi_chip_read,
1438 },
1439
1440 {
1441 .vendor = "Eon",
1442 .name = "EN25F10",
1443 .bustype = CHIP_BUSTYPE_SPI,
1444 .manufacture_id = EON_ID_NOPREFIX,
1445 .model_id = EN_25F10,
1446 .total_size = 128,
1447 .page_size = 256,
1448 .tested = TEST_UNTESTED,
1449 .probe = probe_spi_rdid,
1450 .probe_timing = TIMING_ZERO,
1451 .erase = spi_chip_erase_60_c7,
1452 .write = spi_chip_write_256,
1453 .read = spi_chip_read,
1454 },
1455
1456 {
1457 .vendor = "Eon",
1458 .name = "EN25F20",
1459 .bustype = CHIP_BUSTYPE_SPI,
1460 .manufacture_id = EON_ID_NOPREFIX,
1461 .model_id = EN_25F20,
1462 .total_size = 256,
1463 .page_size = 256,
1464 .tested = TEST_UNTESTED,
1465 .probe = probe_spi_rdid,
1466 .probe_timing = TIMING_ZERO,
1467 .erase = spi_chip_erase_60_c7,
1468 .write = spi_chip_write_256,
1469 .read = spi_chip_read,
1470 },
1471
1472 {
1473 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001474 .name = "EN25F40",
1475 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001476 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001477 .model_id = EN_25F40,
1478 .total_size = 512,
1479 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001480 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001481 .probe = probe_spi_rdid,
1482 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001483 .erase = NULL,
1484 .block_erasers =
1485 {
1486 {
1487 .eraseblocks = { {4 * 1024, 2048} },
1488 .block_erase = spi_block_erase_20,
1489 }, {
1490 .eraseblocks = { {4 * 1024, 2048} },
1491 .block_erase = spi_block_erase_d8,
1492 }, {
1493 .eraseblocks = { {8 * 1024 * 1024, 1} },
1494 .block_erase = spi_block_erase_60,
1495 }, {
1496 .eraseblocks = { {8 * 1024 * 1024, 1} },
1497 .block_erase = spi_block_erase_c7,
1498 },
1499 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001500 .write = spi_chip_write_256,
1501 .read = spi_chip_read,
1502 },
1503
1504 {
1505 .vendor = "Eon",
1506 .name = "EN25F80",
1507 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001508 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001509 .model_id = EN_25F80,
1510 .total_size = 1024,
1511 .page_size = 256,
1512 .tested = TEST_UNTESTED,
1513 .probe = probe_spi_rdid,
1514 .probe_timing = TIMING_ZERO,
1515 .erase = spi_chip_erase_60_c7,
1516 .write = spi_chip_write_256,
1517 .read = spi_chip_read,
1518 },
1519
1520 {
1521 .vendor = "Eon",
1522 .name = "EN25F16",
1523 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001524 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001525 .model_id = EN_25F16,
1526 .total_size = 2048,
1527 .page_size = 256,
1528 .tested = TEST_UNTESTED,
1529 .probe = probe_spi_rdid,
1530 .probe_timing = TIMING_ZERO,
1531 .erase = spi_chip_erase_60_c7,
1532 .write = spi_chip_write_256,
1533 .read = spi_chip_read,
1534 },
1535
1536 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001537 .vendor = "Eon",
1538 .name = "EN25F32",
1539 .bustype = CHIP_BUSTYPE_SPI,
1540 .manufacture_id = EON_ID_NOPREFIX,
1541 .model_id = EN_25F32,
1542 .total_size = 4096,
1543 .page_size = 256,
1544 .tested = TEST_UNTESTED,
1545 .probe = probe_spi_rdid,
1546 .probe_timing = TIMING_ZERO,
1547 .erase = spi_chip_erase_60_c7,
1548 .write = spi_chip_write_256,
1549 .read = spi_chip_read,
1550 },
1551
1552 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001553 .vendor = "EON",
1554 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001555 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001556 .manufacture_id = EON_ID,
1557 .model_id = EN_29F002B,
1558 .total_size = 256,
1559 .page_size = 256,
1560 .tested = TEST_UNTESTED,
1561 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001562 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001563 .erase = NULL,
1564 .block_erasers =
1565 {
1566 {
1567 .eraseblocks = {
1568 {64 * 1024, 3},
1569 {32 * 1024, 1},
1570 {8 * 1024, 2},
1571 {16 * 1024, 1},
1572 },
1573 .block_erase = erase_sector_jedec,
1574 }, {
1575 .eraseblocks = { {256 * 1024, 1} },
1576 .block_erase = erase_chip_block_jedec,
1577 },
1578 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001579 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001580 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001581 },
1582
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001583 {
1584 .vendor = "EON",
1585 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001586 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001587 .manufacture_id = EON_ID,
1588 .model_id = EN_29F002T,
1589 .total_size = 256,
1590 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001591 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001592 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001593 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001594 .erase = NULL,
1595 .block_erasers =
1596 {
1597 {
1598 .eraseblocks = {
1599 {16 * 1024, 1},
1600 {8 * 1024, 2},
1601 {32 * 1024, 1},
1602 {64 * 1024, 3},
1603 },
1604 .block_erase = erase_sector_jedec,
1605 }, {
1606 .eraseblocks = { {256 * 1024, 1} },
1607 .block_erase = erase_chip_block_jedec,
1608 },
1609 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001610 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001611 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001612 },
1613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001614 {
1615 .vendor = "Fujitsu",
1616 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001617 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001618 .manufacture_id = FUJITSU_ID,
1619 .model_id = MBM29F004BC,
1620 .total_size = 512,
1621 .page_size = 64 * 1024,
1622 .tested = TEST_UNTESTED,
1623 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001624 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001625 .erase = NULL,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001626 .block_erasers =
1627 {
1628 {
1629 .eraseblocks = {
1630 {16 * 1024, 1},
1631 {8 * 1024, 2},
1632 {32 * 1024, 1},
1633 {64 * 1024, 7},
1634 },
1635 .block_erase = erase_sector_29f040b,
1636 }, {
1637 .eraseblocks = { {512 * 1024, 1} },
1638 .block_erase = erase_chip_29f040b,
1639 },
1640 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001641 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001642 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001643 },
1644
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001645 {
1646 .vendor = "Fujitsu",
1647 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001648 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001649 .manufacture_id = FUJITSU_ID,
1650 .model_id = MBM29F004TC,
1651 .total_size = 512,
1652 .page_size = 64 * 1024,
1653 .tested = TEST_UNTESTED,
1654 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001655 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001656 .erase = NULL,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001657 .block_erasers =
1658 {
1659 {
1660 .eraseblocks = {
1661 {64 * 1024, 7},
1662 {32 * 1024, 1},
1663 {8 * 1024, 2},
1664 {16 * 1024, 1},
1665 },
1666 .block_erase = erase_sector_29f040b,
1667 }, {
1668 .eraseblocks = { {512 * 1024, 1} },
1669 .block_erase = erase_chip_29f040b,
1670 },
1671 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001672 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001673 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001674 },
1675
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001676 {
1677 .vendor = "Fujitsu",
1678 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001679 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001680 .manufacture_id = FUJITSU_ID,
1681 .model_id = MBM29F400BC,
1682 .total_size = 512,
1683 .page_size = 64 * 1024,
1684 .tested = TEST_UNTESTED,
1685 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001686 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001687 .erase = NULL,
1688 .block_erasers =
1689 {
1690 {
1691 .eraseblocks = {
1692 {16 * 1024, 1},
1693 {8 * 1024, 2},
1694 {32 * 1024, 1},
1695 {64 * 1024, 7},
1696 },
1697 .block_erase = block_erase_m29f400bt,
1698 }, {
1699 .eraseblocks = { {512 * 1024, 1} },
1700 .block_erase = block_erase_chip_m29f400bt,
1701 },
1702 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001703 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001704 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001705 },
1706
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001707 {
1708 .vendor = "Fujitsu",
1709 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001710 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001711 .manufacture_id = FUJITSU_ID,
1712 .model_id = MBM29F400TC,
1713 .total_size = 512,
1714 .page_size = 64 * 1024,
1715 .tested = TEST_UNTESTED,
1716 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001717 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001718 .erase = NULL,
1719 .block_erasers =
1720 {
1721 {
1722 .eraseblocks = {
1723 {64 * 1024, 7},
1724 {32 * 1024, 1},
1725 {8 * 1024, 2},
1726 {16 * 1024, 1},
1727 },
1728 .block_erase = block_erase_m29f400bt,
1729 }, {
1730 .eraseblocks = { {512 * 1024, 1} },
1731 .block_erase = block_erase_chip_m29f400bt,
1732 },
1733 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001734 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001735 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001736 },
1737
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001738 {
1739 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001740 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001741 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001742 .manufacture_id = INTEL_ID,
1743 .model_id = P28F001BXB,
1744 .total_size = 128,
1745 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
1746 .tested = TEST_BAD_ERASE|TEST_BAD_WRITE,
1747 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001748 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001749 .erase = NULL,
1750 .write = NULL,
1751 .read = read_memmapped,
1752 },
1753
1754 {
1755 .vendor = "Intel",
1756 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001757 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001758 .manufacture_id = INTEL_ID,
1759 .model_id = P28F001BXT,
1760 .total_size = 128,
1761 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
1762 .tested = TEST_OK_PR|TEST_BAD_ERASE|TEST_BAD_WRITE,
1763 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001764 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001765 .erase = NULL,
1766 .write = NULL,
1767 .read = read_memmapped,
1768 },
1769
1770 {
1771 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001772 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001773 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001774 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001775 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001776 .total_size = 512,
1777 .page_size = 64 * 1024,
1778 .tested = TEST_OK_PREW,
1779 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001780 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001781 .erase = erase_82802ab,
1782 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001783 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001784 },
1785
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001786 {
1787 .vendor = "Intel",
1788 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001789 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001790 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001791 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001792 .total_size = 1024,
1793 .page_size = 64 * 1024,
1794 .tested = TEST_OK_PREW,
1795 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001796 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001797 .erase = erase_82802ab,
1798 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001799 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001800 },
1801
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001802 {
1803 .vendor = "Macronix",
1804 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001805 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001806 .manufacture_id = MX_ID,
1807 .model_id = MX_25L512,
1808 .total_size = 64,
1809 .page_size = 256,
1810 .tested = TEST_UNTESTED,
1811 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001812 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001813 .erase = NULL,
1814 .block_erasers =
1815 {
1816 {
1817 .eraseblocks = { {4 * 1024, 16} },
1818 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001819 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001820 .eraseblocks = { {64 * 1024, 1} },
1821 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001822 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001823 .eraseblocks = { {64 * 1024, 1} },
1824 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001825 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001826 .eraseblocks = { {64 * 1024, 1} },
1827 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001828 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001829 .eraseblocks = { {64 * 1024, 1} },
1830 .block_erase = spi_block_erase_c7,
1831 },
1832 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001833 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001834 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001835 },
1836
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001837 {
1838 .vendor = "Macronix",
1839 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001840 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001841 .manufacture_id = MX_ID,
1842 .model_id = MX_25L1005,
1843 .total_size = 128,
1844 .page_size = 256,
1845 .tested = TEST_UNTESTED,
1846 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001847 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001848 .erase = NULL,
1849 .block_erasers =
1850 {
1851 {
1852 .eraseblocks = { {4 * 1024, 32} },
1853 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001854 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001855 .eraseblocks = { {64 * 1024, 2} },
1856 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001857 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001858 .eraseblocks = { {128 * 1024, 1} },
1859 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001860 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001861 .eraseblocks = { {128 * 1024, 1} },
1862 .block_erase = spi_block_erase_c7,
1863 },
1864 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001865 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001866 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001867 },
1868
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001869 {
1870 .vendor = "Macronix",
1871 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001872 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001873 .manufacture_id = MX_ID,
1874 .model_id = MX_25L2005,
1875 .total_size = 256,
1876 .page_size = 256,
1877 .tested = TEST_UNTESTED,
1878 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001879 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001880 .erase = NULL,
1881 .block_erasers =
1882 {
1883 {
1884 .eraseblocks = { {4 * 1024, 64} },
1885 .block_erase = spi_block_erase_20,
1886 }, {
1887 .eraseblocks = { {64 * 1024, 4} },
1888 .block_erase = spi_block_erase_52,
1889 }, {
1890 .eraseblocks = { {64 * 1024, 4} },
1891 .block_erase = spi_block_erase_d8,
1892 }, {
1893 .eraseblocks = { {256 * 1024, 1} },
1894 .block_erase = spi_block_erase_60,
1895 }, {
1896 .eraseblocks = { {256 * 1024, 1} },
1897 .block_erase = spi_block_erase_c7,
1898 },
1899 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001900 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001901 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001902 },
1903
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001904 {
1905 .vendor = "Macronix",
1906 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001907 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001908 .manufacture_id = MX_ID,
1909 .model_id = MX_25L4005,
1910 .total_size = 512,
1911 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001912 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001913 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001914 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001915 .erase = NULL,
1916 .block_erasers =
1917 {
1918 {
1919 .eraseblocks = { {4 * 1024, 128} },
1920 .block_erase = spi_block_erase_20,
1921 }, {
1922 .eraseblocks = { {64 * 1024, 8} },
1923 .block_erase = spi_block_erase_52,
1924 }, {
1925 .eraseblocks = { {64 * 1024, 8} },
1926 .block_erase = spi_block_erase_d8,
1927 }, {
1928 .eraseblocks = { {512 * 1024, 1} },
1929 .block_erase = spi_block_erase_60,
1930 }, {
1931 .eraseblocks = { {512 * 1024, 1} },
1932 .block_erase = spi_block_erase_c7,
1933 },
1934 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001935 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001936 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001937 },
1938
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001939 {
1940 .vendor = "Macronix",
1941 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001942 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001943 .manufacture_id = MX_ID,
1944 .model_id = MX_25L8005,
1945 .total_size = 1024,
1946 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001947 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001948 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001949 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001950 .erase = NULL,
1951 .block_erasers =
1952 {
1953 {
1954 .eraseblocks = { {4 * 1024, 256} },
1955 .block_erase = spi_block_erase_20,
1956 }, {
1957 .eraseblocks = { {64 * 1024, 16} },
1958 .block_erase = spi_block_erase_52,
1959 }, {
1960 .eraseblocks = { {64 * 1024, 16} },
1961 .block_erase = spi_block_erase_d8,
1962 }, {
1963 .eraseblocks = { {1024 * 1024, 1} },
1964 .block_erase = spi_block_erase_60,
1965 }, {
1966 .eraseblocks = { {1024 * 1024, 1} },
1967 .block_erase = spi_block_erase_c7,
1968 },
1969 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001970 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001971 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001972 },
1973
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001974 {
1975 .vendor = "Macronix",
1976 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001977 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001978 .manufacture_id = MX_ID,
1979 .model_id = MX_25L1605,
1980 .total_size = 2048,
1981 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001982 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001983 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001984 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001985 .erase = NULL,
1986 .block_erasers =
1987 {
1988 {
1989 .eraseblocks = { {4 * 1024, 512} },
1990 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
1991 }, {
1992 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
1993 .block_erase = spi_block_erase_52,
1994 }, {
1995 .eraseblocks = { {64 * 1024, 32} },
1996 .block_erase = spi_block_erase_d8,
1997 }, {
1998 .eraseblocks = { {2 * 1024 * 1024, 1} },
1999 .block_erase = spi_block_erase_60,
2000 }, {
2001 .eraseblocks = { {2 * 1024 * 1024, 1} },
2002 .block_erase = spi_block_erase_c7,
2003 },
2004 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002005 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002006 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002007 },
2008
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002009 {
2010 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002011 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002012 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002013 .manufacture_id = MX_ID,
2014 .model_id = MX_25L1635D,
2015 .total_size = 2048,
2016 .page_size = 256,
2017 .tested = TEST_UNTESTED,
2018 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002019 .probe_timing = TIMING_ZERO,
Stephan Guillouxe39631c2009-04-19 23:24:26 +00002020 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002021 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002022 .read = spi_chip_read,
2023 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002024
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002025 {
2026 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002027 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002028 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002029 .manufacture_id = MX_ID,
2030 .model_id = MX_25L3205,
2031 .total_size = 4096,
2032 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002033 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002034 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002035 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002036 .erase = NULL,
2037 .block_erasers =
2038 {
2039 {
2040 .eraseblocks = { {4 * 1024, 1024} },
2041 .block_erase = spi_block_erase_20,
2042 }, {
2043 .eraseblocks = { {4 * 1024, 1024} },
2044 .block_erase = spi_block_erase_d8,
2045 }, {
2046 .eraseblocks = { {4 * 1024 * 1024, 1} },
2047 .block_erase = spi_block_erase_60,
2048 }, {
2049 .eraseblocks = { {4 * 1024 * 1024, 1} },
2050 .block_erase = spi_block_erase_c7,
2051 },
2052 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002053 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002054 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002055 },
2056
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002057 {
2058 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002059 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002060 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002061 .manufacture_id = MX_ID,
2062 .model_id = MX_25L3235D,
2063 .total_size = 4096,
2064 .page_size = 256,
2065 .tested = TEST_UNTESTED,
2066 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002067 .probe_timing = TIMING_ZERO,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002068 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002069 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002070 .read = spi_chip_read,
2071 },
2072
2073 {
2074 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002075 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002076 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002077 .manufacture_id = MX_ID,
2078 .model_id = MX_25L6405,
2079 .total_size = 8192,
2080 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002081 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002082 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002083 .probe_timing = TIMING_ZERO,
Stephan Guillouxfd315502009-04-20 22:54:13 +00002084 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002085 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002086 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002087 },
2088
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002089 {
2090 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002091 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002092 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002093 .manufacture_id = MX_ID,
2094 .model_id = MX_25L12805,
2095 .total_size = 16384,
2096 .page_size = 256,
2097 .tested = TEST_UNTESTED,
2098 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002099 .probe_timing = TIMING_ZERO,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002100 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002101 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002102 .read = spi_chip_read,
2103 },
2104
2105 {
2106 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002107 .name = "MX29F001B",
2108 .bustype = CHIP_BUSTYPE_PARALLEL,
2109 .manufacture_id = MX_ID,
2110 .model_id = MX_29F001B,
2111 .total_size = 128,
2112 .page_size = 32 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002113 .tested = TEST_OK_PRE,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002114 .probe = probe_29f002,
2115 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
2116 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002117 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002118 .read = read_memmapped,
2119 },
2120
2121 {
2122 .vendor = "Macronix",
2123 .name = "MX29F001T",
2124 .bustype = CHIP_BUSTYPE_PARALLEL,
2125 .manufacture_id = MX_ID,
2126 .model_id = MX_29F001T,
2127 .total_size = 128,
2128 .page_size = 32 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002129 .tested = TEST_OK_PRE,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002130 .probe = probe_29f002,
2131 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
2132 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002133 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002134 .read = read_memmapped,
2135 },
2136
2137 {
2138 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002139 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002140 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002141 .manufacture_id = MX_ID,
2142 .model_id = MX_29F002B,
2143 .total_size = 256,
2144 .page_size = 64 * 1024,
2145 .tested = TEST_UNTESTED,
2146 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002147 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002148 .erase = NULL,
2149 .block_erasers =
2150 {
2151 {
2152 .eraseblocks = {
2153 {16 * 1024, 1},
2154 {8 * 1024, 2},
2155 {32 * 1024, 1},
2156 {64 * 1024, 3},
2157 },
2158 .block_erase = erase_sector_29f002, /* This erase function has 64k blocksize for eLiteFlash */
2159 }, {
2160 .eraseblocks = { {256 * 1024, 1} },
2161 .block_erase = erase_chip_29f002,
2162 },
2163 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002164 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002165 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002166 },
2167
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002168 {
2169 .vendor = "Macronix",
2170 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002171 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002172 .manufacture_id = MX_ID,
2173 .model_id = MX_29F002T,
2174 .total_size = 256,
2175 .page_size = 64 * 1024,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002176 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002177 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002178 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002179 .erase = NULL,
2180 .block_erasers =
2181 {
2182 {
2183 .eraseblocks = {
2184 {64 * 1024, 3},
2185 {32 * 1024, 1},
2186 {8 * 1024, 2},
2187 {16 * 1024, 1},
2188 },
2189 .block_erase = erase_sector_29f002, /* This erase function has 64k blocksize for eLiteFlash */
2190 }, {
2191 .eraseblocks = { {256 * 1024, 1} },
2192 .block_erase = erase_chip_29f002,
2193 },
2194 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002195 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002196 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002197 },
2198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002199 {
2200 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002201 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002202 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002203 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002204 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002205 .total_size = 512,
2206 .page_size = 64 * 1024,
2207 .tested = TEST_OK_PR,
2208 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002209 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002210 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002211 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002212 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002213 },
2214
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002215 {
2216 .vendor = "Numonyx",
2217 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002218 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002219 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002220 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002221 .total_size = 128,
2222 .page_size = 256,
2223 .tested = TEST_UNTESTED,
2224 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002225 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002226 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002227 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002228 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002229 },
2230
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002231 {
2232 .vendor = "Numonyx",
2233 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002234 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002235 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002236 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002237 .total_size = 256,
2238 .page_size = 256,
2239 .tested = TEST_UNTESTED,
2240 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002241 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002242 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002243 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002244 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002245 },
2246
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002247 {
2248 .vendor = "Numonyx",
2249 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002250 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002251 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002252 .model_id = ST_M25PE40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002253 .total_size = 256,
2254 .page_size = 256,
2255 .tested = TEST_UNTESTED,
2256 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002257 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002258 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002259 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002260 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002261 },
2262
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002263 {
2264 .vendor = "Numonyx",
2265 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002266 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002267 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002268 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002269 .total_size = 1024,
2270 .page_size = 256,
2271 .tested = TEST_OK_PREW,
2272 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002273 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002274 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002275 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002276 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002277 },
2278
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002279 {
2280 .vendor = "Numonyx",
2281 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002282 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002283 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002284 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002285 .total_size = 2048,
2286 .page_size = 256,
2287 .tested = TEST_UNTESTED,
2288 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002289 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002290 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002291 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002292 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002293 },
2294
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002295 {
2296 .vendor = "PMC",
2297 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002298 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002299 .manufacture_id = PMC_ID,
2300 .model_id = PMC_25LV010,
2301 .total_size = 128,
2302 .page_size = 256,
2303 .tested = TEST_UNTESTED,
2304 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002305 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002306 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002307 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002308 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002309 },
2310
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002311 {
2312 .vendor = "PMC",
2313 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002314 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002315 .manufacture_id = PMC_ID,
2316 .model_id = PMC_25LV016B,
2317 .total_size = 2048,
2318 .page_size = 256,
2319 .tested = TEST_UNTESTED,
2320 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002321 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002322 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002323 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002324 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002325 },
2326
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002327 {
2328 .vendor = "PMC",
2329 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002330 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002331 .manufacture_id = PMC_ID,
2332 .model_id = PMC_25LV020,
2333 .total_size = 256,
2334 .page_size = 256,
2335 .tested = TEST_UNTESTED,
2336 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002337 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002338 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002339 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002340 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002341 },
2342
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002343 {
2344 .vendor = "PMC",
2345 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002346 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002347 .manufacture_id = PMC_ID,
2348 .model_id = PMC_25LV040,
2349 .total_size = 512,
2350 .page_size = 256,
2351 .tested = TEST_UNTESTED,
2352 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002353 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002354 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002355 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002356 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002357 },
2358
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002359 {
2360 .vendor = "PMC",
2361 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002362 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002363 .manufacture_id = PMC_ID,
2364 .model_id = PMC_25LV080B,
2365 .total_size = 1024,
2366 .page_size = 256,
2367 .tested = TEST_UNTESTED,
2368 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002369 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002370 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002371 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002372 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002373 },
2374
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002375 {
2376 .vendor = "PMC",
2377 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002378 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002379 .manufacture_id = PMC_ID,
2380 .model_id = PMC_25LV512,
2381 .total_size = 64,
2382 .page_size = 256,
2383 .tested = TEST_UNTESTED,
2384 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002385 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002386 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002387 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002388 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002389 },
2390
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002391 {
2392 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00002393 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002394 .bustype = CHIP_BUSTYPE_PARALLEL,
2395 .manufacture_id = PMC_ID_NOPREFIX,
2396 .model_id = PMC_29F002T,
2397 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00002398 .page_size = 8 * 1024,
2399 .tested = TEST_OK_PRW,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002400 .probe = probe_29f040b,
2401 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00002402 .erase = NULL,
2403 .block_erasers =
2404 {
2405 {
2406 .eraseblocks = {
2407 {128 * 1024, 1},
2408 {96 * 1024, 1},
2409 {8 * 1024, 2},
2410 {16 * 1024, 1},
2411 },
2412 .block_erase = erase_sector_29f040b,
2413 }, {
2414 .eraseblocks = { {256 * 1024, 1} },
2415 .block_erase = erase_chip_29f040b,
2416 },
2417 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002418 .write = write_pm29f002,
2419 .read = read_memmapped,
2420 },
2421
2422 {
2423 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00002424 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002425 .bustype = CHIP_BUSTYPE_PARALLEL,
2426 .manufacture_id = PMC_ID_NOPREFIX,
2427 .model_id = PMC_29F002B,
2428 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00002429 .page_size = 8 * 1024,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002430 .tested = TEST_UNTESTED,
2431 .probe = probe_29f040b,
2432 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00002433 .erase = NULL,
2434 .block_erasers =
2435 {
2436 {
2437 .eraseblocks = {
2438 {16 * 1024, 1},
2439 {8 * 1024, 2},
2440 {96 * 1024, 1},
2441 {128 * 1024, 1},
2442 },
2443 .block_erase = erase_sector_29f040b,
2444 }, {
2445 .eraseblocks = { {256 * 1024, 1} },
2446 .block_erase = erase_chip_29f040b,
2447 },
2448 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002449 .write = write_pm29f002,
2450 .read = read_memmapped,
2451 },
2452
2453 {
2454 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002455 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002456 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002457 .manufacture_id = PMC_ID_NOPREFIX,
2458 .model_id = PMC_39F010,
2459 .total_size = 128,
2460 .page_size = 4096,
2461 .tested = TEST_OK_PREW,
2462 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002463 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002464 .erase = erase_chip_jedec,
2465 .write = write_49f002,
2466 .read = read_memmapped,
2467 },
2468
2469 {
2470 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002471 .name = "Pm49FL002",
Urja Rannikko038a3122009-06-28 19:19:25 +00002472 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002473 .manufacture_id = PMC_ID_NOPREFIX,
2474 .model_id = PMC_49FL002,
2475 .total_size = 256,
2476 .page_size = 16 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00002477 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002478 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00002479 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002480 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002481 .erase = erase_49fl00x,
2482 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002483 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002484 },
2485
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002486 {
2487 .vendor = "PMC",
2488 .name = "Pm49FL004",
Urja Rannikko038a3122009-06-28 19:19:25 +00002489 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002490 .manufacture_id = PMC_ID_NOPREFIX,
2491 .model_id = PMC_49FL004,
2492 .total_size = 512,
2493 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00002494 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002495 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00002496 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002497 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002498 .erase = erase_49fl00x,
2499 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002500 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002501 },
2502
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002503 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00002504 .vendor = "Sanyo",
2505 .name = "LF25FW203A",
2506 .bustype = CHIP_BUSTYPE_SPI,
2507 .manufacture_id = SANYO_ID,
2508 .model_id = SANYO_LE25FW203A,
2509 .total_size = 2048,
2510 .page_size = 256,
2511 .tested = TEST_UNTESTED,
2512 .probe = probe_spi_rdid,
2513 .probe_timing = TIMING_ZERO,
2514 .erase = spi_chip_erase_c7,
2515 .write = spi_chip_write_256,
2516 .read = spi_chip_read,
2517 },
2518
2519 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002520 .vendor = "Sharp",
2521 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00002522 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002523 .manufacture_id = SHARP_ID,
2524 .model_id = SHARP_LHF00L04,
2525 .total_size = 1024,
2526 .page_size = 64 * 1024,
2527 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00002528 .probe = probe_49lfxxxc,
2529 .probe_timing = TIMING_ZERO,
2530 .erase = NULL,
2531 .block_erasers =
2532 {
2533 {
2534 .eraseblocks = {
2535 {64 * 1024, 15},
2536 {8 * 1024, 8}
2537 },
2538 .block_erase = erase_lhf00l04_block,
2539 }, {
2540 .eraseblocks = {
2541 {1024 * 1024, 1}
2542 },
2543 .block_erase = NULL, /* 30 D0, only in PP mode */
2544 },
2545 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002546 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002547 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002548 },
2549
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002550 {
2551 .vendor = "Spansion",
2552 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002553 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002554 .manufacture_id = SPANSION_ID,
2555 .model_id = SPANSION_S25FL016A,
2556 .total_size = 2048,
2557 .page_size = 256,
2558 .tested = TEST_OK_PREW,
2559 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002560 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002561 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002562 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002563 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002564 },
2565
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002566 {
2567 .vendor = "SST",
2568 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002569 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002570 .manufacture_id = SST_ID,
2571 .model_id = SST_25VF016B,
2572 .total_size = 2048,
2573 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002574 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002575 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002576 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002577 .erase = NULL,
2578 .block_erasers =
2579 {
2580 {
2581 .eraseblocks = { {4 * 1024, 512} },
2582 .block_erase = spi_block_erase_20,
2583 }, {
2584 .eraseblocks = { {32 * 1024, 64} },
2585 .block_erase = spi_block_erase_52,
2586 }, {
2587 .eraseblocks = { {64 * 1024, 32} },
2588 .block_erase = spi_block_erase_d8,
2589 }, {
2590 .eraseblocks = { {2 * 1024 * 1024, 1} },
2591 .block_erase = spi_block_erase_60,
2592 }, {
2593 .eraseblocks = { {2 * 1024 * 1024, 1} },
2594 .block_erase = spi_block_erase_c7,
2595 },
2596 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002597 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002598 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002599 },
2600
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002601 {
2602 .vendor = "SST",
2603 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002604 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002605 .manufacture_id = SST_ID,
2606 .model_id = SST_25VF032B,
2607 .total_size = 4096,
2608 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002609 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002610 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002611 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002612 .erase = NULL,
2613 .block_erasers =
2614 {
2615 {
2616 .eraseblocks = { {4 * 1024, 1024} },
2617 .block_erase = spi_block_erase_20,
2618 }, {
2619 .eraseblocks = { {32 * 1024, 128} },
2620 .block_erase = spi_block_erase_52,
2621 }, {
2622 .eraseblocks = { {64 * 1024, 64} },
2623 .block_erase = spi_block_erase_d8,
2624 }, {
2625 .eraseblocks = { {4 * 1024 * 1024, 1} },
2626 .block_erase = spi_block_erase_60,
2627 }, {
2628 .eraseblocks = { {4 * 1024 * 1024, 1} },
2629 .block_erase = spi_block_erase_c7,
2630 },
2631 },
2632 .write = spi_chip_write_1,
2633 .read = spi_chip_read,
2634 },
2635
2636 {
2637 .vendor = "SST",
2638 .name = "SST25VF040.REMS",
2639 .bustype = CHIP_BUSTYPE_SPI,
2640 .manufacture_id = SST_ID,
2641 .model_id = SST_25VF040_REMS,
2642 .total_size = 512,
2643 .page_size = 256,
2644 .tested = TEST_OK_PR,
2645 .probe = probe_spi_rems,
2646 .probe_timing = TIMING_ZERO,
2647 .erase = NULL,
2648 .block_erasers =
2649 {
2650 {
2651 .eraseblocks = { {4 * 1024, 128} },
2652 .block_erase = spi_block_erase_20,
2653 }, {
2654 .eraseblocks = { {32 * 1024, 16} },
2655 .block_erase = spi_block_erase_52,
2656 }, {
2657 .eraseblocks = { {512 * 1024, 1} },
2658 .block_erase = spi_block_erase_60,
2659 },
2660 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002661 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002662 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002663 },
2664
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002665 {
2666 .vendor = "SST",
2667 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002668 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002669 .manufacture_id = SST_ID,
2670 .model_id = SST_25VF040B,
2671 .total_size = 512,
2672 .page_size = 256,
2673 .tested = TEST_UNTESTED,
2674 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002675 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002676 .erase = NULL,
2677 .block_erasers =
2678 {
2679 {
2680 .eraseblocks = { {4 * 1024, 128} },
2681 .block_erase = spi_block_erase_20,
2682 }, {
2683 .eraseblocks = { {32 * 1024, 16} },
2684 .block_erase = spi_block_erase_52,
2685 }, {
2686 .eraseblocks = { {64 * 1024, 8} },
2687 .block_erase = spi_block_erase_d8,
2688 }, {
2689 .eraseblocks = { {512 * 1024, 1} },
2690 .block_erase = spi_block_erase_60,
2691 }, {
2692 .eraseblocks = { {512 * 1024, 1} },
2693 .block_erase = spi_block_erase_c7,
2694 },
2695 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002696 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00002697 .read = spi_chip_read,
2698 },
2699
2700 {
2701 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00002702 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002703 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002704 .manufacture_id = SST_ID,
2705 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00002706 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002707 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00002708 .tested = TEST_OK_PR,
2709 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002710 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002711 .erase = NULL,
2712 .block_erasers =
2713 {
2714 {
2715 .eraseblocks = { {4 * 1024, 128} },
2716 .block_erase = spi_block_erase_20,
2717 }, {
2718 .eraseblocks = { {32 * 1024, 16} },
2719 .block_erase = spi_block_erase_52,
2720 }, {
2721 .eraseblocks = { {64 * 1024, 8} },
2722 .block_erase = spi_block_erase_d8,
2723 }, {
2724 .eraseblocks = { {512 * 1024, 1} },
2725 .block_erase = spi_block_erase_60,
2726 }, {
2727 .eraseblocks = { {512 * 1024, 1} },
2728 .block_erase = spi_block_erase_c7,
2729 },
2730 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002731 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00002732 .read = spi_chip_read,
2733 },
2734
2735 {
2736 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002737 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002738 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002739 .manufacture_id = SST_ID,
2740 .model_id = SST_25VF080B,
2741 .total_size = 1024,
2742 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002743 .tested = TEST_OK_PRW,
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,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002746 .erase = NULL,
2747 .block_erasers =
2748 {
2749 {
2750 .eraseblocks = { {4 * 1024, 256} },
2751 .block_erase = spi_block_erase_20,
2752 }, {
2753 .eraseblocks = { {32 * 1024, 32} },
2754 .block_erase = spi_block_erase_52,
2755 }, {
2756 .eraseblocks = { {64 * 1024, 16} },
2757 .block_erase = spi_block_erase_d8,
2758 }, {
2759 .eraseblocks = { {1024 * 1024, 1} },
2760 .block_erase = spi_block_erase_60,
2761 }, {
2762 .eraseblocks = { {1024 * 1024, 1} },
2763 .block_erase = spi_block_erase_c7,
2764 },
2765 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002766 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002767 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002768 },
2769
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002770 {
2771 .vendor = "SST",
2772 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002773 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002774 .manufacture_id = SST_ID,
2775 .model_id = SST_28SF040,
2776 .total_size = 512,
2777 .page_size = 256,
2778 .tested = TEST_UNTESTED,
2779 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002780 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002781 .erase = erase_28sf040,
2782 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002783 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002784 },
2785
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002786 {
2787 .vendor = "SST",
2788 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002789 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002790 .manufacture_id = SST_ID,
2791 .model_id = SST_29EE010,
2792 .total_size = 128,
2793 .page_size = 128,
2794 .tested = TEST_OK_PREW,
2795 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002796 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002797 .erase = erase_chip_jedec,
2798 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002799 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002800 },
2801
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002802 {
2803 .vendor = "SST",
2804 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002805 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002806 .manufacture_id = SST_ID,
2807 .model_id = SST_29LE010,
2808 .total_size = 128,
2809 .page_size = 128,
2810 .tested = TEST_UNTESTED,
2811 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002812 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002813 .erase = erase_chip_jedec,
2814 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002815 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002816 },
2817
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002818 {
2819 .vendor = "SST",
2820 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002821 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002822 .manufacture_id = SST_ID,
2823 .model_id = SST_29EE020A,
2824 .total_size = 256,
2825 .page_size = 128,
Peter Stugeb27d0a22009-02-22 21:07:28 +00002826 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002827 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002828 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002829 .erase = erase_chip_jedec,
2830 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002831 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002832 },
2833
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002834 {
2835 .vendor = "SST",
2836 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00002837 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002838 .manufacture_id = SST_ID,
2839 .model_id = SST_29LE020,
2840 .total_size = 256,
2841 .page_size = 128,
2842 .tested = TEST_UNTESTED,
2843 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002844 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002845 .erase = erase_chip_jedec,
2846 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002847 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002848 },
2849
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002850 {
2851 .vendor = "SST",
2852 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002853 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002854 .manufacture_id = SST_ID,
2855 .model_id = SST_39SF010,
2856 .total_size = 128,
2857 .page_size = 4096,
2858 .tested = TEST_OK_PREW,
2859 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002860 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002861 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002862 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002863 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002864 },
2865
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002866 {
2867 .vendor = "SST",
2868 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002869 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002870 .manufacture_id = SST_ID,
2871 .model_id = SST_39SF020,
2872 .total_size = 256,
2873 .page_size = 4096,
2874 .tested = TEST_OK_PREW,
2875 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002876 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002877 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002878 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002879 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002880 },
2881
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002882 {
2883 .vendor = "SST",
2884 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002885 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002886 .manufacture_id = SST_ID,
2887 .model_id = SST_39SF040,
2888 .total_size = 512,
2889 .page_size = 4096,
2890 .tested = TEST_OK_PREW,
2891 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002892 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002893 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002894 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002895 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002896 },
2897
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002898 {
2899 .vendor = "SST",
2900 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00002901 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002902 .manufacture_id = SST_ID,
2903 .model_id = SST_39VF512,
2904 .total_size = 64,
2905 .page_size = 4096,
Rudolf Mareke186da62009-05-17 18:24:24 +00002906 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002907 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002908 .probe_timing = 1, /* 150 ns*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002909 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002910 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002911 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002912 },
2913
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002914 {
2915 .vendor = "SST",
2916 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002917 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002918 .manufacture_id = SST_ID,
2919 .model_id = SST_39VF010,
2920 .total_size = 128,
2921 .page_size = 4096,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002922 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002923 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002924 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002925 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002926 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002927 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002928 },
2929
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002930 {
2931 .vendor = "SST",
2932 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00002933 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002934 .manufacture_id = SST_ID,
2935 .model_id = SST_39VF020,
2936 .total_size = 256,
2937 .page_size = 4096,
2938 .tested = TEST_OK_PREW,
2939 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002940 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002941 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002942 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002943 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002944 },
2945
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002946 {
2947 .vendor = "SST",
2948 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002949 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002950 .manufacture_id = SST_ID,
2951 .model_id = SST_39VF040,
2952 .total_size = 512,
2953 .page_size = 4096,
2954 .tested = TEST_OK_PROBE,
2955 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002956 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002957 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002958 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002959 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00002960 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002961
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002962 {
2963 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00002964 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00002965 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002966 .manufacture_id = SST_ID,
2967 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00002968 .total_size = 1024,
2969 .page_size = 4096,
2970 .tested = TEST_UNTESTED,
2971 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002972 .probe_timing = 1, /* 150 ns */
Peter Stuge8440cc02009-01-25 23:55:12 +00002973 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002974 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002975 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00002976 },
2977
2978 {
2979 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002980 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002981 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002982 .manufacture_id = SST_ID,
2983 .model_id = SST_49LF002A,
2984 .total_size = 256,
2985 .page_size = 16 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00002986 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002987 .tested = TEST_OK_PREW,
2988 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002989 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002990 .erase = erase_sst_fwhub,
2991 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002992 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002993 },
2994
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002995 {
2996 .vendor = "SST",
2997 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002998 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002999 .manufacture_id = SST_ID,
3000 .model_id = SST_49LF003A,
3001 .total_size = 384,
3002 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003003 .feature_bits = FEATURE_REGISTERMAP,
Peter Lemenkov45835c42009-09-25 01:09:18 +00003004 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003005 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003006 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003007 .erase = erase_sst_fwhub,
3008 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003009 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003010 },
3011
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003012 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00003013 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
3014 * and is only honored for 64k block erase, but not 4k sector erase.
3015 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003016 .vendor = "SST",
3017 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003018 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003019 .manufacture_id = SST_ID,
3020 .model_id = SST_49LF004A,
3021 .total_size = 512,
3022 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003023 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003024 .tested = TEST_OK_PREW,
3025 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003026 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00003027 .erase = NULL,
3028 .block_erasers =
3029 {
3030 {
3031 .eraseblocks = { {4 * 1024, 128} },
3032 .block_erase = erase_sector_jedec, /* missing unlock */
3033 }, {
3034 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00003035 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00003036 }, {
3037 .eraseblocks = { {512 * 1024, 1} },
3038 .block_erase = NULL, /* AA 55 80 AA 55 10, only in PP mode */
3039 },
3040 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003041 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003042 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003043 },
3044
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003045 {
3046 .vendor = "SST",
3047 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003048 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003049 .manufacture_id = SST_ID,
3050 .model_id = SST_49LF004C,
3051 .total_size = 512,
3052 .page_size = 4 * 1024,
3053 .tested = TEST_UNTESTED,
3054 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003055 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003056 .erase = erase_49lfxxxc,
3057 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003058 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003059 },
3060
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003061 {
3062 .vendor = "SST",
3063 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003064 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003065 .manufacture_id = SST_ID,
3066 .model_id = SST_49LF008A,
3067 .total_size = 1024,
3068 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003069 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003070 .tested = TEST_OK_PREW,
3071 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003072 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003073 .erase = erase_sst_fwhub,
3074 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003075 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003076 },
3077
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003078 {
3079 .vendor = "SST",
3080 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003081 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003082 .manufacture_id = SST_ID,
3083 .model_id = SST_49LF008C,
3084 .total_size = 1024,
3085 .page_size = 4 * 1024,
3086 .tested = TEST_UNTESTED,
3087 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003088 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003089 .erase = erase_49lfxxxc,
3090 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003091 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003092 },
3093
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003094 {
3095 .vendor = "SST",
3096 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003097 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003098 .manufacture_id = SST_ID,
3099 .model_id = SST_49LF016C,
3100 .total_size = 2048,
3101 .page_size = 4 * 1024,
3102 .tested = TEST_OK_PREW,
3103 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003104 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003105 .erase = erase_49lfxxxc,
3106 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003107 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003108 },
3109
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003110 {
3111 .vendor = "SST",
3112 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003113 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003114 .manufacture_id = SST_ID,
3115 .model_id = SST_49LF020,
3116 .total_size = 256,
3117 .page_size = 16 * 1024,
3118 .tested = TEST_OK_PR,
3119 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003120 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003121 .erase = erase_49lf040,
3122 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003123 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00003124 },
3125
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003126 {
3127 .vendor = "SST",
3128 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003129 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003130 .manufacture_id = SST_ID,
3131 .model_id = SST_49LF020A,
3132 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00003133 .page_size = 4 * 1024,
Nils Jacobsc0252682009-09-23 21:58:34 +00003134 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003135 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003136 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003137 .erase = erase_49lf040,
3138 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003139 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003140 },
3141
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003142 {
3143 .vendor = "SST",
3144 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003145 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003146 .manufacture_id = SST_ID,
3147 .model_id = SST_49LF040,
3148 .total_size = 512,
3149 .page_size = 4096,
3150 .tested = TEST_OK_PREW,
3151 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003152 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003153 .erase = erase_49lf040,
3154 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003155 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003156 },
3157
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003158 {
3159 .vendor = "SST",
3160 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003161 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003162 .manufacture_id = SST_ID,
3163 .model_id = SST_49LF040B,
3164 .total_size = 512,
3165 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003166 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003167 .tested = TEST_OK_PREW,
3168 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003169 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003170 .erase = erase_sst_fwhub,
3171 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003172 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003173 },
3174
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003175 {
3176 .vendor = "SST",
3177 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003178 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003179 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00003180 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003181 .total_size = 1024,
3182 .page_size = 4096,
3183 .tested = TEST_OK_PREW,
3184 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003185 .probe_timing = TIMING_FIXME,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003186 .erase = erase_49lf040,
3187 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003188 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003189 },
3190
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003191 {
3192 .vendor = "SST",
3193 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003194 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003195 .manufacture_id = SST_ID,
3196 .model_id = SST_49LF160C,
3197 .total_size = 2048,
3198 .page_size = 4 * 1024,
3199 .tested = TEST_OK_PREW,
3200 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003201 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003202 .erase = erase_49lfxxxc,
3203 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003204 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003205 },
3206
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003207 {
3208 .vendor = "ST",
3209 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003210 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003211 .manufacture_id = ST_ID,
3212 .model_id = ST_M25P05A,
3213 .total_size = 64,
3214 .page_size = 256,
3215 .tested = TEST_UNTESTED,
3216 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003217 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003218 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003219 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003220 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003221 },
3222
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00003223 /* The ST M25P05 is a bit of a problem. It has the same ID as the
3224 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
3225 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
3226 * only is successful if RDID does not work.
3227 */
3228 {
3229 .vendor = "ST",
3230 .name = "M25P05.RES",
3231 .bustype = CHIP_BUSTYPE_SPI,
3232 .manufacture_id = ST_ID,
3233 .model_id = ST_M25P05_RES,
3234 .total_size = 64,
3235 .page_size = 256,
3236 .tested = TEST_UNTESTED,
3237 .probe = probe_spi_res,
3238 .probe_timing = TIMING_ZERO,
3239 .erase = spi_chip_erase_c7,
3240 .write = spi_chip_write_1, /* 128 */
3241 .read = spi_chip_read,
3242 },
3243
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003244 {
3245 .vendor = "ST",
3246 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003247 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003248 .manufacture_id = ST_ID,
3249 .model_id = ST_M25P10A,
3250 .total_size = 128,
3251 .page_size = 256,
3252 .tested = TEST_UNTESTED,
3253 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003254 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003255 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003256 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003257 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003258 },
3259
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00003260 /* The ST M25P10 has the same problem as the M25P05. */
3261 {
3262 .vendor = "ST",
3263 .name = "M25P10.RES",
3264 .bustype = CHIP_BUSTYPE_SPI,
3265 .manufacture_id = ST_ID,
3266 .model_id = ST_M25P10_RES,
3267 .total_size = 128,
3268 .page_size = 256,
3269 .tested = TEST_UNTESTED,
3270 .probe = probe_spi_res,
3271 .probe_timing = TIMING_ZERO,
3272 .erase = spi_chip_erase_c7,
3273 .write = spi_chip_write_1, /* 128 */
3274 .read = spi_chip_read,
3275 },
3276
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003277 {
3278 .vendor = "ST",
3279 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003280 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003281 .manufacture_id = ST_ID,
3282 .model_id = ST_M25P20,
3283 .total_size = 256,
3284 .page_size = 256,
3285 .tested = TEST_UNTESTED,
3286 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003287 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003288 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003289 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003290 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003291 },
3292
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003293 {
3294 .vendor = "ST",
3295 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003296 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003297 .manufacture_id = ST_ID,
3298 .model_id = ST_M25P40,
3299 .total_size = 512,
3300 .page_size = 256,
Uwe Hermann04d5dc42009-07-03 17:12:05 +00003301 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003302 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003303 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003304 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003305 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003306 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003307 },
3308
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003309 {
3310 .vendor = "ST",
3311 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003312 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003313 .manufacture_id = ST_ID,
3314 .model_id = ST_M25P40_RES,
3315 .total_size = 512,
3316 .page_size = 256,
3317 .tested = TEST_UNTESTED,
3318 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003319 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003320 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003321 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003322 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003323 },
3324
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003325 {
3326 .vendor = "ST",
3327 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003328 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003329 .manufacture_id = ST_ID,
3330 .model_id = ST_M25P80,
3331 .total_size = 1024,
3332 .page_size = 256,
Carl-Daniel Hailfinger5190ec12009-06-22 10:09:07 +00003333 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003334 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003335 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003336 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003337 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003338 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003339 },
3340
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003341 {
3342 .vendor = "ST",
3343 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003344 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003345 .manufacture_id = ST_ID,
3346 .model_id = ST_M25P16,
3347 .total_size = 2048,
3348 .page_size = 256,
3349 .tested = TEST_OK_PREW,
3350 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003351 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003352 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003353 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003354 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003355 },
3356
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003357 {
3358 .vendor = "ST",
3359 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003360 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003361 .manufacture_id = ST_ID,
3362 .model_id = ST_M25P32,
3363 .total_size = 4096,
3364 .page_size = 256,
3365 .tested = TEST_OK_PREW,
3366 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003367 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003368 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003369 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003370 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003371 },
3372
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003373 {
3374 .vendor = "ST",
3375 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003376 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003377 .manufacture_id = ST_ID,
3378 .model_id = ST_M25P64,
3379 .total_size = 8192,
3380 .page_size = 256,
3381 .tested = TEST_UNTESTED,
3382 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003383 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003384 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003385 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003386 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003387 },
3388
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003389 {
3390 .vendor = "ST",
3391 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003392 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003393 .manufacture_id = ST_ID,
3394 .model_id = ST_M25P128,
3395 .total_size = 16384,
3396 .page_size = 256,
3397 .tested = TEST_UNTESTED,
3398 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003399 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003400 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003401 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003402 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003403 },
3404
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003405 {
3406 .vendor = "ST",
3407 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003408 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003409 .manufacture_id = ST_ID,
3410 .model_id = ST_M29F002B,
3411 .total_size = 256,
3412 .page_size = 64 * 1024,
3413 .tested = TEST_UNTESTED,
3414 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003415 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003416 .erase = erase_m29f002,
3417 .write = write_m29f002b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003418 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003419 },
3420
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003421 {
3422 .vendor = "ST",
3423 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003424 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003425 .manufacture_id = ST_ID,
3426 .model_id = ST_M29F002T,
3427 .total_size = 256,
3428 .page_size = 64 * 1024,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003429 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003430 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003431 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003432 .erase = erase_m29f002,
3433 .write = write_m29f002t,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003434 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003435 },
3436
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003437 {
3438 .vendor = "ST",
3439 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003440 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003441 .manufacture_id = ST_ID,
3442 .model_id = ST_M29F040B,
3443 .total_size = 512,
3444 .page_size = 64 * 1024,
3445 .tested = TEST_OK_PREW,
3446 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003447 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003448 .erase = erase_29f040b,
3449 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003450 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003451 },
3452
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003453 {
3454 .vendor = "ST",
3455 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003456 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003457 .manufacture_id = ST_ID,
3458 .model_id = ST_M29F400BT,
3459 .total_size = 512,
3460 .page_size = 64 * 1024,
3461 .tested = TEST_UNTESTED,
3462 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003463 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003464 .erase = erase_m29f400bt,
3465 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003466 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003467 },
3468
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003469 {
3470 .vendor = "ST",
3471 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003472 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003473 .manufacture_id = ST_ID,
3474 .model_id = ST_M29W010B,
3475 .total_size = 128,
3476 .page_size = 16 * 1024,
3477 .tested = TEST_UNTESTED,
3478 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003479 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003480 .erase = erase_chip_jedec,
3481 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003482 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003483 },
3484
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003485 {
3486 .vendor = "ST",
3487 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003488 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003489 .manufacture_id = ST_ID,
3490 .model_id = ST_M29W040B,
3491 .total_size = 512,
3492 .page_size = 64 * 1024,
3493 .tested = TEST_UNTESTED,
3494 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003495 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003496 .erase = erase_chip_jedec,
3497 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003498 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003499 },
3500
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003501 {
3502 .vendor = "ST",
3503 .name = "M50FLW040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003504 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003505 .manufacture_id = ST_ID,
3506 .model_id = ST_M50FLW040A,
3507 .total_size = 512,
3508 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003509 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003510 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003511 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003512 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003513 .erase = erase_stm50flw0x0x,
3514 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003515 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003516 },
3517
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003518 {
3519 .vendor = "ST",
3520 .name = "M50FLW040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003521 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003522 .manufacture_id = ST_ID,
3523 .model_id = ST_M50FLW040B,
3524 .total_size = 512,
3525 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003526 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003527 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003528 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003529 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003530 .erase = erase_stm50flw0x0x,
3531 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003532 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003533 },
3534
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003535 {
3536 .vendor = "ST",
3537 .name = "M50FLW080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003538 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003539 .manufacture_id = ST_ID,
3540 .model_id = ST_M50FLW080A,
3541 .total_size = 1024,
3542 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003543 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003544 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003545 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003546 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003547 .erase = erase_stm50flw0x0x,
3548 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003549 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003550 },
3551
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003552 {
3553 .vendor = "ST",
3554 .name = "M50FLW080B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003555 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003556 .manufacture_id = ST_ID,
3557 .model_id = ST_M50FLW080B,
3558 .total_size = 1024,
3559 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003560 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003561 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003562 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003563 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003564 .erase = erase_stm50flw0x0x,
3565 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003566 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003567 },
3568
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003569 {
3570 .vendor = "ST",
3571 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00003572 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003573 .manufacture_id = ST_ID,
3574 .model_id = ST_M50FW002,
3575 .total_size = 256,
3576 .page_size = 64 * 1024,
3577 .tested = TEST_UNTESTED,
3578 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003579 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003580 .erase = NULL,
3581 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003582 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003583 },
3584
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003585 {
3586 .vendor = "ST",
3587 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00003588 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003589 .manufacture_id = ST_ID,
3590 .model_id = ST_M50FW016,
3591 .total_size = 2048,
3592 .page_size = 64 * 1024,
3593 .tested = TEST_UNTESTED,
3594 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003595 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003596 .erase = erase_82802ab,
3597 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003598 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003599 },
3600
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003601 {
3602 .vendor = "ST",
3603 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003604 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003605 .manufacture_id = ST_ID,
3606 .model_id = ST_M50FW040,
3607 .total_size = 512,
3608 .page_size = 64 * 1024,
3609 .tested = TEST_OK_PREW,
3610 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003611 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003612 .erase = erase_82802ab,
3613 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003614 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003615 },
3616
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003617 {
3618 .vendor = "ST",
3619 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00003620 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003621 .manufacture_id = ST_ID,
3622 .model_id = ST_M50FW080,
3623 .total_size = 1024,
3624 .page_size = 64 * 1024,
Peter Stugea657e942009-01-24 23:01:08 +00003625 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003626 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003627 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003628 .erase = erase_82802ab,
3629 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003630 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003631 },
3632
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003633 {
3634 .vendor = "ST",
3635 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00003636 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003637 .manufacture_id = ST_ID,
3638 .model_id = ST_M50LPW116,
3639 .total_size = 2048,
3640 .page_size = 64 * 1024,
3641 .tested = TEST_UNTESTED,
3642 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003643 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003644 .erase = erase_chip_jedec,
3645 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003646 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003647 },
3648
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003649 {
3650 .vendor = "SyncMOS",
3651 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003652 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003653 .manufacture_id = SYNCMOS_ID,
3654 .model_id = S29C31004T,
3655 .total_size = 512,
3656 .page_size = 128,
3657 .tested = TEST_UNTESTED,
3658 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003659 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003660 .erase = erase_chip_jedec,
3661 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003662 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003663 },
3664
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003665 {
3666 .vendor = "SyncMOS",
3667 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003668 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003669 .manufacture_id = SYNCMOS_ID,
3670 .model_id = S29C51001T,
3671 .total_size = 128,
3672 .page_size = 128,
3673 .tested = TEST_UNTESTED,
3674 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003675 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003676 .erase = erase_chip_jedec,
3677 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003678 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003679 },
3680
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003681 {
3682 .vendor = "SyncMOS",
3683 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003684 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003685 .manufacture_id = SYNCMOS_ID,
3686 .model_id = S29C51002T,
3687 .total_size = 256,
3688 .page_size = 128,
3689 .tested = TEST_OK_PREW,
3690 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003691 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003692 .erase = erase_chip_jedec,
3693 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003694 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003695 },
3696
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003697 {
3698 .vendor = "SyncMOS",
3699 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003700 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003701 .manufacture_id = SYNCMOS_ID,
3702 .model_id = S29C51004T,
3703 .total_size = 512,
3704 .page_size = 128,
3705 .tested = TEST_UNTESTED,
3706 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003707 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003708 .erase = erase_chip_jedec,
3709 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003710 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003711 },
3712
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003713 {
Uwe Hermanna106d152009-05-27 23:17:40 +00003714 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003715 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00003716 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003717 .manufacture_id = TI_OLD_ID,
3718 .model_id = TI_TMS29F002RB,
3719 .total_size = 256,
3720 .page_size = 16384, /* Non-uniform sectors */
3721 .tested = TEST_UNTESTED,
3722 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003723 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003724 .erase = NULL,
3725 .write = NULL,
3726 .read = read_memmapped,
3727 },
3728
3729 {
Uwe Hermanna106d152009-05-27 23:17:40 +00003730 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003731 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003732 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003733 .manufacture_id = TI_OLD_ID,
3734 .model_id = TI_TMS29F002RT,
3735 .total_size = 256,
3736 .page_size = 16384, /* Non-uniform sectors */
3737 .tested = TEST_UNTESTED,
3738 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003739 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003740 .erase = NULL,
3741 .write = NULL,
3742 .read = read_memmapped,
3743 },
3744
3745 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003746 .vendor = "Winbond",
3747 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003748 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003749 .manufacture_id = WINBOND_NEX_ID,
3750 .model_id = W_25X10,
3751 .total_size = 128,
3752 .page_size = 256,
3753 .tested = TEST_UNTESTED,
3754 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003755 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003756 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003757 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003758 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003759 },
3760
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003761 {
3762 .vendor = "Winbond",
3763 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003764 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003765 .manufacture_id = WINBOND_NEX_ID,
3766 .model_id = W_25X20,
3767 .total_size = 256,
3768 .page_size = 256,
3769 .tested = TEST_UNTESTED,
3770 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003771 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003772 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003773 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003774 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003775 },
3776
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003777 {
3778 .vendor = "Winbond",
3779 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003780 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003781 .manufacture_id = WINBOND_NEX_ID,
3782 .model_id = W_25X40,
3783 .total_size = 512,
3784 .page_size = 256,
3785 .tested = TEST_OK_PREW,
3786 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003787 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003788 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003789 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003790 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003791 },
3792
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003793 {
3794 .vendor = "Winbond",
3795 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003796 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003797 .manufacture_id = WINBOND_NEX_ID,
3798 .model_id = W_25X80,
3799 .total_size = 1024,
3800 .page_size = 256,
3801 .tested = TEST_OK_PREW,
3802 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003803 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003804 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003805 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003806 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003807 },
3808
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003809 {
3810 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00003811 .name = "W25x16",
3812 .bustype = CHIP_BUSTYPE_SPI,
3813 .manufacture_id = WINBOND_NEX_ID,
3814 .model_id = W_25X16,
3815 .total_size = 2048,
3816 .page_size = 256,
3817 .tested = TEST_OK_PR,
3818 .probe = probe_spi_rdid,
3819 .probe_timing = TIMING_ZERO,
3820 .erase = spi_chip_erase_c7,
3821 .write = spi_chip_write_256,
3822 .read = spi_chip_read,
3823 },
3824
3825 {
3826 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00003827 .name = "W25x32",
3828 .bustype = CHIP_BUSTYPE_SPI,
3829 .manufacture_id = WINBOND_NEX_ID,
3830 .model_id = W_25X32,
3831 .total_size = 4096,
3832 .page_size = 256,
3833 .tested = TEST_OK_PROBE,
3834 .probe = probe_spi_rdid,
3835 .probe_timing = TIMING_ZERO,
3836 .erase = spi_chip_erase_c7,
3837 .write = spi_chip_write_256,
3838 .read = spi_chip_read,
3839 },
3840
3841 {
3842 .vendor = "Winbond",
3843 .name = "W25x64",
3844 .bustype = CHIP_BUSTYPE_SPI,
3845 .manufacture_id = WINBOND_NEX_ID,
3846 .model_id = W_25X64,
3847 .total_size = 8192,
3848 .page_size = 256,
3849 .tested = TEST_UNTESTED,
3850 .probe = probe_spi_rdid,
3851 .probe_timing = TIMING_ZERO,
3852 .erase = spi_chip_erase_c7,
3853 .write = spi_chip_write_256,
3854 .read = spi_chip_read,
3855 },
3856
3857 {
3858 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003859 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00003860 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003861 .manufacture_id = WINBOND_ID,
3862 .model_id = W_29C011,
3863 .total_size = 128,
3864 .page_size = 128,
3865 .tested = TEST_OK_PREW,
3866 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003867 .probe_timing = 10, /* used datasheet for the W29C011A */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003868 .erase = erase_chip_jedec,
3869 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003870 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003871 },
3872
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003873 {
3874 .vendor = "Winbond",
3875 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00003876 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003877 .manufacture_id = WINBOND_ID,
3878 .model_id = W_29C020C,
3879 .total_size = 256,
3880 .page_size = 128,
3881 .tested = TEST_OK_PREW,
3882 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003883 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003884 .erase = erase_chip_jedec,
3885 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003886 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003887 },
3888
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003889 {
3890 .vendor = "Winbond",
3891 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00003892 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003893 .manufacture_id = WINBOND_ID,
3894 .model_id = W_29C040P,
3895 .total_size = 512,
3896 .page_size = 256,
Carl-Daniel Hailfinger8a8a2262009-11-14 03:48:33 +00003897 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003898 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003899 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003900 .erase = erase_chip_jedec,
3901 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003902 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003903 },
3904
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003905 {
3906 .vendor = "Winbond",
3907 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00003908 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003909 .manufacture_id = WINBOND_ID,
3910 .model_id = W_29C011,
3911 .total_size = 128,
3912 .page_size = 128,
3913 .tested = TEST_OK_PREW,
3914 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003915 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003916 .erase = erase_chip_jedec,
3917 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003918 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003919 },
3920
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003921 {
3922 .vendor = "Winbond",
3923 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003924 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003925 .manufacture_id = WINBOND_ID,
3926 .model_id = W_39V040A,
3927 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003928 .page_size = 64 * 1024,
Uwe Hermann690bcba2009-05-21 17:11:25 +00003929 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003930 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003931 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003932 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003933 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003934 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003935 },
3936
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003937 {
3938 .vendor = "Winbond",
3939 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003940 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003941 .manufacture_id = WINBOND_ID,
3942 .model_id = W_39V040B,
3943 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003944 .page_size = 64 * 1024,
Luc Verhaegen8bfb59c2009-07-08 14:50:36 +00003945 .tested = TEST_OK_PR | TEST_BAD_ERASE | TEST_BAD_WRITE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003946 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003947 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003948 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003949 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003950 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003951 },
3952
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003953 {
3954 .vendor = "Winbond",
3955 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003956 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003957 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003958 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003959 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003960 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003961 .tested = TEST_OK_PREW,
3962 .probe = probe_w39v040c,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003963 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v040c.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003964 .erase = erase_w39v040c,
3965 .write = write_w39v040c,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003966 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003967 },
3968
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003969 {
3970 .vendor = "Winbond",
3971 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003972 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003973 .manufacture_id = WINBOND_ID,
3974 .model_id = W_39V040FA,
3975 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003976 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003977 .tested = TEST_OK_PREW,
3978 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003979 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003980 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003981 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003982 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003983 },
3984
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003985 {
3986 .vendor = "Winbond",
3987 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003988 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003989 .manufacture_id = WINBOND_ID,
3990 .model_id = W_39V080A,
3991 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00003992 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003993 .tested = TEST_OK_PREW,
3994 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003995 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003996 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003997 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003998 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003999 },
4000
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004001 {
4002 .vendor = "Winbond",
4003 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00004004 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004005 .manufacture_id = WINBOND_ID,
4006 .model_id = W_49F002U,
4007 .total_size = 256,
4008 .page_size = 128,
4009 .tested = TEST_OK_PREW,
4010 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004011 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004012 .erase = erase_chip_jedec,
4013 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004014 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004015 },
4016
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004017 {
4018 .vendor = "Winbond",
4019 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004020 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004021 .manufacture_id = WINBOND_ID,
4022 .model_id = W_49V002A,
4023 .total_size = 256,
4024 .page_size = 128,
4025 .tested = TEST_OK_PREW,
4026 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004027 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004028 .erase = erase_chip_jedec,
4029 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004030 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004031 },
4032
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004033 {
4034 .vendor = "Winbond",
4035 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004036 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004037 .manufacture_id = WINBOND_ID,
4038 .model_id = W_49V002FA,
4039 .total_size = 256,
4040 .page_size = 128,
4041 .tested = TEST_UNTESTED,
4042 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004043 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004044 .erase = erase_chip_jedec,
4045 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004046 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004047 },
4048
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004049 {
4050 .vendor = "Winbond",
4051 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004052 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004053 .manufacture_id = WINBOND_ID,
4054 .model_id = W_39V080FA,
4055 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00004056 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004057 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004058 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004059 .probe = probe_jedec,
4060 .probe_timing = TIMING_FIXME,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004061 .erase = erase_winbond_fwhub,
4062 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004063 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004064 },
4065
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004066 {
4067 .vendor = "Winbond",
4068 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004069 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004070 .manufacture_id = WINBOND_ID,
4071 .model_id = W_39V080FA_DM,
4072 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00004073 .page_size = 64 * 1024,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004074 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004075 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00004076 .probe = probe_jedec,
4077 .probe_timing = TIMING_FIXME,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004078 .erase = erase_winbond_fwhub,
4079 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004080 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004081 },
4082
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004083 {
4084 .vendor = "Atmel",
4085 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004086 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004087 .manufacture_id = ATMEL_ID,
4088 .model_id = GENERIC_DEVICE_ID,
4089 .total_size = 0,
4090 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004091 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004092 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004093 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004094 .erase = NULL,
4095 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004096 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004097 },
4098
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004099 {
4100 .vendor = "EON",
4101 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004102 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004103 .manufacture_id = EON_ID_NOPREFIX,
4104 .model_id = GENERIC_DEVICE_ID,
4105 .total_size = 0,
4106 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004107 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004108 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004109 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004110 .erase = NULL,
4111 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004112 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004113 },
4114
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004115 {
4116 .vendor = "Macronix",
4117 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004118 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004119 .manufacture_id = MX_ID,
4120 .model_id = GENERIC_DEVICE_ID,
4121 .total_size = 0,
4122 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004123 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004124 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004125 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004126 .erase = NULL,
4127 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004128 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004129 },
4130
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004131 {
4132 .vendor = "PMC",
4133 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004134 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004135 .manufacture_id = PMC_ID,
4136 .model_id = GENERIC_DEVICE_ID,
4137 .total_size = 0,
4138 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004139 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004140 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004141 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004142 .erase = NULL,
4143 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004144 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004145 },
4146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004147 {
4148 .vendor = "SST",
4149 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004150 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004151 .manufacture_id = SST_ID,
4152 .model_id = GENERIC_DEVICE_ID,
4153 .total_size = 0,
4154 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004155 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004156 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004157 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004158 .erase = NULL,
4159 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004160 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004161 },
4162
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004163 {
4164 .vendor = "ST",
4165 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004166 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004167 .manufacture_id = ST_ID,
4168 .model_id = GENERIC_DEVICE_ID,
4169 .total_size = 0,
4170 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004171 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004172 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004173 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004174 .erase = NULL,
4175 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004176 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004177 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00004178
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00004179 {
Sean Nelson118e1d62009-11-24 02:08:11 +00004180 .vendor = "Sanyo",
4181 .name = "unknown Sanyo SPI chip",
4182 .bustype = CHIP_BUSTYPE_SPI,
4183 .manufacture_id = SANYO_ID,
4184 .model_id = GENERIC_DEVICE_ID,
4185 .total_size = 0,
4186 .page_size = 256,
4187 .tested = TEST_BAD_PREW,
4188 .probe = probe_spi_rdid,
4189 .probe_timing = TIMING_ZERO,
4190 .erase = NULL,
4191 .write = NULL,
4192 .read = NULL,
4193 },
4194
4195 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00004196 .vendor = "Generic",
4197 .name = "unknown SPI chip (RDID)",
4198 .bustype = CHIP_BUSTYPE_SPI,
4199 .manufacture_id = GENERIC_MANUF_ID,
4200 .model_id = GENERIC_DEVICE_ID,
4201 .total_size = 0,
4202 .page_size = 256,
4203 .tested = TEST_BAD_PREW,
4204 .probe = probe_spi_rdid,
4205 .erase = NULL,
4206 .write = NULL,
4207 },
4208 {
4209 .vendor = "Generic",
4210 .name = "unknown SPI chip (REMS)",
4211 .bustype = CHIP_BUSTYPE_SPI,
4212 .manufacture_id = GENERIC_MANUF_ID,
4213 .model_id = GENERIC_DEVICE_ID,
4214 .total_size = 0,
4215 .page_size = 256,
4216 .tested = TEST_BAD_PREW,
4217 .probe = probe_spi_rems,
4218 .erase = NULL,
4219 .write = NULL,
4220 },
4221
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004222 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00004223};