blob: 50a1226fdef9c820d419c8900680564240e8f9df [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,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000830 .probe = probe_jedec,
831 .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,
1255 .tested = TEST_OK_PREW,
1256 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +00001257 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001258 .erase = erase_49fl00x,
1259 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001260 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001261 },
1262
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001263 {
1264 .vendor = "EMST",
1265 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001266 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001267 .manufacture_id = EMST_ID,
1268 .model_id = EMST_F49B002UA,
1269 .total_size = 256,
1270 .page_size = 4096,
1271 .tested = TEST_UNTESTED,
1272 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001273 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001274 .erase = erase_chip_jedec,
1275 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001276 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001277 },
1278
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001279 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001280 .vendor = "Eon",
1281 .name = "EN25B05",
1282 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001283 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001284 .model_id = EN_25B05,
1285 .total_size = 64,
1286 .page_size = 256,
1287 .tested = TEST_UNTESTED,
1288 .probe = probe_spi_rdid,
1289 .probe_timing = TIMING_ZERO,
1290 .erase = spi_chip_erase_c7,
1291 .write = spi_chip_write_256,
1292 .read = spi_chip_read,
1293 },
1294
1295 {
1296 .vendor = "Eon",
1297 .name = "EN25B10",
1298 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001299 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001300 .model_id = EN_25B10,
1301 .total_size = 128,
1302 .page_size = 256,
1303 .tested = TEST_UNTESTED,
1304 .probe = probe_spi_rdid,
1305 .probe_timing = TIMING_ZERO,
1306 .erase = spi_chip_erase_c7,
1307 .write = spi_chip_write_256,
1308 .read = spi_chip_read,
1309 },
1310
1311 {
1312 .vendor = "Eon",
1313 .name = "EN25B20",
1314 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001315 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001316 .model_id = EN_25B20,
1317 .total_size = 256,
1318 .page_size = 256,
1319 .tested = TEST_UNTESTED,
1320 .probe = probe_spi_rdid,
1321 .probe_timing = TIMING_ZERO,
1322 .erase = spi_chip_erase_c7,
1323 .write = spi_chip_write_256,
1324 .read = spi_chip_read,
1325 },
1326
1327 {
1328 .vendor = "Eon",
1329 .name = "EN25B40",
1330 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001331 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001332 .model_id = EN_25B40,
1333 .total_size = 512,
1334 .page_size = 256,
1335 .tested = TEST_UNTESTED,
1336 .probe = probe_spi_rdid,
1337 .probe_timing = TIMING_ZERO,
1338 .erase = spi_chip_erase_c7,
1339 .write = spi_chip_write_256,
1340 .read = spi_chip_read,
1341 },
1342
1343 {
1344 .vendor = "Eon",
1345 .name = "EN25B80",
1346 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001347 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001348 .model_id = EN_25B80,
1349 .total_size = 1024,
1350 .page_size = 256,
1351 .tested = TEST_UNTESTED,
1352 .probe = probe_spi_rdid,
1353 .probe_timing = TIMING_ZERO,
1354 .erase = spi_chip_erase_c7,
1355 .write = spi_chip_write_256,
1356 .read = spi_chip_read,
1357 },
1358
1359 {
1360 .vendor = "Eon",
1361 .name = "EN25B16",
1362 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001363 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001364 .model_id = EN_25B16,
1365 .total_size = 2048,
1366 .page_size = 256,
1367 .tested = TEST_UNTESTED,
1368 .probe = probe_spi_rdid,
1369 .probe_timing = TIMING_ZERO,
1370 .erase = spi_chip_erase_c7,
1371 .write = spi_chip_write_256,
1372 .read = spi_chip_read,
1373 },
1374
1375 {
1376 .vendor = "Eon",
1377 .name = "EN25B32",
1378 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001379 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001380 .model_id = EN_25B32,
1381 .total_size = 4096,
1382 .page_size = 256,
1383 .tested = TEST_UNTESTED,
1384 .probe = probe_spi_rdid,
1385 .probe_timing = TIMING_ZERO,
1386 .erase = spi_chip_erase_c7,
1387 .write = spi_chip_write_256,
1388 .read = spi_chip_read,
1389 },
1390
1391 {
1392 .vendor = "Eon",
1393 .name = "EN25B64",
1394 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001395 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001396 .model_id = EN_25B64,
1397 .total_size = 8192,
1398 .page_size = 256,
1399 .tested = TEST_UNTESTED,
1400 .probe = probe_spi_rdid,
1401 .probe_timing = TIMING_ZERO,
1402 .erase = spi_chip_erase_c7,
1403 .write = spi_chip_write_256,
1404 .read = spi_chip_read,
1405 },
1406
1407 {
1408 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001409 .name = "EN25D16",
1410 .bustype = CHIP_BUSTYPE_SPI,
1411 .manufacture_id = EON_ID_NOPREFIX,
1412 .model_id = EN_25D16,
1413 .total_size = 2048,
1414 .page_size = 256,
1415 .tested = TEST_UNTESTED,
1416 .probe = probe_spi_rdid,
1417 .probe_timing = TIMING_ZERO,
1418 .erase = spi_chip_erase_60_c7,
1419 .write = spi_chip_write_256,
1420 .read = spi_chip_read,
1421 },
1422
1423 {
1424 .vendor = "Eon",
1425 .name = "EN25F05",
1426 .bustype = CHIP_BUSTYPE_SPI,
1427 .manufacture_id = EON_ID_NOPREFIX,
1428 .model_id = EN_25F05,
1429 .total_size = 64,
1430 .page_size = 256,
1431 .tested = TEST_UNTESTED,
1432 .probe = probe_spi_rdid,
1433 .probe_timing = TIMING_ZERO,
1434 .erase = spi_chip_erase_60_c7,
1435 .write = spi_chip_write_256,
1436 .read = spi_chip_read,
1437 },
1438
1439 {
1440 .vendor = "Eon",
1441 .name = "EN25F10",
1442 .bustype = CHIP_BUSTYPE_SPI,
1443 .manufacture_id = EON_ID_NOPREFIX,
1444 .model_id = EN_25F10,
1445 .total_size = 128,
1446 .page_size = 256,
1447 .tested = TEST_UNTESTED,
1448 .probe = probe_spi_rdid,
1449 .probe_timing = TIMING_ZERO,
1450 .erase = spi_chip_erase_60_c7,
1451 .write = spi_chip_write_256,
1452 .read = spi_chip_read,
1453 },
1454
1455 {
1456 .vendor = "Eon",
1457 .name = "EN25F20",
1458 .bustype = CHIP_BUSTYPE_SPI,
1459 .manufacture_id = EON_ID_NOPREFIX,
1460 .model_id = EN_25F20,
1461 .total_size = 256,
1462 .page_size = 256,
1463 .tested = TEST_UNTESTED,
1464 .probe = probe_spi_rdid,
1465 .probe_timing = TIMING_ZERO,
1466 .erase = spi_chip_erase_60_c7,
1467 .write = spi_chip_write_256,
1468 .read = spi_chip_read,
1469 },
1470
1471 {
1472 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001473 .name = "EN25F40",
1474 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001475 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001476 .model_id = EN_25F40,
1477 .total_size = 512,
1478 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001479 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001480 .probe = probe_spi_rdid,
1481 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001482 .erase = NULL,
1483 .block_erasers =
1484 {
1485 {
1486 .eraseblocks = { {4 * 1024, 2048} },
1487 .block_erase = spi_block_erase_20,
1488 }, {
1489 .eraseblocks = { {4 * 1024, 2048} },
1490 .block_erase = spi_block_erase_d8,
1491 }, {
1492 .eraseblocks = { {8 * 1024 * 1024, 1} },
1493 .block_erase = spi_block_erase_60,
1494 }, {
1495 .eraseblocks = { {8 * 1024 * 1024, 1} },
1496 .block_erase = spi_block_erase_c7,
1497 },
1498 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001499 .write = spi_chip_write_256,
1500 .read = spi_chip_read,
1501 },
1502
1503 {
1504 .vendor = "Eon",
1505 .name = "EN25F80",
1506 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001507 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001508 .model_id = EN_25F80,
1509 .total_size = 1024,
1510 .page_size = 256,
1511 .tested = TEST_UNTESTED,
1512 .probe = probe_spi_rdid,
1513 .probe_timing = TIMING_ZERO,
1514 .erase = spi_chip_erase_60_c7,
1515 .write = spi_chip_write_256,
1516 .read = spi_chip_read,
1517 },
1518
1519 {
1520 .vendor = "Eon",
1521 .name = "EN25F16",
1522 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001523 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001524 .model_id = EN_25F16,
1525 .total_size = 2048,
1526 .page_size = 256,
1527 .tested = TEST_UNTESTED,
1528 .probe = probe_spi_rdid,
1529 .probe_timing = TIMING_ZERO,
1530 .erase = spi_chip_erase_60_c7,
1531 .write = spi_chip_write_256,
1532 .read = spi_chip_read,
1533 },
1534
1535 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001536 .vendor = "Eon",
1537 .name = "EN25F32",
1538 .bustype = CHIP_BUSTYPE_SPI,
1539 .manufacture_id = EON_ID_NOPREFIX,
1540 .model_id = EN_25F32,
1541 .total_size = 4096,
1542 .page_size = 256,
1543 .tested = TEST_UNTESTED,
1544 .probe = probe_spi_rdid,
1545 .probe_timing = TIMING_ZERO,
1546 .erase = spi_chip_erase_60_c7,
1547 .write = spi_chip_write_256,
1548 .read = spi_chip_read,
1549 },
1550
1551 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001552 .vendor = "EON",
1553 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001554 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001555 .manufacture_id = EON_ID,
1556 .model_id = EN_29F002B,
1557 .total_size = 256,
1558 .page_size = 256,
1559 .tested = TEST_UNTESTED,
1560 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001561 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001562 .erase = NULL,
1563 .block_erasers =
1564 {
1565 {
1566 .eraseblocks = {
1567 {64 * 1024, 3},
1568 {32 * 1024, 1},
1569 {8 * 1024, 2},
1570 {16 * 1024, 1},
1571 },
1572 .block_erase = erase_sector_jedec,
1573 }, {
1574 .eraseblocks = { {256 * 1024, 1} },
1575 .block_erase = erase_chip_block_jedec,
1576 },
1577 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001578 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001579 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001580 },
1581
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001582 {
1583 .vendor = "EON",
1584 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001585 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001586 .manufacture_id = EON_ID,
1587 .model_id = EN_29F002T,
1588 .total_size = 256,
1589 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001590 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001591 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001592 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001593 .erase = NULL,
1594 .block_erasers =
1595 {
1596 {
1597 .eraseblocks = {
1598 {16 * 1024, 1},
1599 {8 * 1024, 2},
1600 {32 * 1024, 1},
1601 {64 * 1024, 3},
1602 },
1603 .block_erase = erase_sector_jedec,
1604 }, {
1605 .eraseblocks = { {256 * 1024, 1} },
1606 .block_erase = erase_chip_block_jedec,
1607 },
1608 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001609 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001610 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001611 },
1612
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001613 {
1614 .vendor = "Fujitsu",
1615 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001616 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001617 .manufacture_id = FUJITSU_ID,
1618 .model_id = MBM29F004BC,
1619 .total_size = 512,
1620 .page_size = 64 * 1024,
1621 .tested = TEST_UNTESTED,
1622 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001623 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001624 .erase = NULL,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001625 .block_erasers =
1626 {
1627 {
1628 .eraseblocks = {
1629 {16 * 1024, 1},
1630 {8 * 1024, 2},
1631 {32 * 1024, 1},
1632 {64 * 1024, 7},
1633 },
1634 .block_erase = erase_sector_29f040b,
1635 }, {
1636 .eraseblocks = { {512 * 1024, 1} },
1637 .block_erase = erase_chip_29f040b,
1638 },
1639 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001640 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001641 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001642 },
1643
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001644 {
1645 .vendor = "Fujitsu",
1646 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001647 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001648 .manufacture_id = FUJITSU_ID,
1649 .model_id = MBM29F004TC,
1650 .total_size = 512,
1651 .page_size = 64 * 1024,
1652 .tested = TEST_UNTESTED,
1653 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001654 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001655 .erase = NULL,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001656 .block_erasers =
1657 {
1658 {
1659 .eraseblocks = {
1660 {64 * 1024, 7},
1661 {32 * 1024, 1},
1662 {8 * 1024, 2},
1663 {16 * 1024, 1},
1664 },
1665 .block_erase = erase_sector_29f040b,
1666 }, {
1667 .eraseblocks = { {512 * 1024, 1} },
1668 .block_erase = erase_chip_29f040b,
1669 },
1670 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001671 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001672 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001673 },
1674
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001675 {
1676 .vendor = "Fujitsu",
1677 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001678 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001679 .manufacture_id = FUJITSU_ID,
1680 .model_id = MBM29F400BC,
1681 .total_size = 512,
1682 .page_size = 64 * 1024,
1683 .tested = TEST_UNTESTED,
1684 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001685 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001686 .erase = NULL,
1687 .block_erasers =
1688 {
1689 {
1690 .eraseblocks = {
1691 {16 * 1024, 1},
1692 {8 * 1024, 2},
1693 {32 * 1024, 1},
1694 {64 * 1024, 7},
1695 },
1696 .block_erase = block_erase_m29f400bt,
1697 }, {
1698 .eraseblocks = { {512 * 1024, 1} },
1699 .block_erase = block_erase_chip_m29f400bt,
1700 },
1701 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001702 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001703 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001704 },
1705
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001706 {
1707 .vendor = "Fujitsu",
1708 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001709 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001710 .manufacture_id = FUJITSU_ID,
1711 .model_id = MBM29F400TC,
1712 .total_size = 512,
1713 .page_size = 64 * 1024,
1714 .tested = TEST_UNTESTED,
1715 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001716 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001717 .erase = NULL,
1718 .block_erasers =
1719 {
1720 {
1721 .eraseblocks = {
1722 {64 * 1024, 7},
1723 {32 * 1024, 1},
1724 {8 * 1024, 2},
1725 {16 * 1024, 1},
1726 },
1727 .block_erase = block_erase_m29f400bt,
1728 }, {
1729 .eraseblocks = { {512 * 1024, 1} },
1730 .block_erase = block_erase_chip_m29f400bt,
1731 },
1732 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001733 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001734 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001735 },
1736
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001737 {
1738 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001739 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001740 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001741 .manufacture_id = INTEL_ID,
1742 .model_id = P28F001BXB,
1743 .total_size = 128,
1744 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
1745 .tested = TEST_BAD_ERASE|TEST_BAD_WRITE,
1746 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001747 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001748 .erase = NULL,
1749 .write = NULL,
1750 .read = read_memmapped,
1751 },
1752
1753 {
1754 .vendor = "Intel",
1755 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001756 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001757 .manufacture_id = INTEL_ID,
1758 .model_id = P28F001BXT,
1759 .total_size = 128,
1760 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
1761 .tested = TEST_OK_PR|TEST_BAD_ERASE|TEST_BAD_WRITE,
1762 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001763 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001764 .erase = NULL,
1765 .write = NULL,
1766 .read = read_memmapped,
1767 },
1768
1769 {
1770 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001771 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001772 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001773 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001774 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001775 .total_size = 512,
1776 .page_size = 64 * 1024,
1777 .tested = TEST_OK_PREW,
1778 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001779 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001780 .erase = erase_82802ab,
1781 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001782 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001783 },
1784
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001785 {
1786 .vendor = "Intel",
1787 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001788 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001789 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001790 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001791 .total_size = 1024,
1792 .page_size = 64 * 1024,
1793 .tested = TEST_OK_PREW,
1794 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001795 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001796 .erase = erase_82802ab,
1797 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001798 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001799 },
1800
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001801 {
1802 .vendor = "Macronix",
1803 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001804 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001805 .manufacture_id = MX_ID,
1806 .model_id = MX_25L512,
1807 .total_size = 64,
1808 .page_size = 256,
1809 .tested = TEST_UNTESTED,
1810 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001811 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001812 .erase = NULL,
1813 .block_erasers =
1814 {
1815 {
1816 .eraseblocks = { {4 * 1024, 16} },
1817 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001818 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001819 .eraseblocks = { {64 * 1024, 1} },
1820 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001821 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001822 .eraseblocks = { {64 * 1024, 1} },
1823 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001824 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001825 .eraseblocks = { {64 * 1024, 1} },
1826 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001827 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001828 .eraseblocks = { {64 * 1024, 1} },
1829 .block_erase = spi_block_erase_c7,
1830 },
1831 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001832 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001833 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001834 },
1835
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001836 {
1837 .vendor = "Macronix",
1838 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001839 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001840 .manufacture_id = MX_ID,
1841 .model_id = MX_25L1005,
1842 .total_size = 128,
1843 .page_size = 256,
1844 .tested = TEST_UNTESTED,
1845 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001846 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001847 .erase = NULL,
1848 .block_erasers =
1849 {
1850 {
1851 .eraseblocks = { {4 * 1024, 32} },
1852 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001853 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001854 .eraseblocks = { {64 * 1024, 2} },
1855 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001856 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001857 .eraseblocks = { {128 * 1024, 1} },
1858 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001859 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001860 .eraseblocks = { {128 * 1024, 1} },
1861 .block_erase = spi_block_erase_c7,
1862 },
1863 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001864 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001865 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001866 },
1867
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001868 {
1869 .vendor = "Macronix",
1870 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001871 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001872 .manufacture_id = MX_ID,
1873 .model_id = MX_25L2005,
1874 .total_size = 256,
1875 .page_size = 256,
1876 .tested = TEST_UNTESTED,
1877 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001878 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001879 .erase = NULL,
1880 .block_erasers =
1881 {
1882 {
1883 .eraseblocks = { {4 * 1024, 64} },
1884 .block_erase = spi_block_erase_20,
1885 }, {
1886 .eraseblocks = { {64 * 1024, 4} },
1887 .block_erase = spi_block_erase_52,
1888 }, {
1889 .eraseblocks = { {64 * 1024, 4} },
1890 .block_erase = spi_block_erase_d8,
1891 }, {
1892 .eraseblocks = { {256 * 1024, 1} },
1893 .block_erase = spi_block_erase_60,
1894 }, {
1895 .eraseblocks = { {256 * 1024, 1} },
1896 .block_erase = spi_block_erase_c7,
1897 },
1898 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001899 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001900 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001901 },
1902
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001903 {
1904 .vendor = "Macronix",
1905 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001906 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001907 .manufacture_id = MX_ID,
1908 .model_id = MX_25L4005,
1909 .total_size = 512,
1910 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001911 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001912 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001913 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001914 .erase = NULL,
1915 .block_erasers =
1916 {
1917 {
1918 .eraseblocks = { {4 * 1024, 128} },
1919 .block_erase = spi_block_erase_20,
1920 }, {
1921 .eraseblocks = { {64 * 1024, 8} },
1922 .block_erase = spi_block_erase_52,
1923 }, {
1924 .eraseblocks = { {64 * 1024, 8} },
1925 .block_erase = spi_block_erase_d8,
1926 }, {
1927 .eraseblocks = { {512 * 1024, 1} },
1928 .block_erase = spi_block_erase_60,
1929 }, {
1930 .eraseblocks = { {512 * 1024, 1} },
1931 .block_erase = spi_block_erase_c7,
1932 },
1933 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001934 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001935 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001936 },
1937
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001938 {
1939 .vendor = "Macronix",
1940 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001941 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001942 .manufacture_id = MX_ID,
1943 .model_id = MX_25L8005,
1944 .total_size = 1024,
1945 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001946 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001947 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001948 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001949 .erase = NULL,
1950 .block_erasers =
1951 {
1952 {
1953 .eraseblocks = { {4 * 1024, 256} },
1954 .block_erase = spi_block_erase_20,
1955 }, {
1956 .eraseblocks = { {64 * 1024, 16} },
1957 .block_erase = spi_block_erase_52,
1958 }, {
1959 .eraseblocks = { {64 * 1024, 16} },
1960 .block_erase = spi_block_erase_d8,
1961 }, {
1962 .eraseblocks = { {1024 * 1024, 1} },
1963 .block_erase = spi_block_erase_60,
1964 }, {
1965 .eraseblocks = { {1024 * 1024, 1} },
1966 .block_erase = spi_block_erase_c7,
1967 },
1968 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001969 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001970 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001971 },
1972
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001973 {
1974 .vendor = "Macronix",
1975 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001976 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001977 .manufacture_id = MX_ID,
1978 .model_id = MX_25L1605,
1979 .total_size = 2048,
1980 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001981 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001982 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001983 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001984 .erase = NULL,
1985 .block_erasers =
1986 {
1987 {
1988 .eraseblocks = { {4 * 1024, 512} },
1989 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
1990 }, {
1991 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
1992 .block_erase = spi_block_erase_52,
1993 }, {
1994 .eraseblocks = { {64 * 1024, 32} },
1995 .block_erase = spi_block_erase_d8,
1996 }, {
1997 .eraseblocks = { {2 * 1024 * 1024, 1} },
1998 .block_erase = spi_block_erase_60,
1999 }, {
2000 .eraseblocks = { {2 * 1024 * 1024, 1} },
2001 .block_erase = spi_block_erase_c7,
2002 },
2003 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002004 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002005 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002006 },
2007
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002008 {
2009 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002010 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002011 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002012 .manufacture_id = MX_ID,
2013 .model_id = MX_25L1635D,
2014 .total_size = 2048,
2015 .page_size = 256,
2016 .tested = TEST_UNTESTED,
2017 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002018 .probe_timing = TIMING_ZERO,
Stephan Guillouxe39631c2009-04-19 23:24:26 +00002019 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002020 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002021 .read = spi_chip_read,
2022 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002023
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002024 {
2025 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002026 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002027 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002028 .manufacture_id = MX_ID,
2029 .model_id = MX_25L3205,
2030 .total_size = 4096,
2031 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002032 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002033 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002034 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002035 .erase = NULL,
2036 .block_erasers =
2037 {
2038 {
2039 .eraseblocks = { {4 * 1024, 1024} },
2040 .block_erase = spi_block_erase_20,
2041 }, {
2042 .eraseblocks = { {4 * 1024, 1024} },
2043 .block_erase = spi_block_erase_d8,
2044 }, {
2045 .eraseblocks = { {4 * 1024 * 1024, 1} },
2046 .block_erase = spi_block_erase_60,
2047 }, {
2048 .eraseblocks = { {4 * 1024 * 1024, 1} },
2049 .block_erase = spi_block_erase_c7,
2050 },
2051 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002052 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002053 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002054 },
2055
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002056 {
2057 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002058 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002059 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002060 .manufacture_id = MX_ID,
2061 .model_id = MX_25L3235D,
2062 .total_size = 4096,
2063 .page_size = 256,
2064 .tested = TEST_UNTESTED,
2065 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002066 .probe_timing = TIMING_ZERO,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002067 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002068 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002069 .read = spi_chip_read,
2070 },
2071
2072 {
2073 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002074 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002075 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002076 .manufacture_id = MX_ID,
2077 .model_id = MX_25L6405,
2078 .total_size = 8192,
2079 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002080 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002081 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002082 .probe_timing = TIMING_ZERO,
Stephan Guillouxfd315502009-04-20 22:54:13 +00002083 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002084 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002085 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002086 },
2087
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002088 {
2089 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002090 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002091 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002092 .manufacture_id = MX_ID,
2093 .model_id = MX_25L12805,
2094 .total_size = 16384,
2095 .page_size = 256,
2096 .tested = TEST_UNTESTED,
2097 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002098 .probe_timing = TIMING_ZERO,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002099 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002100 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002101 .read = spi_chip_read,
2102 },
2103
2104 {
2105 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002106 .name = "MX29F001B",
2107 .bustype = CHIP_BUSTYPE_PARALLEL,
2108 .manufacture_id = MX_ID,
2109 .model_id = MX_29F001B,
2110 .total_size = 128,
2111 .page_size = 32 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002112 .tested = TEST_OK_PRE,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002113 .probe = probe_29f002,
2114 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
2115 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002116 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002117 .read = read_memmapped,
2118 },
2119
2120 {
2121 .vendor = "Macronix",
2122 .name = "MX29F001T",
2123 .bustype = CHIP_BUSTYPE_PARALLEL,
2124 .manufacture_id = MX_ID,
2125 .model_id = MX_29F001T,
2126 .total_size = 128,
2127 .page_size = 32 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002128 .tested = TEST_OK_PRE,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002129 .probe = probe_29f002,
2130 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
2131 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002132 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002133 .read = read_memmapped,
2134 },
2135
2136 {
2137 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002138 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002139 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002140 .manufacture_id = MX_ID,
2141 .model_id = MX_29F002B,
2142 .total_size = 256,
2143 .page_size = 64 * 1024,
2144 .tested = TEST_UNTESTED,
2145 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002146 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002147 .erase = NULL,
2148 .block_erasers =
2149 {
2150 {
2151 .eraseblocks = {
2152 {16 * 1024, 1},
2153 {8 * 1024, 2},
2154 {32 * 1024, 1},
2155 {64 * 1024, 3},
2156 },
2157 .block_erase = erase_sector_29f002, /* This erase function has 64k blocksize for eLiteFlash */
2158 }, {
2159 .eraseblocks = { {256 * 1024, 1} },
2160 .block_erase = erase_chip_29f002,
2161 },
2162 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002163 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002164 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002165 },
2166
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002167 {
2168 .vendor = "Macronix",
2169 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002170 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002171 .manufacture_id = MX_ID,
2172 .model_id = MX_29F002T,
2173 .total_size = 256,
2174 .page_size = 64 * 1024,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002175 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002176 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002177 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002178 .erase = NULL,
2179 .block_erasers =
2180 {
2181 {
2182 .eraseblocks = {
2183 {64 * 1024, 3},
2184 {32 * 1024, 1},
2185 {8 * 1024, 2},
2186 {16 * 1024, 1},
2187 },
2188 .block_erase = erase_sector_29f002, /* This erase function has 64k blocksize for eLiteFlash */
2189 }, {
2190 .eraseblocks = { {256 * 1024, 1} },
2191 .block_erase = erase_chip_29f002,
2192 },
2193 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002194 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002195 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002196 },
2197
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002198 {
2199 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002200 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002201 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002202 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002203 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002204 .total_size = 512,
2205 .page_size = 64 * 1024,
2206 .tested = TEST_OK_PR,
2207 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002208 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002209 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002210 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002211 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002212 },
2213
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002214 {
2215 .vendor = "Numonyx",
2216 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002217 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002218 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002219 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002220 .total_size = 128,
2221 .page_size = 256,
2222 .tested = TEST_UNTESTED,
2223 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002224 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002225 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002226 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002227 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002228 },
2229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002230 {
2231 .vendor = "Numonyx",
2232 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002233 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002234 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002235 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002236 .total_size = 256,
2237 .page_size = 256,
2238 .tested = TEST_UNTESTED,
2239 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002240 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002241 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002242 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002243 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002244 },
2245
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002246 {
2247 .vendor = "Numonyx",
2248 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002249 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002250 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002251 .model_id = ST_M25PE40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002252 .total_size = 256,
2253 .page_size = 256,
2254 .tested = TEST_UNTESTED,
2255 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002256 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002257 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002258 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002259 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002260 },
2261
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002262 {
2263 .vendor = "Numonyx",
2264 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002265 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002266 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002267 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002268 .total_size = 1024,
2269 .page_size = 256,
2270 .tested = TEST_OK_PREW,
2271 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002272 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002273 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002274 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002275 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002276 },
2277
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002278 {
2279 .vendor = "Numonyx",
2280 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002281 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002282 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002283 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002284 .total_size = 2048,
2285 .page_size = 256,
2286 .tested = TEST_UNTESTED,
2287 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002288 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002289 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002290 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002291 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002292 },
2293
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002294 {
2295 .vendor = "PMC",
2296 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002297 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002298 .manufacture_id = PMC_ID,
2299 .model_id = PMC_25LV010,
2300 .total_size = 128,
2301 .page_size = 256,
2302 .tested = TEST_UNTESTED,
2303 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002304 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002305 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002306 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002307 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002308 },
2309
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002310 {
2311 .vendor = "PMC",
2312 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002313 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002314 .manufacture_id = PMC_ID,
2315 .model_id = PMC_25LV016B,
2316 .total_size = 2048,
2317 .page_size = 256,
2318 .tested = TEST_UNTESTED,
2319 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002320 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002321 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002322 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002323 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002324 },
2325
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002326 {
2327 .vendor = "PMC",
2328 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002329 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002330 .manufacture_id = PMC_ID,
2331 .model_id = PMC_25LV020,
2332 .total_size = 256,
2333 .page_size = 256,
2334 .tested = TEST_UNTESTED,
2335 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002336 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002337 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002338 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002339 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002340 },
2341
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002342 {
2343 .vendor = "PMC",
2344 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002345 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002346 .manufacture_id = PMC_ID,
2347 .model_id = PMC_25LV040,
2348 .total_size = 512,
2349 .page_size = 256,
2350 .tested = TEST_UNTESTED,
2351 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002352 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002353 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002354 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002355 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002356 },
2357
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002358 {
2359 .vendor = "PMC",
2360 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002361 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002362 .manufacture_id = PMC_ID,
2363 .model_id = PMC_25LV080B,
2364 .total_size = 1024,
2365 .page_size = 256,
2366 .tested = TEST_UNTESTED,
2367 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002368 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002369 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002370 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002371 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002372 },
2373
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002374 {
2375 .vendor = "PMC",
2376 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002377 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002378 .manufacture_id = PMC_ID,
2379 .model_id = PMC_25LV512,
2380 .total_size = 64,
2381 .page_size = 256,
2382 .tested = TEST_UNTESTED,
2383 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002384 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002385 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002386 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002387 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002388 },
2389
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002390 {
2391 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00002392 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002393 .bustype = CHIP_BUSTYPE_PARALLEL,
2394 .manufacture_id = PMC_ID_NOPREFIX,
2395 .model_id = PMC_29F002T,
2396 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00002397 .page_size = 8 * 1024,
2398 .tested = TEST_OK_PRW,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002399 .probe = probe_29f040b,
2400 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00002401 .erase = NULL,
2402 .block_erasers =
2403 {
2404 {
2405 .eraseblocks = {
2406 {128 * 1024, 1},
2407 {96 * 1024, 1},
2408 {8 * 1024, 2},
2409 {16 * 1024, 1},
2410 },
2411 .block_erase = erase_sector_29f040b,
2412 }, {
2413 .eraseblocks = { {256 * 1024, 1} },
2414 .block_erase = erase_chip_29f040b,
2415 },
2416 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002417 .write = write_pm29f002,
2418 .read = read_memmapped,
2419 },
2420
2421 {
2422 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00002423 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002424 .bustype = CHIP_BUSTYPE_PARALLEL,
2425 .manufacture_id = PMC_ID_NOPREFIX,
2426 .model_id = PMC_29F002B,
2427 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00002428 .page_size = 8 * 1024,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002429 .tested = TEST_UNTESTED,
2430 .probe = probe_29f040b,
2431 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00002432 .erase = NULL,
2433 .block_erasers =
2434 {
2435 {
2436 .eraseblocks = {
2437 {16 * 1024, 1},
2438 {8 * 1024, 2},
2439 {96 * 1024, 1},
2440 {128 * 1024, 1},
2441 },
2442 .block_erase = erase_sector_29f040b,
2443 }, {
2444 .eraseblocks = { {256 * 1024, 1} },
2445 .block_erase = erase_chip_29f040b,
2446 },
2447 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002448 .write = write_pm29f002,
2449 .read = read_memmapped,
2450 },
2451
2452 {
2453 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002454 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002455 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002456 .manufacture_id = PMC_ID_NOPREFIX,
2457 .model_id = PMC_39F010,
2458 .total_size = 128,
2459 .page_size = 4096,
2460 .tested = TEST_OK_PREW,
2461 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002462 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002463 .erase = erase_chip_jedec,
2464 .write = write_49f002,
2465 .read = read_memmapped,
2466 },
2467
2468 {
2469 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002470 .name = "Pm49FL002",
Urja Rannikko038a3122009-06-28 19:19:25 +00002471 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002472 .manufacture_id = PMC_ID_NOPREFIX,
2473 .model_id = PMC_49FL002,
2474 .total_size = 256,
2475 .page_size = 16 * 1024,
2476 .tested = TEST_OK_PREW,
2477 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +00002478 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002479 .erase = erase_49fl00x,
2480 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002481 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002482 },
2483
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002484 {
2485 .vendor = "PMC",
2486 .name = "Pm49FL004",
Urja Rannikko038a3122009-06-28 19:19:25 +00002487 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002488 .manufacture_id = PMC_ID_NOPREFIX,
2489 .model_id = PMC_49FL004,
2490 .total_size = 512,
2491 .page_size = 64 * 1024,
2492 .tested = TEST_OK_PREW,
2493 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +00002494 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002495 .erase = erase_49fl00x,
2496 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002497 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002498 },
2499
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002500 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00002501 .vendor = "Sanyo",
2502 .name = "LF25FW203A",
2503 .bustype = CHIP_BUSTYPE_SPI,
2504 .manufacture_id = SANYO_ID,
2505 .model_id = SANYO_LE25FW203A,
2506 .total_size = 2048,
2507 .page_size = 256,
2508 .tested = TEST_UNTESTED,
2509 .probe = probe_spi_rdid,
2510 .probe_timing = TIMING_ZERO,
2511 .erase = spi_chip_erase_c7,
2512 .write = spi_chip_write_256,
2513 .read = spi_chip_read,
2514 },
2515
2516 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002517 .vendor = "Sharp",
2518 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00002519 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002520 .manufacture_id = SHARP_ID,
2521 .model_id = SHARP_LHF00L04,
2522 .total_size = 1024,
2523 .page_size = 64 * 1024,
2524 .tested = TEST_UNTESTED,
2525 .probe = probe_lhf00l04,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002526 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sharplhf00l04.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002527 .erase = erase_lhf00l04,
2528 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002529 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002530 },
2531
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002532 {
2533 .vendor = "Spansion",
2534 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002535 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002536 .manufacture_id = SPANSION_ID,
2537 .model_id = SPANSION_S25FL016A,
2538 .total_size = 2048,
2539 .page_size = 256,
2540 .tested = TEST_OK_PREW,
2541 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002542 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002543 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002544 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002545 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002546 },
2547
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002548 {
2549 .vendor = "SST",
2550 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002551 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002552 .manufacture_id = SST_ID,
2553 .model_id = SST_25VF016B,
2554 .total_size = 2048,
2555 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002556 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002557 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002558 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002559 .erase = NULL,
2560 .block_erasers =
2561 {
2562 {
2563 .eraseblocks = { {4 * 1024, 512} },
2564 .block_erase = spi_block_erase_20,
2565 }, {
2566 .eraseblocks = { {32 * 1024, 64} },
2567 .block_erase = spi_block_erase_52,
2568 }, {
2569 .eraseblocks = { {64 * 1024, 32} },
2570 .block_erase = spi_block_erase_d8,
2571 }, {
2572 .eraseblocks = { {2 * 1024 * 1024, 1} },
2573 .block_erase = spi_block_erase_60,
2574 }, {
2575 .eraseblocks = { {2 * 1024 * 1024, 1} },
2576 .block_erase = spi_block_erase_c7,
2577 },
2578 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002579 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002580 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002581 },
2582
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002583 {
2584 .vendor = "SST",
2585 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002586 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002587 .manufacture_id = SST_ID,
2588 .model_id = SST_25VF032B,
2589 .total_size = 4096,
2590 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002591 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002592 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002593 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002594 .erase = NULL,
2595 .block_erasers =
2596 {
2597 {
2598 .eraseblocks = { {4 * 1024, 1024} },
2599 .block_erase = spi_block_erase_20,
2600 }, {
2601 .eraseblocks = { {32 * 1024, 128} },
2602 .block_erase = spi_block_erase_52,
2603 }, {
2604 .eraseblocks = { {64 * 1024, 64} },
2605 .block_erase = spi_block_erase_d8,
2606 }, {
2607 .eraseblocks = { {4 * 1024 * 1024, 1} },
2608 .block_erase = spi_block_erase_60,
2609 }, {
2610 .eraseblocks = { {4 * 1024 * 1024, 1} },
2611 .block_erase = spi_block_erase_c7,
2612 },
2613 },
2614 .write = spi_chip_write_1,
2615 .read = spi_chip_read,
2616 },
2617
2618 {
2619 .vendor = "SST",
2620 .name = "SST25VF040.REMS",
2621 .bustype = CHIP_BUSTYPE_SPI,
2622 .manufacture_id = SST_ID,
2623 .model_id = SST_25VF040_REMS,
2624 .total_size = 512,
2625 .page_size = 256,
2626 .tested = TEST_OK_PR,
2627 .probe = probe_spi_rems,
2628 .probe_timing = TIMING_ZERO,
2629 .erase = NULL,
2630 .block_erasers =
2631 {
2632 {
2633 .eraseblocks = { {4 * 1024, 128} },
2634 .block_erase = spi_block_erase_20,
2635 }, {
2636 .eraseblocks = { {32 * 1024, 16} },
2637 .block_erase = spi_block_erase_52,
2638 }, {
2639 .eraseblocks = { {512 * 1024, 1} },
2640 .block_erase = spi_block_erase_60,
2641 },
2642 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002643 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002644 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002645 },
2646
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002647 {
2648 .vendor = "SST",
2649 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002650 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002651 .manufacture_id = SST_ID,
2652 .model_id = SST_25VF040B,
2653 .total_size = 512,
2654 .page_size = 256,
2655 .tested = TEST_UNTESTED,
2656 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002657 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002658 .erase = NULL,
2659 .block_erasers =
2660 {
2661 {
2662 .eraseblocks = { {4 * 1024, 128} },
2663 .block_erase = spi_block_erase_20,
2664 }, {
2665 .eraseblocks = { {32 * 1024, 16} },
2666 .block_erase = spi_block_erase_52,
2667 }, {
2668 .eraseblocks = { {64 * 1024, 8} },
2669 .block_erase = spi_block_erase_d8,
2670 }, {
2671 .eraseblocks = { {512 * 1024, 1} },
2672 .block_erase = spi_block_erase_60,
2673 }, {
2674 .eraseblocks = { {512 * 1024, 1} },
2675 .block_erase = spi_block_erase_c7,
2676 },
2677 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002678 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00002679 .read = spi_chip_read,
2680 },
2681
2682 {
2683 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00002684 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002685 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002686 .manufacture_id = SST_ID,
2687 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00002688 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002689 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00002690 .tested = TEST_OK_PR,
2691 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002692 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002693 .erase = NULL,
2694 .block_erasers =
2695 {
2696 {
2697 .eraseblocks = { {4 * 1024, 128} },
2698 .block_erase = spi_block_erase_20,
2699 }, {
2700 .eraseblocks = { {32 * 1024, 16} },
2701 .block_erase = spi_block_erase_52,
2702 }, {
2703 .eraseblocks = { {64 * 1024, 8} },
2704 .block_erase = spi_block_erase_d8,
2705 }, {
2706 .eraseblocks = { {512 * 1024, 1} },
2707 .block_erase = spi_block_erase_60,
2708 }, {
2709 .eraseblocks = { {512 * 1024, 1} },
2710 .block_erase = spi_block_erase_c7,
2711 },
2712 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002713 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00002714 .read = spi_chip_read,
2715 },
2716
2717 {
2718 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002719 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002720 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002721 .manufacture_id = SST_ID,
2722 .model_id = SST_25VF080B,
2723 .total_size = 1024,
2724 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002725 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002726 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002727 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002728 .erase = NULL,
2729 .block_erasers =
2730 {
2731 {
2732 .eraseblocks = { {4 * 1024, 256} },
2733 .block_erase = spi_block_erase_20,
2734 }, {
2735 .eraseblocks = { {32 * 1024, 32} },
2736 .block_erase = spi_block_erase_52,
2737 }, {
2738 .eraseblocks = { {64 * 1024, 16} },
2739 .block_erase = spi_block_erase_d8,
2740 }, {
2741 .eraseblocks = { {1024 * 1024, 1} },
2742 .block_erase = spi_block_erase_60,
2743 }, {
2744 .eraseblocks = { {1024 * 1024, 1} },
2745 .block_erase = spi_block_erase_c7,
2746 },
2747 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002748 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002749 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002750 },
2751
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002752 {
2753 .vendor = "SST",
2754 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002755 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002756 .manufacture_id = SST_ID,
2757 .model_id = SST_28SF040,
2758 .total_size = 512,
2759 .page_size = 256,
2760 .tested = TEST_UNTESTED,
2761 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002762 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002763 .erase = erase_28sf040,
2764 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002765 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002766 },
2767
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002768 {
2769 .vendor = "SST",
2770 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002771 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002772 .manufacture_id = SST_ID,
2773 .model_id = SST_29EE010,
2774 .total_size = 128,
2775 .page_size = 128,
2776 .tested = TEST_OK_PREW,
2777 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002778 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002779 .erase = erase_chip_jedec,
2780 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002781 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002782 },
2783
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002784 {
2785 .vendor = "SST",
2786 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002787 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002788 .manufacture_id = SST_ID,
2789 .model_id = SST_29LE010,
2790 .total_size = 128,
2791 .page_size = 128,
2792 .tested = TEST_UNTESTED,
2793 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002794 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002795 .erase = erase_chip_jedec,
2796 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002797 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002798 },
2799
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002800 {
2801 .vendor = "SST",
2802 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002803 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002804 .manufacture_id = SST_ID,
2805 .model_id = SST_29EE020A,
2806 .total_size = 256,
2807 .page_size = 128,
Peter Stugeb27d0a22009-02-22 21:07:28 +00002808 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002809 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002810 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002811 .erase = erase_chip_jedec,
2812 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002813 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002814 },
2815
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002816 {
2817 .vendor = "SST",
2818 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00002819 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002820 .manufacture_id = SST_ID,
2821 .model_id = SST_29LE020,
2822 .total_size = 256,
2823 .page_size = 128,
2824 .tested = TEST_UNTESTED,
2825 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002826 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002827 .erase = erase_chip_jedec,
2828 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002829 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002830 },
2831
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002832 {
2833 .vendor = "SST",
2834 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002835 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002836 .manufacture_id = SST_ID,
2837 .model_id = SST_39SF010,
2838 .total_size = 128,
2839 .page_size = 4096,
2840 .tested = TEST_OK_PREW,
2841 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002842 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002843 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002844 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002845 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002846 },
2847
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002848 {
2849 .vendor = "SST",
2850 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002851 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002852 .manufacture_id = SST_ID,
2853 .model_id = SST_39SF020,
2854 .total_size = 256,
2855 .page_size = 4096,
2856 .tested = TEST_OK_PREW,
2857 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002858 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002859 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002860 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002861 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002862 },
2863
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002864 {
2865 .vendor = "SST",
2866 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002867 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002868 .manufacture_id = SST_ID,
2869 .model_id = SST_39SF040,
2870 .total_size = 512,
2871 .page_size = 4096,
2872 .tested = TEST_OK_PREW,
2873 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002874 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002875 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002876 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002877 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002878 },
2879
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002880 {
2881 .vendor = "SST",
2882 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00002883 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002884 .manufacture_id = SST_ID,
2885 .model_id = SST_39VF512,
2886 .total_size = 64,
2887 .page_size = 4096,
Rudolf Mareke186da62009-05-17 18:24:24 +00002888 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002889 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002890 .probe_timing = 1, /* 150 ns*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002891 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002892 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002893 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002894 },
2895
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002896 {
2897 .vendor = "SST",
2898 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002899 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002900 .manufacture_id = SST_ID,
2901 .model_id = SST_39VF010,
2902 .total_size = 128,
2903 .page_size = 4096,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002904 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002905 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002906 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002907 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002908 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002909 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002910 },
2911
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002912 {
2913 .vendor = "SST",
2914 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00002915 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002916 .manufacture_id = SST_ID,
2917 .model_id = SST_39VF020,
2918 .total_size = 256,
2919 .page_size = 4096,
2920 .tested = TEST_OK_PREW,
2921 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002922 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002923 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002924 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002925 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002926 },
2927
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002928 {
2929 .vendor = "SST",
2930 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002931 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002932 .manufacture_id = SST_ID,
2933 .model_id = SST_39VF040,
2934 .total_size = 512,
2935 .page_size = 4096,
2936 .tested = TEST_OK_PROBE,
2937 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002938 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002939 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002940 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002941 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00002942 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002943
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002944 {
2945 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00002946 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00002947 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002948 .manufacture_id = SST_ID,
2949 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00002950 .total_size = 1024,
2951 .page_size = 4096,
2952 .tested = TEST_UNTESTED,
2953 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002954 .probe_timing = 1, /* 150 ns */
Peter Stuge8440cc02009-01-25 23:55:12 +00002955 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002956 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002957 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00002958 },
2959
2960 {
2961 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002962 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002963 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002964 .manufacture_id = SST_ID,
2965 .model_id = SST_49LF002A,
2966 .total_size = 256,
2967 .page_size = 16 * 1024,
2968 .tested = TEST_OK_PREW,
2969 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002970 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002971 .erase = erase_sst_fwhub,
2972 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002973 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002974 },
2975
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002976 {
2977 .vendor = "SST",
2978 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002979 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002980 .manufacture_id = SST_ID,
2981 .model_id = SST_49LF003A,
2982 .total_size = 384,
2983 .page_size = 64 * 1024,
Peter Lemenkov45835c42009-09-25 01:09:18 +00002984 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002985 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002986 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002987 .erase = erase_sst_fwhub,
2988 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002989 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002990 },
2991
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002992 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00002993 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
2994 * and is only honored for 64k block erase, but not 4k sector erase.
2995 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002996 .vendor = "SST",
2997 .name = "SST49LF004A/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_49LF004A,
3001 .total_size = 512,
3002 .page_size = 64 * 1024,
3003 .tested = TEST_OK_PREW,
3004 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003005 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00003006 .erase = NULL,
3007 .block_erasers =
3008 {
3009 {
3010 .eraseblocks = { {4 * 1024, 128} },
3011 .block_erase = erase_sector_jedec, /* missing unlock */
3012 }, {
3013 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00003014 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00003015 }, {
3016 .eraseblocks = { {512 * 1024, 1} },
3017 .block_erase = NULL, /* AA 55 80 AA 55 10, only in PP mode */
3018 },
3019 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003020 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003021 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003022 },
3023
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003024 {
3025 .vendor = "SST",
3026 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003027 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003028 .manufacture_id = SST_ID,
3029 .model_id = SST_49LF004C,
3030 .total_size = 512,
3031 .page_size = 4 * 1024,
3032 .tested = TEST_UNTESTED,
3033 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003034 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003035 .erase = erase_49lfxxxc,
3036 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003037 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003038 },
3039
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003040 {
3041 .vendor = "SST",
3042 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003043 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003044 .manufacture_id = SST_ID,
3045 .model_id = SST_49LF008A,
3046 .total_size = 1024,
3047 .page_size = 64 * 1024,
3048 .tested = TEST_OK_PREW,
3049 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003050 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003051 .erase = erase_sst_fwhub,
3052 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003053 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003054 },
3055
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003056 {
3057 .vendor = "SST",
3058 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003059 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003060 .manufacture_id = SST_ID,
3061 .model_id = SST_49LF008C,
3062 .total_size = 1024,
3063 .page_size = 4 * 1024,
3064 .tested = TEST_UNTESTED,
3065 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003066 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003067 .erase = erase_49lfxxxc,
3068 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003069 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003070 },
3071
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003072 {
3073 .vendor = "SST",
3074 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003075 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003076 .manufacture_id = SST_ID,
3077 .model_id = SST_49LF016C,
3078 .total_size = 2048,
3079 .page_size = 4 * 1024,
3080 .tested = TEST_OK_PREW,
3081 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003082 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003083 .erase = erase_49lfxxxc,
3084 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003085 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003086 },
3087
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003088 {
3089 .vendor = "SST",
3090 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003091 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003092 .manufacture_id = SST_ID,
3093 .model_id = SST_49LF020,
3094 .total_size = 256,
3095 .page_size = 16 * 1024,
3096 .tested = TEST_OK_PR,
3097 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003098 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003099 .erase = erase_49lf040,
3100 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003101 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00003102 },
3103
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003104 {
3105 .vendor = "SST",
3106 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003107 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003108 .manufacture_id = SST_ID,
3109 .model_id = SST_49LF020A,
3110 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00003111 .page_size = 4 * 1024,
Nils Jacobsc0252682009-09-23 21:58:34 +00003112 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003113 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003114 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003115 .erase = erase_49lf040,
3116 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003117 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003118 },
3119
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003120 {
3121 .vendor = "SST",
3122 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003123 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003124 .manufacture_id = SST_ID,
3125 .model_id = SST_49LF040,
3126 .total_size = 512,
3127 .page_size = 4096,
3128 .tested = TEST_OK_PREW,
3129 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003130 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003131 .erase = erase_49lf040,
3132 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003133 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003134 },
3135
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003136 {
3137 .vendor = "SST",
3138 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003139 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003140 .manufacture_id = SST_ID,
3141 .model_id = SST_49LF040B,
3142 .total_size = 512,
3143 .page_size = 64 * 1024,
3144 .tested = TEST_OK_PREW,
3145 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00003146 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003147 .erase = erase_sst_fwhub,
3148 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003149 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003150 },
3151
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003152 {
3153 .vendor = "SST",
3154 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003155 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003156 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00003157 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003158 .total_size = 1024,
3159 .page_size = 4096,
3160 .tested = TEST_OK_PREW,
3161 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003162 .probe_timing = TIMING_FIXME,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003163 .erase = erase_49lf040,
3164 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003165 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003166 },
3167
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003168 {
3169 .vendor = "SST",
3170 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00003171 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003172 .manufacture_id = SST_ID,
3173 .model_id = SST_49LF160C,
3174 .total_size = 2048,
3175 .page_size = 4 * 1024,
3176 .tested = TEST_OK_PREW,
3177 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003178 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003179 .erase = erase_49lfxxxc,
3180 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003181 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003182 },
3183
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003184 {
3185 .vendor = "ST",
3186 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003187 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003188 .manufacture_id = ST_ID,
3189 .model_id = ST_M25P05A,
3190 .total_size = 64,
3191 .page_size = 256,
3192 .tested = TEST_UNTESTED,
3193 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003194 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003195 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003196 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003197 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003198 },
3199
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00003200 /* The ST M25P05 is a bit of a problem. It has the same ID as the
3201 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
3202 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
3203 * only is successful if RDID does not work.
3204 */
3205 {
3206 .vendor = "ST",
3207 .name = "M25P05.RES",
3208 .bustype = CHIP_BUSTYPE_SPI,
3209 .manufacture_id = ST_ID,
3210 .model_id = ST_M25P05_RES,
3211 .total_size = 64,
3212 .page_size = 256,
3213 .tested = TEST_UNTESTED,
3214 .probe = probe_spi_res,
3215 .probe_timing = TIMING_ZERO,
3216 .erase = spi_chip_erase_c7,
3217 .write = spi_chip_write_1, /* 128 */
3218 .read = spi_chip_read,
3219 },
3220
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003221 {
3222 .vendor = "ST",
3223 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003224 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003225 .manufacture_id = ST_ID,
3226 .model_id = ST_M25P10A,
3227 .total_size = 128,
3228 .page_size = 256,
3229 .tested = TEST_UNTESTED,
3230 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003231 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003232 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003233 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003234 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003235 },
3236
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00003237 /* The ST M25P10 has the same problem as the M25P05. */
3238 {
3239 .vendor = "ST",
3240 .name = "M25P10.RES",
3241 .bustype = CHIP_BUSTYPE_SPI,
3242 .manufacture_id = ST_ID,
3243 .model_id = ST_M25P10_RES,
3244 .total_size = 128,
3245 .page_size = 256,
3246 .tested = TEST_UNTESTED,
3247 .probe = probe_spi_res,
3248 .probe_timing = TIMING_ZERO,
3249 .erase = spi_chip_erase_c7,
3250 .write = spi_chip_write_1, /* 128 */
3251 .read = spi_chip_read,
3252 },
3253
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003254 {
3255 .vendor = "ST",
3256 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003257 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003258 .manufacture_id = ST_ID,
3259 .model_id = ST_M25P20,
3260 .total_size = 256,
3261 .page_size = 256,
3262 .tested = TEST_UNTESTED,
3263 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003264 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003265 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003266 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003267 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003268 },
3269
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003270 {
3271 .vendor = "ST",
3272 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003273 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003274 .manufacture_id = ST_ID,
3275 .model_id = ST_M25P40,
3276 .total_size = 512,
3277 .page_size = 256,
Uwe Hermann04d5dc42009-07-03 17:12:05 +00003278 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003279 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003280 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003281 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003282 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003283 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003284 },
3285
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003286 {
3287 .vendor = "ST",
3288 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003289 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003290 .manufacture_id = ST_ID,
3291 .model_id = ST_M25P40_RES,
3292 .total_size = 512,
3293 .page_size = 256,
3294 .tested = TEST_UNTESTED,
3295 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003296 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003297 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003298 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003299 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003300 },
3301
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003302 {
3303 .vendor = "ST",
3304 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003305 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003306 .manufacture_id = ST_ID,
3307 .model_id = ST_M25P80,
3308 .total_size = 1024,
3309 .page_size = 256,
Carl-Daniel Hailfinger5190ec12009-06-22 10:09:07 +00003310 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003311 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003312 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003313 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003314 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003315 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003316 },
3317
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003318 {
3319 .vendor = "ST",
3320 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003321 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003322 .manufacture_id = ST_ID,
3323 .model_id = ST_M25P16,
3324 .total_size = 2048,
3325 .page_size = 256,
3326 .tested = TEST_OK_PREW,
3327 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003328 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003329 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003330 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003331 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003332 },
3333
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003334 {
3335 .vendor = "ST",
3336 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003337 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003338 .manufacture_id = ST_ID,
3339 .model_id = ST_M25P32,
3340 .total_size = 4096,
3341 .page_size = 256,
3342 .tested = TEST_OK_PREW,
3343 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003344 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003345 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003346 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003347 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003348 },
3349
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003350 {
3351 .vendor = "ST",
3352 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003353 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003354 .manufacture_id = ST_ID,
3355 .model_id = ST_M25P64,
3356 .total_size = 8192,
3357 .page_size = 256,
3358 .tested = TEST_UNTESTED,
3359 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003360 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003361 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003362 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003363 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003364 },
3365
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003366 {
3367 .vendor = "ST",
3368 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003369 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003370 .manufacture_id = ST_ID,
3371 .model_id = ST_M25P128,
3372 .total_size = 16384,
3373 .page_size = 256,
3374 .tested = TEST_UNTESTED,
3375 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003376 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003377 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003378 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003379 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003380 },
3381
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003382 {
3383 .vendor = "ST",
3384 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003385 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003386 .manufacture_id = ST_ID,
3387 .model_id = ST_M29F002B,
3388 .total_size = 256,
3389 .page_size = 64 * 1024,
3390 .tested = TEST_UNTESTED,
3391 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003392 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003393 .erase = erase_m29f002,
3394 .write = write_m29f002b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003395 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003396 },
3397
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003398 {
3399 .vendor = "ST",
3400 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003401 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003402 .manufacture_id = ST_ID,
3403 .model_id = ST_M29F002T,
3404 .total_size = 256,
3405 .page_size = 64 * 1024,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003406 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003407 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003408 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003409 .erase = erase_m29f002,
3410 .write = write_m29f002t,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003411 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003412 },
3413
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003414 {
3415 .vendor = "ST",
3416 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003417 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003418 .manufacture_id = ST_ID,
3419 .model_id = ST_M29F040B,
3420 .total_size = 512,
3421 .page_size = 64 * 1024,
3422 .tested = TEST_OK_PREW,
3423 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003424 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003425 .erase = erase_29f040b,
3426 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003427 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003428 },
3429
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003430 {
3431 .vendor = "ST",
3432 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003433 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003434 .manufacture_id = ST_ID,
3435 .model_id = ST_M29F400BT,
3436 .total_size = 512,
3437 .page_size = 64 * 1024,
3438 .tested = TEST_UNTESTED,
3439 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003440 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003441 .erase = erase_m29f400bt,
3442 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003443 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003444 },
3445
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003446 {
3447 .vendor = "ST",
3448 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003449 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003450 .manufacture_id = ST_ID,
3451 .model_id = ST_M29W010B,
3452 .total_size = 128,
3453 .page_size = 16 * 1024,
3454 .tested = TEST_UNTESTED,
3455 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003456 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003457 .erase = erase_chip_jedec,
3458 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003459 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003460 },
3461
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003462 {
3463 .vendor = "ST",
3464 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003465 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003466 .manufacture_id = ST_ID,
3467 .model_id = ST_M29W040B,
3468 .total_size = 512,
3469 .page_size = 64 * 1024,
3470 .tested = TEST_UNTESTED,
3471 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003472 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003473 .erase = erase_chip_jedec,
3474 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003475 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003476 },
3477
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003478 {
3479 .vendor = "ST",
3480 .name = "M50FLW040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003481 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003482 .manufacture_id = ST_ID,
3483 .model_id = ST_M50FLW040A,
3484 .total_size = 512,
3485 .page_size = 64 * 1024,
3486 .tested = TEST_UNTESTED,
3487 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003488 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003489 .erase = erase_stm50flw0x0x,
3490 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003491 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003492 },
3493
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003494 {
3495 .vendor = "ST",
3496 .name = "M50FLW040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003497 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003498 .manufacture_id = ST_ID,
3499 .model_id = ST_M50FLW040B,
3500 .total_size = 512,
3501 .page_size = 64 * 1024,
3502 .tested = TEST_UNTESTED,
3503 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003504 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003505 .erase = erase_stm50flw0x0x,
3506 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003507 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003508 },
3509
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003510 {
3511 .vendor = "ST",
3512 .name = "M50FLW080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003513 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003514 .manufacture_id = ST_ID,
3515 .model_id = ST_M50FLW080A,
3516 .total_size = 1024,
3517 .page_size = 64 * 1024,
3518 .tested = TEST_OK_PREW,
3519 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003520 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003521 .erase = erase_stm50flw0x0x,
3522 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003523 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003524 },
3525
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003526 {
3527 .vendor = "ST",
3528 .name = "M50FLW080B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003529 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003530 .manufacture_id = ST_ID,
3531 .model_id = ST_M50FLW080B,
3532 .total_size = 1024,
3533 .page_size = 64 * 1024,
3534 .tested = TEST_UNTESTED,
3535 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003536 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003537 .erase = erase_stm50flw0x0x,
3538 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003539 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003540 },
3541
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003542 {
3543 .vendor = "ST",
3544 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00003545 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003546 .manufacture_id = ST_ID,
3547 .model_id = ST_M50FW002,
3548 .total_size = 256,
3549 .page_size = 64 * 1024,
3550 .tested = TEST_UNTESTED,
3551 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003552 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003553 .erase = NULL,
3554 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003555 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003556 },
3557
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003558 {
3559 .vendor = "ST",
3560 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00003561 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003562 .manufacture_id = ST_ID,
3563 .model_id = ST_M50FW016,
3564 .total_size = 2048,
3565 .page_size = 64 * 1024,
3566 .tested = TEST_UNTESTED,
3567 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003568 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003569 .erase = erase_82802ab,
3570 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003571 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003572 },
3573
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003574 {
3575 .vendor = "ST",
3576 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003577 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003578 .manufacture_id = ST_ID,
3579 .model_id = ST_M50FW040,
3580 .total_size = 512,
3581 .page_size = 64 * 1024,
3582 .tested = TEST_OK_PREW,
3583 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003584 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003585 .erase = erase_82802ab,
3586 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003587 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003588 },
3589
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003590 {
3591 .vendor = "ST",
3592 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00003593 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003594 .manufacture_id = ST_ID,
3595 .model_id = ST_M50FW080,
3596 .total_size = 1024,
3597 .page_size = 64 * 1024,
Peter Stugea657e942009-01-24 23:01:08 +00003598 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003599 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003600 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003601 .erase = erase_82802ab,
3602 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003603 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003604 },
3605
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003606 {
3607 .vendor = "ST",
3608 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00003609 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003610 .manufacture_id = ST_ID,
3611 .model_id = ST_M50LPW116,
3612 .total_size = 2048,
3613 .page_size = 64 * 1024,
3614 .tested = TEST_UNTESTED,
3615 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003616 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003617 .erase = erase_chip_jedec,
3618 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003619 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003620 },
3621
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003622 {
3623 .vendor = "SyncMOS",
3624 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003625 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003626 .manufacture_id = SYNCMOS_ID,
3627 .model_id = S29C31004T,
3628 .total_size = 512,
3629 .page_size = 128,
3630 .tested = TEST_UNTESTED,
3631 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003632 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003633 .erase = erase_chip_jedec,
3634 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003635 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003636 },
3637
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003638 {
3639 .vendor = "SyncMOS",
3640 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003641 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003642 .manufacture_id = SYNCMOS_ID,
3643 .model_id = S29C51001T,
3644 .total_size = 128,
3645 .page_size = 128,
3646 .tested = TEST_UNTESTED,
3647 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003648 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003649 .erase = erase_chip_jedec,
3650 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003651 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003652 },
3653
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003654 {
3655 .vendor = "SyncMOS",
3656 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003657 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003658 .manufacture_id = SYNCMOS_ID,
3659 .model_id = S29C51002T,
3660 .total_size = 256,
3661 .page_size = 128,
3662 .tested = TEST_OK_PREW,
3663 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003664 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003665 .erase = erase_chip_jedec,
3666 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003667 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003668 },
3669
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003670 {
3671 .vendor = "SyncMOS",
3672 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003673 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003674 .manufacture_id = SYNCMOS_ID,
3675 .model_id = S29C51004T,
3676 .total_size = 512,
3677 .page_size = 128,
3678 .tested = TEST_UNTESTED,
3679 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003680 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003681 .erase = erase_chip_jedec,
3682 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003683 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003684 },
3685
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003686 {
Uwe Hermanna106d152009-05-27 23:17:40 +00003687 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003688 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00003689 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003690 .manufacture_id = TI_OLD_ID,
3691 .model_id = TI_TMS29F002RB,
3692 .total_size = 256,
3693 .page_size = 16384, /* Non-uniform sectors */
3694 .tested = TEST_UNTESTED,
3695 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003696 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003697 .erase = NULL,
3698 .write = NULL,
3699 .read = read_memmapped,
3700 },
3701
3702 {
Uwe Hermanna106d152009-05-27 23:17:40 +00003703 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003704 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003705 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003706 .manufacture_id = TI_OLD_ID,
3707 .model_id = TI_TMS29F002RT,
3708 .total_size = 256,
3709 .page_size = 16384, /* Non-uniform sectors */
3710 .tested = TEST_UNTESTED,
3711 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003712 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003713 .erase = NULL,
3714 .write = NULL,
3715 .read = read_memmapped,
3716 },
3717
3718 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003719 .vendor = "Winbond",
3720 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003721 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003722 .manufacture_id = WINBOND_NEX_ID,
3723 .model_id = W_25X10,
3724 .total_size = 128,
3725 .page_size = 256,
3726 .tested = TEST_UNTESTED,
3727 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003728 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003729 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003730 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003731 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003732 },
3733
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003734 {
3735 .vendor = "Winbond",
3736 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003737 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003738 .manufacture_id = WINBOND_NEX_ID,
3739 .model_id = W_25X20,
3740 .total_size = 256,
3741 .page_size = 256,
3742 .tested = TEST_UNTESTED,
3743 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003744 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003745 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003746 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003747 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003748 },
3749
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003750 {
3751 .vendor = "Winbond",
3752 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003753 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003754 .manufacture_id = WINBOND_NEX_ID,
3755 .model_id = W_25X40,
3756 .total_size = 512,
3757 .page_size = 256,
3758 .tested = TEST_OK_PREW,
3759 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003760 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003761 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003762 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003763 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003764 },
3765
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003766 {
3767 .vendor = "Winbond",
3768 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003769 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003770 .manufacture_id = WINBOND_NEX_ID,
3771 .model_id = W_25X80,
3772 .total_size = 1024,
3773 .page_size = 256,
3774 .tested = TEST_OK_PREW,
3775 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003776 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003777 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003778 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003779 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003780 },
3781
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003782 {
3783 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00003784 .name = "W25x16",
3785 .bustype = CHIP_BUSTYPE_SPI,
3786 .manufacture_id = WINBOND_NEX_ID,
3787 .model_id = W_25X16,
3788 .total_size = 2048,
3789 .page_size = 256,
3790 .tested = TEST_OK_PR,
3791 .probe = probe_spi_rdid,
3792 .probe_timing = TIMING_ZERO,
3793 .erase = spi_chip_erase_c7,
3794 .write = spi_chip_write_256,
3795 .read = spi_chip_read,
3796 },
3797
3798 {
3799 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00003800 .name = "W25x32",
3801 .bustype = CHIP_BUSTYPE_SPI,
3802 .manufacture_id = WINBOND_NEX_ID,
3803 .model_id = W_25X32,
3804 .total_size = 4096,
3805 .page_size = 256,
3806 .tested = TEST_OK_PROBE,
3807 .probe = probe_spi_rdid,
3808 .probe_timing = TIMING_ZERO,
3809 .erase = spi_chip_erase_c7,
3810 .write = spi_chip_write_256,
3811 .read = spi_chip_read,
3812 },
3813
3814 {
3815 .vendor = "Winbond",
3816 .name = "W25x64",
3817 .bustype = CHIP_BUSTYPE_SPI,
3818 .manufacture_id = WINBOND_NEX_ID,
3819 .model_id = W_25X64,
3820 .total_size = 8192,
3821 .page_size = 256,
3822 .tested = TEST_UNTESTED,
3823 .probe = probe_spi_rdid,
3824 .probe_timing = TIMING_ZERO,
3825 .erase = spi_chip_erase_c7,
3826 .write = spi_chip_write_256,
3827 .read = spi_chip_read,
3828 },
3829
3830 {
3831 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003832 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00003833 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003834 .manufacture_id = WINBOND_ID,
3835 .model_id = W_29C011,
3836 .total_size = 128,
3837 .page_size = 128,
3838 .tested = TEST_OK_PREW,
3839 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003840 .probe_timing = 10, /* used datasheet for the W29C011A */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003841 .erase = erase_chip_jedec,
3842 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003843 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003844 },
3845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003846 {
3847 .vendor = "Winbond",
3848 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00003849 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003850 .manufacture_id = WINBOND_ID,
3851 .model_id = W_29C020C,
3852 .total_size = 256,
3853 .page_size = 128,
3854 .tested = TEST_OK_PREW,
3855 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003856 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003857 .erase = erase_chip_jedec,
3858 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003859 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003860 },
3861
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003862 {
3863 .vendor = "Winbond",
3864 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00003865 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003866 .manufacture_id = WINBOND_ID,
3867 .model_id = W_29C040P,
3868 .total_size = 512,
3869 .page_size = 256,
Carl-Daniel Hailfinger8a8a2262009-11-14 03:48:33 +00003870 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003871 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003872 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003873 .erase = erase_chip_jedec,
3874 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003875 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003876 },
3877
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003878 {
3879 .vendor = "Winbond",
3880 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00003881 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003882 .manufacture_id = WINBOND_ID,
3883 .model_id = W_29C011,
3884 .total_size = 128,
3885 .page_size = 128,
3886 .tested = TEST_OK_PREW,
3887 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003888 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003889 .erase = erase_chip_jedec,
3890 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003891 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003892 },
3893
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003894 {
3895 .vendor = "Winbond",
3896 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003897 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003898 .manufacture_id = WINBOND_ID,
3899 .model_id = W_39V040A,
3900 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003901 .page_size = 64 * 1024,
Uwe Hermann690bcba2009-05-21 17:11:25 +00003902 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003903 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003904 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003905 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003906 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003907 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003908 },
3909
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003910 {
3911 .vendor = "Winbond",
3912 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003913 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003914 .manufacture_id = WINBOND_ID,
3915 .model_id = W_39V040B,
3916 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003917 .page_size = 64 * 1024,
Luc Verhaegen8bfb59c2009-07-08 14:50:36 +00003918 .tested = TEST_OK_PR | TEST_BAD_ERASE | TEST_BAD_WRITE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003919 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003920 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003921 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003922 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003923 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003924 },
3925
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003926 {
3927 .vendor = "Winbond",
3928 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003929 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003930 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003931 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003932 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003933 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003934 .tested = TEST_OK_PREW,
3935 .probe = probe_w39v040c,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003936 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v040c.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003937 .erase = erase_w39v040c,
3938 .write = write_w39v040c,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003939 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003940 },
3941
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003942 {
3943 .vendor = "Winbond",
3944 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003945 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003946 .manufacture_id = WINBOND_ID,
3947 .model_id = W_39V040FA,
3948 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003949 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003950 .tested = TEST_OK_PREW,
3951 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003952 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003953 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003954 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003955 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003956 },
3957
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003958 {
3959 .vendor = "Winbond",
3960 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003961 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003962 .manufacture_id = WINBOND_ID,
3963 .model_id = W_39V080A,
3964 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00003965 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003966 .tested = TEST_OK_PREW,
3967 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003968 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003969 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003970 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003971 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003972 },
3973
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003974 {
3975 .vendor = "Winbond",
3976 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00003977 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003978 .manufacture_id = WINBOND_ID,
3979 .model_id = W_49F002U,
3980 .total_size = 256,
3981 .page_size = 128,
3982 .tested = TEST_OK_PREW,
3983 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003984 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003985 .erase = erase_chip_jedec,
3986 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003987 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003988 },
3989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003990 {
3991 .vendor = "Winbond",
3992 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003993 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003994 .manufacture_id = WINBOND_ID,
3995 .model_id = W_49V002A,
3996 .total_size = 256,
3997 .page_size = 128,
3998 .tested = TEST_OK_PREW,
3999 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004000 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004001 .erase = erase_chip_jedec,
4002 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004003 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004004 },
4005
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004006 {
4007 .vendor = "Winbond",
4008 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004009 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004010 .manufacture_id = WINBOND_ID,
4011 .model_id = W_49V002FA,
4012 .total_size = 256,
4013 .page_size = 128,
4014 .tested = TEST_UNTESTED,
4015 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004016 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004017 .erase = erase_chip_jedec,
4018 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004019 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004020 },
4021
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004022 {
4023 .vendor = "Winbond",
4024 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004025 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004026 .manufacture_id = WINBOND_ID,
4027 .model_id = W_39V080FA,
4028 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00004029 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004030 .tested = TEST_OK_PREW,
4031 .probe = probe_winbond_fwhub,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004032 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v080fa.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004033 .erase = erase_winbond_fwhub,
4034 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004035 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004036 },
4037
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004038 {
4039 .vendor = "Winbond",
4040 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00004041 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004042 .manufacture_id = WINBOND_ID,
4043 .model_id = W_39V080FA_DM,
4044 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00004045 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004046 .tested = TEST_UNTESTED,
4047 .probe = probe_winbond_fwhub,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004048 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v080fa.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004049 .erase = erase_winbond_fwhub,
4050 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004051 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004052 },
4053
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004054 {
4055 .vendor = "Atmel",
4056 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004057 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004058 .manufacture_id = ATMEL_ID,
4059 .model_id = GENERIC_DEVICE_ID,
4060 .total_size = 0,
4061 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004062 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004063 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004064 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004065 .erase = NULL,
4066 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004067 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004068 },
4069
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004070 {
4071 .vendor = "EON",
4072 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004073 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004074 .manufacture_id = EON_ID_NOPREFIX,
4075 .model_id = GENERIC_DEVICE_ID,
4076 .total_size = 0,
4077 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004078 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004079 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004080 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004081 .erase = NULL,
4082 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004083 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004084 },
4085
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004086 {
4087 .vendor = "Macronix",
4088 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004089 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004090 .manufacture_id = MX_ID,
4091 .model_id = GENERIC_DEVICE_ID,
4092 .total_size = 0,
4093 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004094 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004095 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004096 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004097 .erase = NULL,
4098 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004099 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004100 },
4101
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004102 {
4103 .vendor = "PMC",
4104 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004105 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004106 .manufacture_id = PMC_ID,
4107 .model_id = GENERIC_DEVICE_ID,
4108 .total_size = 0,
4109 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004110 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004111 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004112 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004113 .erase = NULL,
4114 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004115 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004116 },
4117
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004118 {
4119 .vendor = "SST",
4120 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004121 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004122 .manufacture_id = SST_ID,
4123 .model_id = GENERIC_DEVICE_ID,
4124 .total_size = 0,
4125 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004126 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004127 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004128 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004129 .erase = NULL,
4130 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004131 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004132 },
4133
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004134 {
4135 .vendor = "ST",
4136 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004137 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004138 .manufacture_id = ST_ID,
4139 .model_id = GENERIC_DEVICE_ID,
4140 .total_size = 0,
4141 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00004142 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004143 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004144 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004145 .erase = NULL,
4146 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004147 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00004148 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00004149
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00004150 {
Sean Nelson118e1d62009-11-24 02:08:11 +00004151 .vendor = "Sanyo",
4152 .name = "unknown Sanyo SPI chip",
4153 .bustype = CHIP_BUSTYPE_SPI,
4154 .manufacture_id = SANYO_ID,
4155 .model_id = GENERIC_DEVICE_ID,
4156 .total_size = 0,
4157 .page_size = 256,
4158 .tested = TEST_BAD_PREW,
4159 .probe = probe_spi_rdid,
4160 .probe_timing = TIMING_ZERO,
4161 .erase = NULL,
4162 .write = NULL,
4163 .read = NULL,
4164 },
4165
4166 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00004167 .vendor = "Generic",
4168 .name = "unknown SPI chip (RDID)",
4169 .bustype = CHIP_BUSTYPE_SPI,
4170 .manufacture_id = GENERIC_MANUF_ID,
4171 .model_id = GENERIC_DEVICE_ID,
4172 .total_size = 0,
4173 .page_size = 256,
4174 .tested = TEST_BAD_PREW,
4175 .probe = probe_spi_rdid,
4176 .erase = NULL,
4177 .write = NULL,
4178 },
4179 {
4180 .vendor = "Generic",
4181 .name = "unknown SPI chip (REMS)",
4182 .bustype = CHIP_BUSTYPE_SPI,
4183 .manufacture_id = GENERIC_MANUF_ID,
4184 .model_id = GENERIC_DEVICE_ID,
4185 .total_size = 0,
4186 .page_size = 256,
4187 .tested = TEST_BAD_PREW,
4188 .probe = probe_spi_rems,
4189 .erase = NULL,
4190 .write = NULL,
4191 },
4192
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004193 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00004194};