blob: bf38c4b2852fa6f021d9b58666fff562d24c4934 [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
Uwe Hermannd1107642007-08-29 17:52:32 +00008 *
Stefan Reinauerce532972007-05-23 17:20:56 +00009 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000013 *
Stefan Reinauerce532972007-05-23 17:20:56 +000014 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000018 *
Stefan Reinauerce532972007-05-23 17:20:56 +000019 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000021 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000022 */
23
24#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000025#include "flashchips.h"
Ollie Lho184a4042005-11-26 21:55:36 +000026
Uwe Hermannfc425e82008-03-16 02:06:25 +000027/**
Uwe Hermanna9720402009-05-21 15:55:46 +000028 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000029 *
30 * Please keep the list sorted by vendor name and chip name, so that
31 * the output of 'flashrom -L' is alphabetically sorted.
32 */
Ollie Lho184a4042005-11-26 21:55:36 +000033struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000034
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000035 /*
36 * .vendor = Vendor name
37 * .name = Chip name
38 * .bustype = Supported flash bus types (Parallel, LPC...)
39 * .manufacture_id = Manufacturer chip ID
40 * .model_id = Model chip ID
41 * .total_size = Total size in (binary) kbytes
42 * .page_size = Page or eraseblock(?) size in bytes
43 * .tested = Test status
44 * .probe = Probe function
45 * .probe_timing = Probe function delay
46 * .erase = Chip erase function
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000047 * .block_erasers[] = Array of erase layouts and erase functions
48 * {
49 * .eraseblocks[] = Array of { blocksize, blockcount }
50 * .block_erase = Block erase function
51 * }
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000052 * .write = Chip write function
53 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000054 */
55
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000056 {
57 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000058 .name = "Am29F010A/B",
59 .bustype = CHIP_BUSTYPE_PARALLEL,
60 .manufacture_id = AMD_ID,
61 .model_id = AM_29F010B, /* Same as Am29F010A */
62 .total_size = 128,
63 .page_size = 16 * 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +000064 .tested = TEST_OK_PRW,
Uwe Hermanna8b37272009-06-19 15:54:39 +000065 .probe = probe_29f040b,
Udu Ogahc04ee222009-09-05 01:31:32 +000066 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000067 .erase = NULL,
68 .block_erasers =
69 {
70 {
71 .eraseblocks = { {16 * 1024, 8} },
72 .block_erase = erase_sector_29f040b,
73 }, {
74 .eraseblocks = { {128 * 1024, 1} },
75 .block_erase = erase_chip_29f040b,
76 },
77 },
Uwe Hermanna8b37272009-06-19 15:54:39 +000078 .write = write_pm29f002,
79 .read = read_memmapped,
80 },
81
82 {
83 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000084 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000085 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000086 .manufacture_id = AMD_ID,
87 .model_id = AM_29F002BB,
88 .total_size = 256,
89 .page_size = 256,
90 .tested = TEST_UNTESTED,
91 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000092 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000093 .erase = NULL,
94 .block_erasers =
95 {
96 {
97 .eraseblocks = {
98 {16 * 1024, 1},
99 {8 * 1024, 2},
100 {32 * 1024, 1},
101 {64 * 1024, 3},
102 },
103 .block_erase = erase_sector_jedec,
104 }, {
105 .eraseblocks = { {256 * 1024, 1} },
106 .block_erase = erase_chip_block_jedec,
107 },
108 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000109 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000110 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000111 },
112
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000113 {
114 .vendor = "AMD",
115 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000116 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000117 .manufacture_id = AMD_ID,
118 .model_id = AM_29F002BT,
119 .total_size = 256,
120 .page_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +0000121 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000122 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000123 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000124 .erase = NULL,
125 .block_erasers =
126 {
127 {
128 .eraseblocks = {
129 {64 * 1024, 3},
130 {32 * 1024, 1},
131 {8 * 1024, 2},
132 {16 * 1024, 1},
133 },
134 .block_erase = erase_sector_jedec,
135 }, {
136 .eraseblocks = { {256 * 1024, 1} },
137 .block_erase = erase_chip_block_jedec,
138 },
139 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000140 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000141 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000142 },
143
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000144 {
145 .vendor = "AMD",
146 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000147 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000148 .manufacture_id = AMD_ID,
149 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000150 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 .page_size = 64 * 1024,
152 .tested = TEST_UNTESTED,
153 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000154 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000155 .erase = NULL,
156 .block_erasers =
157 {
158 {
159 .eraseblocks = { {64 * 1024, 32} },
160 .block_erase = erase_sector_29f040b,
161 }, {
162 .eraseblocks = { {2048 * 1024, 1} },
163 .block_erase = erase_chip_29f040b,
164 },
165 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000166 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000167 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000168 },
169
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000170 {
171 .vendor = "AMD",
172 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000173 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000174 .manufacture_id = AMD_ID,
175 .model_id = AM_29F040B,
176 .total_size = 512,
177 .page_size = 64 * 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +0000178 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000179 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000180 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000181 .erase = NULL,
182 .block_erasers =
183 {
184 {
185 .eraseblocks = { {64 * 1024, 8} },
186 .block_erase = erase_sector_29f040b,
187 }, {
188 .eraseblocks = { {512 * 1024, 1} },
189 .block_erase = erase_chip_29f040b,
190 },
191 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000192 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000193 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000194 },
195
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000196 {
197 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000198 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000199 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000200 .manufacture_id = AMD_ID,
201 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000202 .total_size = 1024,
203 .page_size = 64 * 1024,
204 .tested = TEST_UNTESTED,
205 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000206 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000207 .erase = NULL,
208 .block_erasers =
209 {
210 {
211 .eraseblocks = { {64 * 1024, 16} },
212 .block_erase = erase_sector_29f040b,
213 }, {
214 .eraseblocks = { {1024 * 1024, 1} },
215 .block_erase = erase_chip_29f040b,
216 },
217 },
Peter Stuge8440cc02009-01-25 23:55:12 +0000218 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000219 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000220 },
221
222 {
223 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000224 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000225 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000226 .manufacture_id = AMD_ID,
227 .model_id = AM_29LV040B,
228 .total_size = 512,
229 .page_size = 64 * 1024,
230 .tested = TEST_UNTESTED,
231 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000232 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000233 .erase = NULL,
234 .block_erasers =
235 {
236 {
237 .eraseblocks = { {64 * 1024, 8} },
238 .block_erase = erase_sector_29f040b,
239 }, {
240 .eraseblocks = { {512 * 1024, 1} },
241 .block_erase = erase_chip_29f040b,
242 },
243 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000244 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000245 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000246 },
247
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000248 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000249 .vendor = "AMD",
250 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000251 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000252 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000253 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000254 .total_size = 1024,
255 .page_size = 64 * 1024,
256 .tested = TEST_UNTESTED,
257 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000258 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000259 .erase = NULL,
260 .block_erasers =
261 {
262 {
263 .eraseblocks = { {64 * 1024, 16} },
264 .block_erase = erase_sector_29f040b,
265 }, {
266 .eraseblocks = { {1024 * 1024, 1} },
267 .block_erase = erase_chip_29f040b,
268 },
269 },
Peter Stuge8440cc02009-01-25 23:55:12 +0000270 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000271 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000272 },
273
274 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000275 .vendor = "ASD",
276 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +0000277 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000278 .manufacture_id = ASD_ID,
279 .model_id = ASD_AE49F2008,
280 .total_size = 256,
281 .page_size = 128,
282 .tested = TEST_UNTESTED,
283 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000284 .probe_timing = TIMING_FIXME,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000285 .erase = erase_chip_jedec,
286 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000287 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000288 },
289
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000290 {
291 .vendor = "Atmel",
292 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000293 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000294 .manufacture_id = ATMEL_ID,
295 .model_id = AT_25DF021,
296 .total_size = 256,
297 .page_size = 256,
298 .tested = TEST_UNTESTED,
299 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000300 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000301 .erase = NULL,
302 .block_erasers =
303 {
304 {
305 .eraseblocks = { {4 * 1024, 64} },
306 .block_erase = spi_block_erase_20,
307 }, {
308 .eraseblocks = { {32 * 1024, 8} },
309 .block_erase = spi_block_erase_52,
310 }, {
311 .eraseblocks = { {64 * 1024, 4} },
312 .block_erase = spi_block_erase_d8,
313 }, {
314 .eraseblocks = { {256 * 1024, 1} },
315 .block_erase = spi_block_erase_60,
316 }, {
317 .eraseblocks = { {256 * 1024, 1} },
318 .block_erase = spi_block_erase_c7,
319 }
320 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000321 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000322 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000323 },
324
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000325 {
326 .vendor = "Atmel",
327 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000328 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000329 .manufacture_id = ATMEL_ID,
330 .model_id = AT_25DF041A,
331 .total_size = 512,
332 .page_size = 256,
333 .tested = TEST_UNTESTED,
334 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000335 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000336 .erase = NULL,
337 .block_erasers =
338 {
339 {
340 .eraseblocks = { {4 * 1024, 128} },
341 .block_erase = spi_block_erase_20,
342 }, {
343 .eraseblocks = { {32 * 1024, 16} },
344 .block_erase = spi_block_erase_52,
345 }, {
346 .eraseblocks = { {64 * 1024, 8} },
347 .block_erase = spi_block_erase_d8,
348 }, {
349 .eraseblocks = { {512 * 1024, 1} },
350 .block_erase = spi_block_erase_60,
351 }, {
352 .eraseblocks = { {512 * 1024, 1} },
353 .block_erase = spi_block_erase_c7,
354 }
355 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000356 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000357 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000358 },
359
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000360 {
361 .vendor = "Atmel",
362 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000363 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000364 .manufacture_id = ATMEL_ID,
365 .model_id = AT_25DF081,
366 .total_size = 1024,
367 .page_size = 256,
368 .tested = TEST_UNTESTED,
369 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000370 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000371 .erase = NULL,
372 .block_erasers =
373 {
374 {
375 .eraseblocks = { {4 * 1024, 256} },
376 .block_erase = spi_block_erase_20,
377 }, {
378 .eraseblocks = { {32 * 1024, 32} },
379 .block_erase = spi_block_erase_52,
380 }, {
381 .eraseblocks = { {64 * 1024, 16} },
382 .block_erase = spi_block_erase_d8,
383 }, {
384 .eraseblocks = { {1024 * 1024, 1} },
385 .block_erase = spi_block_erase_60,
386 }, {
387 .eraseblocks = { {1024 * 1024, 1} },
388 .block_erase = spi_block_erase_c7,
389 }
390 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000391 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000392 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000393 },
394
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000395 {
396 .vendor = "Atmel",
397 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000398 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000399 .manufacture_id = ATMEL_ID,
400 .model_id = AT_25DF161,
401 .total_size = 2048,
402 .page_size = 256,
403 .tested = TEST_UNTESTED,
404 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000405 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000406 .erase = NULL,
407 .block_erasers =
408 {
409 {
410 .eraseblocks = { {4 * 1024, 512} },
411 .block_erase = spi_block_erase_20,
412 }, {
413 .eraseblocks = { {32 * 1024, 64} },
414 .block_erase = spi_block_erase_52,
415 }, {
416 .eraseblocks = { {64 * 1024, 32} },
417 .block_erase = spi_block_erase_d8,
418 }, {
419 .eraseblocks = { {2 * 1024 * 1024, 1} },
420 .block_erase = spi_block_erase_60,
421 }, {
422 .eraseblocks = { {2 * 1024 * 1024, 1} },
423 .block_erase = spi_block_erase_c7,
424 }
425 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000426 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000427 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000428 },
429
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000430 {
431 .vendor = "Atmel",
432 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000433 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000434 .manufacture_id = ATMEL_ID,
435 .model_id = AT_25DF321,
436 .total_size = 4096,
437 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000438 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000439 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000440 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000441 .erase = NULL,
442 .block_erasers =
443 {
444 {
445 .eraseblocks = { {4 * 1024, 1024} },
446 .block_erase = spi_block_erase_20,
447 }, {
448 .eraseblocks = { {32 * 1024, 128} },
449 .block_erase = spi_block_erase_52,
450 }, {
451 .eraseblocks = { {64 * 1024, 64} },
452 .block_erase = spi_block_erase_d8,
453 }, {
454 .eraseblocks = { {4 * 1024 * 1024, 1} },
455 .block_erase = spi_block_erase_60,
456 }, {
457 .eraseblocks = { {4 * 1024 * 1024, 1} },
458 .block_erase = spi_block_erase_c7,
459 }
460 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000461 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000462 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000463 },
464
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000465 {
466 .vendor = "Atmel",
467 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000468 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000469 .manufacture_id = ATMEL_ID,
470 .model_id = AT_25DF321A,
471 .total_size = 4096,
472 .page_size = 256,
473 .tested = TEST_UNTESTED,
474 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000475 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000476 .erase = NULL,
477 .block_erasers =
478 {
479 {
480 .eraseblocks = { {4 * 1024, 1024} },
481 .block_erase = spi_block_erase_20,
482 }, {
483 .eraseblocks = { {32 * 1024, 128} },
484 .block_erase = spi_block_erase_52,
485 }, {
486 .eraseblocks = { {64 * 1024, 64} },
487 .block_erase = spi_block_erase_d8,
488 }, {
489 .eraseblocks = { {4 * 1024 * 1024, 1} },
490 .block_erase = spi_block_erase_60,
491 }, {
492 .eraseblocks = { {4 * 1024 * 1024, 1} },
493 .block_erase = spi_block_erase_c7,
494 }
495 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000496 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000497 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000498 },
499
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000500 {
501 .vendor = "Atmel",
502 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000503 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000504 .manufacture_id = ATMEL_ID,
505 .model_id = AT_25DF641,
506 .total_size = 8192,
507 .page_size = 256,
508 .tested = TEST_UNTESTED,
509 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000510 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000511 .erase = NULL,
512 .block_erasers =
513 {
514 {
515 .eraseblocks = { {4 * 1024, 2048} },
516 .block_erase = spi_block_erase_20,
517 }, {
518 .eraseblocks = { {32 * 1024, 256} },
519 .block_erase = spi_block_erase_52,
520 }, {
521 .eraseblocks = { {64 * 1024, 128} },
522 .block_erase = spi_block_erase_d8,
523 }, {
524 .eraseblocks = { {8 * 1024 * 1024, 1} },
525 .block_erase = spi_block_erase_60,
526 }, {
527 .eraseblocks = { {8 * 1024 * 1024, 1} },
528 .block_erase = spi_block_erase_c7,
529 }
530 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000531 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000532 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000533 },
534
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000535 {
536 .vendor = "Atmel",
537 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000538 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000539 .manufacture_id = ATMEL_ID,
540 .model_id = AT_25F512B,
541 .total_size = 64,
542 .page_size = 256,
543 .tested = TEST_UNTESTED,
544 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000545 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000546 .erase = NULL,
547 .block_erasers =
548 {
549 {
550 .eraseblocks = { {4 * 1024, 16} },
551 .block_erase = spi_block_erase_20,
552 }, {
553 .eraseblocks = { {32 * 1024, 2} },
554 .block_erase = spi_block_erase_52,
555 }, {
556 .eraseblocks = { {32 * 1024, 2} },
557 .block_erase = spi_block_erase_d8,
558 }, {
559 .eraseblocks = { {64 * 1024, 1} },
560 .block_erase = spi_block_erase_60,
561 }, {
562 .eraseblocks = { {64 * 1024, 1} },
563 .block_erase = spi_block_erase_c7,
564 }
565 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000566 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000567 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000568 },
569
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000570 {
571 .vendor = "Atmel",
572 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000573 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000574 .manufacture_id = ATMEL_ID,
575 .model_id = AT_25FS010,
576 .total_size = 128,
577 .page_size = 256,
578 .tested = TEST_UNTESTED,
579 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000580 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000581 .erase = NULL,
582 .block_erasers =
583 {
584 {
585 .eraseblocks = { {4 * 1024, 32} },
586 .block_erase = spi_block_erase_20,
587 }, {
588 .eraseblocks = { {32 * 1024, 4} },
589 .block_erase = spi_block_erase_52,
590 }, {
591 .eraseblocks = { {32 * 1024, 4} },
592 .block_erase = spi_block_erase_d8,
593 }, {
594 .eraseblocks = { {128 * 1024, 1} },
595 .block_erase = spi_block_erase_60,
596 }, {
597 .eraseblocks = { {128 * 1024, 1} },
598 .block_erase = spi_block_erase_c7,
599 }
600 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000601 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000602 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000603 },
604
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000605 {
606 .vendor = "Atmel",
607 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000608 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000609 .manufacture_id = ATMEL_ID,
610 .model_id = AT_25FS040,
611 .total_size = 512,
612 .page_size = 256,
613 .tested = TEST_UNTESTED,
614 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000615 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000616 .erase = NULL,
617 .block_erasers =
618 {
619 {
620 .eraseblocks = { {4 * 1024, 128} },
621 .block_erase = spi_block_erase_20,
622 }, {
623 .eraseblocks = { {64 * 1024, 8} },
624 .block_erase = spi_block_erase_52,
625 }, {
626 .eraseblocks = { {64 * 1024, 8} },
627 .block_erase = spi_block_erase_d8,
628 }, {
629 .eraseblocks = { {512 * 1024, 1} },
630 .block_erase = spi_block_erase_60,
631 }, {
632 .eraseblocks = { {512 * 1024, 1} },
633 .block_erase = spi_block_erase_c7,
634 }
635 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000636 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000637 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000638 },
639
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000640 {
641 .vendor = "Atmel",
642 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000643 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000644 .manufacture_id = ATMEL_ID,
645 .model_id = AT_26DF041,
646 .total_size = 512,
647 .page_size = 256,
648 .tested = TEST_UNTESTED,
649 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000650 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000651 .erase = NULL,
Sean Nelson89187292009-12-23 12:02:55 +0000652 .block_erasers =
653 {
654 {
655 .eraseblocks = { {4 * 1024, 128} },
656 .block_erase = spi_block_erase_20,
657 }
658 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000659 .write = NULL /* Incompatible Page write */,
660 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000661 },
662
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000663 {
664 .vendor = "Atmel",
665 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000666 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000667 .manufacture_id = ATMEL_ID,
668 .model_id = AT_26DF081A,
669 .total_size = 1024,
670 .page_size = 256,
671 .tested = TEST_UNTESTED,
672 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000673 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000674 .erase = NULL,
675 .block_erasers =
676 {
677 {
678 .eraseblocks = { {4 * 1024, 256} },
679 .block_erase = spi_block_erase_20,
680 }, {
681 .eraseblocks = { {32 * 1024, 32} },
682 .block_erase = spi_block_erase_52,
683 }, {
684 .eraseblocks = { {64 * 1024, 16} },
685 .block_erase = spi_block_erase_d8,
686 }, {
687 .eraseblocks = { {1024 * 1024, 1} },
688 .block_erase = spi_block_erase_60,
689 }, {
690 .eraseblocks = { {1024 * 1024, 1} },
691 .block_erase = spi_block_erase_c7,
692 }
693 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000694 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000695 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000696 },
697
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000698 {
699 .vendor = "Atmel",
700 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000701 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000702 .manufacture_id = ATMEL_ID,
703 .model_id = AT_26DF161,
704 .total_size = 2048,
705 .page_size = 256,
706 .tested = TEST_UNTESTED,
707 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000708 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000709 .erase = NULL,
710 .block_erasers =
711 {
712 {
713 .eraseblocks = { {4 * 1024, 512} },
714 .block_erase = spi_block_erase_20,
715 }, {
716 .eraseblocks = { {32 * 1024, 64} },
717 .block_erase = spi_block_erase_52,
718 }, {
719 .eraseblocks = { {64 * 1024, 32} },
720 .block_erase = spi_block_erase_d8,
721 }, {
722 .eraseblocks = { {2 * 1024 * 1024, 1} },
723 .block_erase = spi_block_erase_60,
724 }, {
725 .eraseblocks = { {2 * 1024 * 1024, 1} },
726 .block_erase = spi_block_erase_c7,
727 }
728 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000729 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000730 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000731 },
732
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000733 {
734 .vendor = "Atmel",
735 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000736 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000737 .manufacture_id = ATMEL_ID,
738 .model_id = AT_26DF161A,
739 .total_size = 2048,
740 .page_size = 256,
741 .tested = TEST_UNTESTED,
742 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000743 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000744 .erase = NULL,
745 .block_erasers =
746 {
747 {
748 .eraseblocks = { {4 * 1024, 512} },
749 .block_erase = spi_block_erase_20,
750 }, {
751 .eraseblocks = { {32 * 1024, 64} },
752 .block_erase = spi_block_erase_52,
753 }, {
754 .eraseblocks = { {64 * 1024, 32} },
755 .block_erase = spi_block_erase_d8,
756 }, {
757 .eraseblocks = { {2 * 1024 * 1024, 1} },
758 .block_erase = spi_block_erase_60,
759 }, {
760 .eraseblocks = { {2 * 1024 * 1024, 1} },
761 .block_erase = spi_block_erase_c7,
762 }
763 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000764 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000765 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000766 },
767
768 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000769 /*{
770 .vendor = "Atmel",
771 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000772 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000773 .manufacture_id = ATMEL_ID,
774 .model_id = AT_26DF321,
775 .total_size = 4096,
776 .page_size = 256,
777 .tested = TEST_UNTESTED,
778 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000779 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000780 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000781 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000782 .read = spi_chip_read,
783 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000784
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000785 {
786 .vendor = "Atmel",
787 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000788 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000789 .manufacture_id = ATMEL_ID,
790 .model_id = AT_26F004,
791 .total_size = 512,
792 .page_size = 256,
793 .tested = TEST_UNTESTED,
794 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000795 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000796 .erase = NULL,
797 .block_erasers =
798 {
799 {
800 .eraseblocks = { {4 * 1024, 128} },
801 .block_erase = spi_block_erase_20,
802 }, {
803 .eraseblocks = { {32 * 1024, 16} },
804 .block_erase = spi_block_erase_52,
805 }, {
806 .eraseblocks = { {64 * 1024, 8} },
807 .block_erase = spi_block_erase_d8,
808 }, {
809 .eraseblocks = { {512 * 1024, 1} },
810 .block_erase = spi_block_erase_60,
811 }, {
812 .eraseblocks = { {512 * 1024, 1} },
813 .block_erase = spi_block_erase_c7,
814 }
815 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000816 .write = NULL /* Incompatible Page write */,
817 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000818 },
819
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000820 {
821 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000822 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000823 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000824 .manufacture_id = ATMEL_ID,
825 .model_id = AT_29C512,
826 .total_size = 64,
827 .page_size = 128,
Sean Nelson89187292009-12-23 12:02:55 +0000828 .tested = TEST_OK_PRW,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000829 .probe = probe_jedec,
830 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000831 .erase = NULL,
832 .block_erasers =
833 {
834 {
835 .eraseblocks = { {64 * 1024, 1} },
836 .block_erase = erase_chip_block_jedec,
837 }
838 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000839 .write = write_jedec,
840 .read = read_memmapped,
841
842 },
843
844 {
845 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000846 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000847 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000848 .manufacture_id = ATMEL_ID,
849 .model_id = AT_29C010A,
850 .total_size = 128,
851 .page_size = 128,
Sean Nelson89187292009-12-23 12:02:55 +0000852 .tested = TEST_OK_PR,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000853 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000854 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000855 .erase = NULL,
856 .block_erasers =
857 {
858 {
859 .eraseblocks = { {128 * 1024, 1} },
860 .block_erase = erase_chip_block_jedec,
861 }
862 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000863 .write = write_jedec, /* FIXME */
864 .read = read_memmapped,
865 },
866
867 {
868 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000869 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000870 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000871 .manufacture_id = ATMEL_ID,
872 .model_id = AT_29C020,
873 .total_size = 256,
874 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000875 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000876 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000877 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000878 .erase = NULL,
879 .block_erasers =
880 {
881 {
882 .eraseblocks = { {256 * 1024, 1} },
883 .block_erase = erase_chip_block_jedec,
884 }
885 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000886 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000887 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000888 },
889
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000890 {
891 .vendor = "Atmel",
892 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000893 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000894 .manufacture_id = ATMEL_ID,
895 .model_id = AT_29C040A,
896 .total_size = 512,
897 .page_size = 256,
898 .tested = TEST_UNTESTED,
899 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000900 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000901 .erase = NULL,
902 .block_erasers =
903 {
904 {
905 .eraseblocks = { {512 * 1024, 1} },
906 .block_erase = erase_chip_block_jedec,
907 }
908 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000909 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000910 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000911 },
912
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000913 {
914 .vendor = "Atmel",
915 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000916 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000917 .manufacture_id = ATMEL_ID,
918 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000919 .total_size = 16896 /* No power of two sizes */,
920 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000921 .tested = TEST_BAD_READ,
922 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000923 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000924 .erase = NULL,
925 .write = NULL /* Incompatible Page write */,
926 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000927 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000928
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000929 {
930 .vendor = "Atmel",
931 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000932 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000933 .manufacture_id = ATMEL_ID,
934 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000935 .total_size = 128 /* Size can only be determined from status register */,
936 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000937 .tested = TEST_BAD_READ,
938 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000939 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000940 .erase = NULL,
941 .write = NULL,
942 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000943 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000944
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000945 {
946 .vendor = "Atmel",
947 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000948 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000949 .manufacture_id = ATMEL_ID,
950 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000951 .total_size = 256 /* Size can only be determined from status register */,
952 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000953 .tested = TEST_BAD_READ,
954 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000955 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000956 .erase = NULL,
957 .write = NULL,
958 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000959 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000960
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000961 {
962 .vendor = "Atmel",
963 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000964 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000965 .manufacture_id = ATMEL_ID,
966 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000967 .total_size = 512 /* Size can only be determined from status register */,
968 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000969 .tested = TEST_BAD_READ,
970 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000971 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000972 .erase = NULL,
973 .write = NULL,
974 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000975 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000976
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000977 {
978 .vendor = "Atmel",
979 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000980 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000981 .manufacture_id = ATMEL_ID,
982 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000983 .total_size = 1024 /* Size can only be determined from status register */,
984 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000985 .tested = TEST_BAD_READ,
986 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000987 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000988 .erase = NULL,
989 .write = NULL,
990 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000991 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000992
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000993 {
994 .vendor = "Atmel",
995 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000996 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000997 .manufacture_id = ATMEL_ID,
998 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000999 .total_size = 2048 /* Size can only be determined from status register */,
1000 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001001 .tested = TEST_BAD_READ,
1002 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001003 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001004 .erase = NULL,
1005 .write = NULL,
1006 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001007 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001008
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001009 {
1010 .vendor = "Atmel",
1011 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001012 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001013 .manufacture_id = ATMEL_ID,
1014 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001015 .total_size = 4224 /* No power of two sizes */,
1016 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001017 .tested = TEST_BAD_READ,
1018 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001019 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001020 .erase = NULL,
1021 .write = NULL,
1022 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001023 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001024
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001025 {
1026 .vendor = "Atmel",
1027 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001028 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001029 .manufacture_id = ATMEL_ID,
1030 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001031 .total_size = 4096 /* Size can only be determined from status register */,
1032 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001033 .tested = TEST_BAD_READ,
1034 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001035 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001036 .erase = NULL,
1037 .write = NULL,
1038 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001039 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001040
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001041 {
1042 .vendor = "Atmel",
1043 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001044 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001045 .manufacture_id = ATMEL_ID,
1046 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001047 .total_size = 8192 /* Size can only be determined from status register */,
1048 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001049 .tested = TEST_BAD_READ,
1050 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001051 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001052 .erase = NULL,
1053 .write = NULL,
1054 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001055 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001056
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001057 {
1058 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001059 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001060 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001061 .manufacture_id = ATMEL_ID,
1062 .model_id = AT_49BV512,
1063 .total_size = 64,
1064 .page_size = 64,
Sean Nelson89187292009-12-23 12:02:55 +00001065 .tested = TEST_OK_PRW,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001066 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001067 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001068 .erase = NULL,
1069 .block_erasers =
1070 {
1071 {
1072 .eraseblocks = { {64 * 1024, 1} },
1073 .block_erase = erase_chip_block_jedec,
1074 }
1075 },
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001076 .write = write_49f002,
1077 .read = read_memmapped,
1078 },
1079
1080 {
1081 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001082 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001083 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001084 .manufacture_id = ATMEL_ID,
1085 .model_id = AT_49F002N,
1086 .total_size = 256,
1087 .page_size = 256,
1088 .tested = TEST_UNTESTED,
1089 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001090 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001091 .erase = NULL,
1092 .block_erasers =
1093 {
1094 {
1095 .eraseblocks = {
1096 {16 * 1024, 1},
1097 {8 * 1024, 2},
1098 {96 * 1024, 1},
1099 {128 * 1024, 1},
1100 },
1101 .block_erase = erase_sector_jedec,
1102 }, {
1103 .eraseblocks = { {256 * 1024, 1} },
1104 .block_erase = erase_chip_block_jedec,
1105 }
1106 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001107 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001108 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001109 },
1110
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001111 {
1112 .vendor = "Atmel",
1113 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001114 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001115 .manufacture_id = ATMEL_ID,
1116 .model_id = AT_49F002NT,
1117 .total_size = 256,
1118 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +00001119 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001120 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001121 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001122 .erase = NULL,
1123 .block_erasers =
1124 {
1125 {
1126 .eraseblocks = {
1127 {128 * 1024, 1},
1128 {96 * 1024, 1},
1129 {8 * 1024, 2},
1130 {16 * 1024, 1},
1131 },
1132 .block_erase = erase_sector_jedec,
1133 }, {
1134 .eraseblocks = { {256 * 1024, 1} },
1135 .block_erase = erase_chip_block_jedec,
1136 }
1137 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001138 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001139 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001140 },
1141
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001142 {
1143 .vendor = "AMIC",
1144 .name = "A25L40P",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001145 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001146 .manufacture_id = AMIC_ID,
1147 .model_id = AMIC_A25L40P,
1148 .total_size = 512,
1149 .page_size = 256,
1150 .tested = TEST_OK_PREW,
1151 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001152 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001153 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001154 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001155 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001156 },
1157
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001158 {
1159 .vendor = "AMIC",
1160 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001161 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001162 .manufacture_id = AMIC_ID_NOPREFIX,
1163 .model_id = AMIC_A29002B,
1164 .total_size = 256,
1165 .page_size = 64 * 1024,
1166 .tested = TEST_UNTESTED,
1167 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001168 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001169 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001170 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001171 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001172 },
1173
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001174 {
1175 .vendor = "AMIC",
1176 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001177 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001178 .manufacture_id = AMIC_ID_NOPREFIX,
1179 .model_id = AMIC_A29002T,
1180 .total_size = 256,
1181 .page_size = 64 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001182 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001183 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001184 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001185 .erase = erase_29f002,
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 = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001193 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001194 .manufacture_id = AMIC_ID_NOPREFIX,
1195 .model_id = AMIC_A29040B,
1196 .total_size = 512,
1197 .page_size = 64 * 1024,
1198 .tested = TEST_OK_PR,
1199 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001200 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001201 .erase = NULL,
1202 .block_erasers =
1203 {
1204 {
1205 .eraseblocks = { {64 * 1024, 8} },
1206 .block_erase = erase_sector_29f040b,
1207 }, {
1208 .eraseblocks = { {512 * 1024, 1} },
1209 .block_erase = erase_chip_29f040b,
1210 },
1211 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001212 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001213 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001214 },
1215
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001216 {
1217 .vendor = "AMIC",
1218 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001219 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001220 .manufacture_id = AMIC_ID_NOPREFIX,
1221 .model_id = AMIC_A49LF040A,
1222 .total_size = 512,
1223 .page_size = 64 * 1024,
1224 .tested = TEST_OK_PREW,
1225 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +00001226 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001227 .erase = erase_49fl00x,
1228 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001229 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001230 },
1231
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001232 {
1233 .vendor = "EMST",
1234 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001235 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001236 .manufacture_id = EMST_ID,
1237 .model_id = EMST_F49B002UA,
1238 .total_size = 256,
1239 .page_size = 4096,
1240 .tested = TEST_UNTESTED,
1241 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001242 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001243 .erase = erase_chip_jedec,
1244 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001245 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001246 },
1247
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001248 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001249 .vendor = "Eon",
1250 .name = "EN25B05",
1251 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001252 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001253 .model_id = EN_25B05,
1254 .total_size = 64,
1255 .page_size = 256,
1256 .tested = TEST_UNTESTED,
1257 .probe = probe_spi_rdid,
1258 .probe_timing = TIMING_ZERO,
1259 .erase = spi_chip_erase_c7,
1260 .write = spi_chip_write_256,
1261 .read = spi_chip_read,
1262 },
1263
1264 {
1265 .vendor = "Eon",
1266 .name = "EN25B10",
1267 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001268 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001269 .model_id = EN_25B10,
1270 .total_size = 128,
1271 .page_size = 256,
1272 .tested = TEST_UNTESTED,
1273 .probe = probe_spi_rdid,
1274 .probe_timing = TIMING_ZERO,
1275 .erase = spi_chip_erase_c7,
1276 .write = spi_chip_write_256,
1277 .read = spi_chip_read,
1278 },
1279
1280 {
1281 .vendor = "Eon",
1282 .name = "EN25B20",
1283 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001284 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001285 .model_id = EN_25B20,
1286 .total_size = 256,
1287 .page_size = 256,
1288 .tested = TEST_UNTESTED,
1289 .probe = probe_spi_rdid,
1290 .probe_timing = TIMING_ZERO,
1291 .erase = spi_chip_erase_c7,
1292 .write = spi_chip_write_256,
1293 .read = spi_chip_read,
1294 },
1295
1296 {
1297 .vendor = "Eon",
1298 .name = "EN25B40",
1299 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001300 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001301 .model_id = EN_25B40,
1302 .total_size = 512,
1303 .page_size = 256,
1304 .tested = TEST_UNTESTED,
1305 .probe = probe_spi_rdid,
1306 .probe_timing = TIMING_ZERO,
1307 .erase = spi_chip_erase_c7,
1308 .write = spi_chip_write_256,
1309 .read = spi_chip_read,
1310 },
1311
1312 {
1313 .vendor = "Eon",
1314 .name = "EN25B80",
1315 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001316 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001317 .model_id = EN_25B80,
1318 .total_size = 1024,
1319 .page_size = 256,
1320 .tested = TEST_UNTESTED,
1321 .probe = probe_spi_rdid,
1322 .probe_timing = TIMING_ZERO,
1323 .erase = spi_chip_erase_c7,
1324 .write = spi_chip_write_256,
1325 .read = spi_chip_read,
1326 },
1327
1328 {
1329 .vendor = "Eon",
1330 .name = "EN25B16",
1331 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001332 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001333 .model_id = EN_25B16,
1334 .total_size = 2048,
1335 .page_size = 256,
1336 .tested = TEST_UNTESTED,
1337 .probe = probe_spi_rdid,
1338 .probe_timing = TIMING_ZERO,
1339 .erase = spi_chip_erase_c7,
1340 .write = spi_chip_write_256,
1341 .read = spi_chip_read,
1342 },
1343
1344 {
1345 .vendor = "Eon",
1346 .name = "EN25B32",
1347 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001348 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001349 .model_id = EN_25B32,
1350 .total_size = 4096,
1351 .page_size = 256,
1352 .tested = TEST_UNTESTED,
1353 .probe = probe_spi_rdid,
1354 .probe_timing = TIMING_ZERO,
1355 .erase = spi_chip_erase_c7,
1356 .write = spi_chip_write_256,
1357 .read = spi_chip_read,
1358 },
1359
1360 {
1361 .vendor = "Eon",
1362 .name = "EN25B64",
1363 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001364 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001365 .model_id = EN_25B64,
1366 .total_size = 8192,
1367 .page_size = 256,
1368 .tested = TEST_UNTESTED,
1369 .probe = probe_spi_rdid,
1370 .probe_timing = TIMING_ZERO,
1371 .erase = spi_chip_erase_c7,
1372 .write = spi_chip_write_256,
1373 .read = spi_chip_read,
1374 },
1375
1376 {
1377 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001378 .name = "EN25D16",
1379 .bustype = CHIP_BUSTYPE_SPI,
1380 .manufacture_id = EON_ID_NOPREFIX,
1381 .model_id = EN_25D16,
1382 .total_size = 2048,
1383 .page_size = 256,
1384 .tested = TEST_UNTESTED,
1385 .probe = probe_spi_rdid,
1386 .probe_timing = TIMING_ZERO,
1387 .erase = spi_chip_erase_60_c7,
1388 .write = spi_chip_write_256,
1389 .read = spi_chip_read,
1390 },
1391
1392 {
1393 .vendor = "Eon",
1394 .name = "EN25F05",
1395 .bustype = CHIP_BUSTYPE_SPI,
1396 .manufacture_id = EON_ID_NOPREFIX,
1397 .model_id = EN_25F05,
1398 .total_size = 64,
1399 .page_size = 256,
1400 .tested = TEST_UNTESTED,
1401 .probe = probe_spi_rdid,
1402 .probe_timing = TIMING_ZERO,
1403 .erase = spi_chip_erase_60_c7,
1404 .write = spi_chip_write_256,
1405 .read = spi_chip_read,
1406 },
1407
1408 {
1409 .vendor = "Eon",
1410 .name = "EN25F10",
1411 .bustype = CHIP_BUSTYPE_SPI,
1412 .manufacture_id = EON_ID_NOPREFIX,
1413 .model_id = EN_25F10,
1414 .total_size = 128,
1415 .page_size = 256,
1416 .tested = TEST_UNTESTED,
1417 .probe = probe_spi_rdid,
1418 .probe_timing = TIMING_ZERO,
1419 .erase = spi_chip_erase_60_c7,
1420 .write = spi_chip_write_256,
1421 .read = spi_chip_read,
1422 },
1423
1424 {
1425 .vendor = "Eon",
1426 .name = "EN25F20",
1427 .bustype = CHIP_BUSTYPE_SPI,
1428 .manufacture_id = EON_ID_NOPREFIX,
1429 .model_id = EN_25F20,
1430 .total_size = 256,
1431 .page_size = 256,
1432 .tested = TEST_UNTESTED,
1433 .probe = probe_spi_rdid,
1434 .probe_timing = TIMING_ZERO,
1435 .erase = spi_chip_erase_60_c7,
1436 .write = spi_chip_write_256,
1437 .read = spi_chip_read,
1438 },
1439
1440 {
1441 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001442 .name = "EN25F40",
1443 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001444 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001445 .model_id = EN_25F40,
1446 .total_size = 512,
1447 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001448 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001449 .probe = probe_spi_rdid,
1450 .probe_timing = TIMING_ZERO,
1451 .erase = spi_chip_erase_60_c7,
1452 .write = spi_chip_write_256,
1453 .read = spi_chip_read,
1454 },
1455
1456 {
1457 .vendor = "Eon",
1458 .name = "EN25F80",
1459 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001460 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001461 .model_id = EN_25F80,
1462 .total_size = 1024,
1463 .page_size = 256,
1464 .tested = TEST_UNTESTED,
1465 .probe = probe_spi_rdid,
1466 .probe_timing = TIMING_ZERO,
1467 .erase = spi_chip_erase_60_c7,
1468 .write = spi_chip_write_256,
1469 .read = spi_chip_read,
1470 },
1471
1472 {
1473 .vendor = "Eon",
1474 .name = "EN25F16",
1475 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001476 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001477 .model_id = EN_25F16,
1478 .total_size = 2048,
1479 .page_size = 256,
1480 .tested = TEST_UNTESTED,
1481 .probe = probe_spi_rdid,
1482 .probe_timing = TIMING_ZERO,
1483 .erase = spi_chip_erase_60_c7,
1484 .write = spi_chip_write_256,
1485 .read = spi_chip_read,
1486 },
1487
1488 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001489 .vendor = "Eon",
1490 .name = "EN25F32",
1491 .bustype = CHIP_BUSTYPE_SPI,
1492 .manufacture_id = EON_ID_NOPREFIX,
1493 .model_id = EN_25F32,
1494 .total_size = 4096,
1495 .page_size = 256,
1496 .tested = TEST_UNTESTED,
1497 .probe = probe_spi_rdid,
1498 .probe_timing = TIMING_ZERO,
1499 .erase = spi_chip_erase_60_c7,
1500 .write = spi_chip_write_256,
1501 .read = spi_chip_read,
1502 },
1503
1504 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001505 .vendor = "EON",
1506 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001507 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001508 .manufacture_id = EON_ID,
1509 .model_id = EN_29F002B,
1510 .total_size = 256,
1511 .page_size = 256,
1512 .tested = TEST_UNTESTED,
1513 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001514 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001515 .erase = erase_chip_jedec,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001516 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001517 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001518 },
1519
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001520 {
1521 .vendor = "EON",
1522 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001523 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001524 .manufacture_id = EON_ID,
1525 .model_id = EN_29F002T,
1526 .total_size = 256,
1527 .page_size = 256,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001528 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001529 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001530 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001531 .erase = erase_chip_jedec,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001532 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001533 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001534 },
1535
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001536 {
1537 .vendor = "Fujitsu",
1538 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001539 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001540 .manufacture_id = FUJITSU_ID,
1541 .model_id = MBM29F004BC,
1542 .total_size = 512,
1543 .page_size = 64 * 1024,
1544 .tested = TEST_UNTESTED,
1545 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001546 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001547 .erase = NULL,
1548 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001549 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001550 },
1551
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001552 {
1553 .vendor = "Fujitsu",
1554 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001555 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001556 .manufacture_id = FUJITSU_ID,
1557 .model_id = MBM29F004TC,
1558 .total_size = 512,
1559 .page_size = 64 * 1024,
1560 .tested = TEST_UNTESTED,
1561 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001562 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001563 .erase = NULL,
1564 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001565 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001566 },
1567
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001568 {
1569 .vendor = "Fujitsu",
1570 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001571 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001572 .manufacture_id = FUJITSU_ID,
1573 .model_id = MBM29F400BC,
1574 .total_size = 512,
1575 .page_size = 64 * 1024,
1576 .tested = TEST_UNTESTED,
1577 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001578 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001579 .erase = erase_m29f400bt,
1580 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001581 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001582 },
1583
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001584 {
1585 .vendor = "Fujitsu",
1586 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001587 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001588 .manufacture_id = FUJITSU_ID,
1589 .model_id = MBM29F400TC,
1590 .total_size = 512,
1591 .page_size = 64 * 1024,
1592 .tested = TEST_UNTESTED,
1593 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001594 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001595 .erase = erase_m29f400bt,
1596 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001597 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001598 },
1599
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001600 {
1601 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001602 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001603 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001604 .manufacture_id = INTEL_ID,
1605 .model_id = P28F001BXB,
1606 .total_size = 128,
1607 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
1608 .tested = TEST_BAD_ERASE|TEST_BAD_WRITE,
1609 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001610 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001611 .erase = NULL,
1612 .write = NULL,
1613 .read = read_memmapped,
1614 },
1615
1616 {
1617 .vendor = "Intel",
1618 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001619 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001620 .manufacture_id = INTEL_ID,
1621 .model_id = P28F001BXT,
1622 .total_size = 128,
1623 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
1624 .tested = TEST_OK_PR|TEST_BAD_ERASE|TEST_BAD_WRITE,
1625 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001626 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001627 .erase = NULL,
1628 .write = NULL,
1629 .read = read_memmapped,
1630 },
1631
1632 {
1633 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001634 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001635 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001636 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001637 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001638 .total_size = 512,
1639 .page_size = 64 * 1024,
1640 .tested = TEST_OK_PREW,
1641 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001642 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001643 .erase = erase_82802ab,
1644 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001645 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001646 },
1647
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001648 {
1649 .vendor = "Intel",
1650 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001651 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001652 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001653 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001654 .total_size = 1024,
1655 .page_size = 64 * 1024,
1656 .tested = TEST_OK_PREW,
1657 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001658 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001659 .erase = erase_82802ab,
1660 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001661 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001662 },
1663
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001664 {
1665 .vendor = "Macronix",
1666 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001667 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001668 .manufacture_id = MX_ID,
1669 .model_id = MX_25L512,
1670 .total_size = 64,
1671 .page_size = 256,
1672 .tested = TEST_UNTESTED,
1673 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001674 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001675 .erase = NULL,
1676 .block_erasers =
1677 {
1678 {
1679 .eraseblocks = { {4 * 1024, 16} },
1680 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001681 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001682 .eraseblocks = { {64 * 1024, 1} },
1683 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001684 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001685 .eraseblocks = { {64 * 1024, 1} },
1686 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001687 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001688 .eraseblocks = { {64 * 1024, 1} },
1689 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001690 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001691 .eraseblocks = { {64 * 1024, 1} },
1692 .block_erase = spi_block_erase_c7,
1693 },
1694 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001695 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001696 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001697 },
1698
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001699 {
1700 .vendor = "Macronix",
1701 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001702 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001703 .manufacture_id = MX_ID,
1704 .model_id = MX_25L1005,
1705 .total_size = 128,
1706 .page_size = 256,
1707 .tested = TEST_UNTESTED,
1708 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001709 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001710 .erase = NULL,
1711 .block_erasers =
1712 {
1713 {
1714 .eraseblocks = { {4 * 1024, 32} },
1715 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001716 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001717 .eraseblocks = { {64 * 1024, 2} },
1718 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001719 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001720 .eraseblocks = { {128 * 1024, 1} },
1721 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001722 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001723 .eraseblocks = { {128 * 1024, 1} },
1724 .block_erase = spi_block_erase_c7,
1725 },
1726 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001727 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001728 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001729 },
1730
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001731 {
1732 .vendor = "Macronix",
1733 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001734 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001735 .manufacture_id = MX_ID,
1736 .model_id = MX_25L2005,
1737 .total_size = 256,
1738 .page_size = 256,
1739 .tested = TEST_UNTESTED,
1740 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001741 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001742 .erase = NULL,
1743 .block_erasers =
1744 {
1745 {
1746 .eraseblocks = { {4 * 1024, 64} },
1747 .block_erase = spi_block_erase_20,
1748 }, {
1749 .eraseblocks = { {64 * 1024, 4} },
1750 .block_erase = spi_block_erase_52,
1751 }, {
1752 .eraseblocks = { {64 * 1024, 4} },
1753 .block_erase = spi_block_erase_d8,
1754 }, {
1755 .eraseblocks = { {256 * 1024, 1} },
1756 .block_erase = spi_block_erase_60,
1757 }, {
1758 .eraseblocks = { {256 * 1024, 1} },
1759 .block_erase = spi_block_erase_c7,
1760 },
1761 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001762 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001763 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001764 },
1765
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001766 {
1767 .vendor = "Macronix",
1768 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001769 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001770 .manufacture_id = MX_ID,
1771 .model_id = MX_25L4005,
1772 .total_size = 512,
1773 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001774 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001775 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001776 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001777 .erase = NULL,
1778 .block_erasers =
1779 {
1780 {
1781 .eraseblocks = { {4 * 1024, 128} },
1782 .block_erase = spi_block_erase_20,
1783 }, {
1784 .eraseblocks = { {64 * 1024, 8} },
1785 .block_erase = spi_block_erase_52,
1786 }, {
1787 .eraseblocks = { {64 * 1024, 8} },
1788 .block_erase = spi_block_erase_d8,
1789 }, {
1790 .eraseblocks = { {512 * 1024, 1} },
1791 .block_erase = spi_block_erase_60,
1792 }, {
1793 .eraseblocks = { {512 * 1024, 1} },
1794 .block_erase = spi_block_erase_c7,
1795 },
1796 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001797 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001798 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001799 },
1800
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001801 {
1802 .vendor = "Macronix",
1803 .name = "MX25L8005",
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_25L8005,
1807 .total_size = 1024,
1808 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001809 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001810 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001811 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001812 .erase = NULL,
1813 .block_erasers =
1814 {
1815 {
1816 .eraseblocks = { {4 * 1024, 256} },
1817 .block_erase = spi_block_erase_20,
1818 }, {
1819 .eraseblocks = { {64 * 1024, 16} },
1820 .block_erase = spi_block_erase_52,
1821 }, {
1822 .eraseblocks = { {64 * 1024, 16} },
1823 .block_erase = spi_block_erase_d8,
1824 }, {
1825 .eraseblocks = { {1024 * 1024, 1} },
1826 .block_erase = spi_block_erase_60,
1827 }, {
1828 .eraseblocks = { {1024 * 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 = "MX25L1605",
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_25L1605,
1842 .total_size = 2048,
1843 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001844 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001845 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001846 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001847 .erase = NULL,
1848 .block_erasers =
1849 {
1850 {
1851 .eraseblocks = { {4 * 1024, 512} },
1852 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
1853 }, {
1854 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
1855 .block_erase = spi_block_erase_52,
1856 }, {
1857 .eraseblocks = { {64 * 1024, 32} },
1858 .block_erase = spi_block_erase_d8,
1859 }, {
1860 .eraseblocks = { {2 * 1024 * 1024, 1} },
1861 .block_erase = spi_block_erase_60,
1862 }, {
1863 .eraseblocks = { {2 * 1024 * 1024, 1} },
1864 .block_erase = spi_block_erase_c7,
1865 },
1866 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001867 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001868 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001869 },
1870
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001871 {
1872 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00001873 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001874 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00001875 .manufacture_id = MX_ID,
1876 .model_id = MX_25L1635D,
1877 .total_size = 2048,
1878 .page_size = 256,
1879 .tested = TEST_UNTESTED,
1880 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001881 .probe_timing = TIMING_ZERO,
Stephan Guillouxe39631c2009-04-19 23:24:26 +00001882 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001883 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00001884 .read = spi_chip_read,
1885 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00001886
Stephan Guillouxf5c70902009-04-19 23:04:00 +00001887 {
1888 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001889 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001890 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001891 .manufacture_id = MX_ID,
1892 .model_id = MX_25L3205,
1893 .total_size = 4096,
1894 .page_size = 256,
1895 .tested = TEST_OK_PREW,
1896 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001897 .probe_timing = TIMING_ZERO,
Stephan Guillouxfd315502009-04-20 22:54:13 +00001898 .erase = spi_chip_erase_60_c7,
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",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00001905 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001906 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00001907 .manufacture_id = MX_ID,
1908 .model_id = MX_25L3235D,
1909 .total_size = 4096,
1910 .page_size = 256,
1911 .tested = TEST_UNTESTED,
1912 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001913 .probe_timing = TIMING_ZERO,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00001914 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001915 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00001916 .read = spi_chip_read,
1917 },
1918
1919 {
1920 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001921 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001922 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001923 .manufacture_id = MX_ID,
1924 .model_id = MX_25L6405,
1925 .total_size = 8192,
1926 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00001927 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001928 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001929 .probe_timing = TIMING_ZERO,
Stephan Guillouxfd315502009-04-20 22:54:13 +00001930 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001931 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001932 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001933 },
1934
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001935 {
1936 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00001937 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001938 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00001939 .manufacture_id = MX_ID,
1940 .model_id = MX_25L12805,
1941 .total_size = 16384,
1942 .page_size = 256,
1943 .tested = TEST_UNTESTED,
1944 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001945 .probe_timing = TIMING_ZERO,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00001946 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001947 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00001948 .read = spi_chip_read,
1949 },
1950
1951 {
1952 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00001953 .name = "MX29F001B",
1954 .bustype = CHIP_BUSTYPE_PARALLEL,
1955 .manufacture_id = MX_ID,
1956 .model_id = MX_29F001B,
1957 .total_size = 128,
1958 .page_size = 32 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001959 .tested = TEST_OK_PRE,
Mark Panajotovic502a9132009-08-24 01:42:24 +00001960 .probe = probe_29f002,
1961 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
1962 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001963 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00001964 .read = read_memmapped,
1965 },
1966
1967 {
1968 .vendor = "Macronix",
1969 .name = "MX29F001T",
1970 .bustype = CHIP_BUSTYPE_PARALLEL,
1971 .manufacture_id = MX_ID,
1972 .model_id = MX_29F001T,
1973 .total_size = 128,
1974 .page_size = 32 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001975 .tested = TEST_OK_PRE,
Mark Panajotovic502a9132009-08-24 01:42:24 +00001976 .probe = probe_29f002,
1977 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
1978 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001979 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00001980 .read = read_memmapped,
1981 },
1982
1983 {
1984 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001985 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001986 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001987 .manufacture_id = MX_ID,
1988 .model_id = MX_29F002B,
1989 .total_size = 256,
1990 .page_size = 64 * 1024,
1991 .tested = TEST_UNTESTED,
1992 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001993 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001994 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001995 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001996 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001997 },
1998
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001999 {
2000 .vendor = "Macronix",
2001 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002002 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002003 .manufacture_id = MX_ID,
2004 .model_id = MX_29F002T,
2005 .total_size = 256,
2006 .page_size = 64 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002007 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002008 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002009 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002010 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002011 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002012 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002013 },
2014
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002015 {
2016 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002017 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002018 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002019 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002020 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002021 .total_size = 512,
2022 .page_size = 64 * 1024,
2023 .tested = TEST_OK_PR,
2024 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002025 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002026 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00002027 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002028 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002029 },
2030
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002031 {
2032 .vendor = "Numonyx",
2033 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002034 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002035 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002036 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002037 .total_size = 128,
2038 .page_size = 256,
2039 .tested = TEST_UNTESTED,
2040 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002041 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002042 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002043 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002044 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002045 },
2046
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002047 {
2048 .vendor = "Numonyx",
2049 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002050 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002051 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002052 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002053 .total_size = 256,
2054 .page_size = 256,
2055 .tested = TEST_UNTESTED,
2056 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002057 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002058 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002059 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002060 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002061 },
2062
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002063 {
2064 .vendor = "Numonyx",
2065 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002066 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002067 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002068 .model_id = ST_M25PE40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002069 .total_size = 256,
2070 .page_size = 256,
2071 .tested = TEST_UNTESTED,
2072 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002073 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002074 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002075 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002076 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002077 },
2078
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002079 {
2080 .vendor = "Numonyx",
2081 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002082 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002083 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002084 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002085 .total_size = 1024,
2086 .page_size = 256,
2087 .tested = TEST_OK_PREW,
2088 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002089 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002090 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002091 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002092 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002093 },
2094
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002095 {
2096 .vendor = "Numonyx",
2097 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002098 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002099 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002100 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002101 .total_size = 2048,
2102 .page_size = 256,
2103 .tested = TEST_UNTESTED,
2104 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002105 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002106 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002107 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002108 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002109 },
2110
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002111 {
2112 .vendor = "PMC",
2113 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002114 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002115 .manufacture_id = PMC_ID,
2116 .model_id = PMC_25LV010,
2117 .total_size = 128,
2118 .page_size = 256,
2119 .tested = TEST_UNTESTED,
2120 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002121 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002122 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002123 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002124 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002125 },
2126
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002127 {
2128 .vendor = "PMC",
2129 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002130 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002131 .manufacture_id = PMC_ID,
2132 .model_id = PMC_25LV016B,
2133 .total_size = 2048,
2134 .page_size = 256,
2135 .tested = TEST_UNTESTED,
2136 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002137 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002138 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002139 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002140 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002141 },
2142
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002143 {
2144 .vendor = "PMC",
2145 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002146 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002147 .manufacture_id = PMC_ID,
2148 .model_id = PMC_25LV020,
2149 .total_size = 256,
2150 .page_size = 256,
2151 .tested = TEST_UNTESTED,
2152 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002153 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002154 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002155 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002156 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002157 },
2158
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002159 {
2160 .vendor = "PMC",
2161 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002162 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002163 .manufacture_id = PMC_ID,
2164 .model_id = PMC_25LV040,
2165 .total_size = 512,
2166 .page_size = 256,
2167 .tested = TEST_UNTESTED,
2168 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002169 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002170 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002171 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002172 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002173 },
2174
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002175 {
2176 .vendor = "PMC",
2177 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002178 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002179 .manufacture_id = PMC_ID,
2180 .model_id = PMC_25LV080B,
2181 .total_size = 1024,
2182 .page_size = 256,
2183 .tested = TEST_UNTESTED,
2184 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002185 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002186 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002187 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002188 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002189 },
2190
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002191 {
2192 .vendor = "PMC",
2193 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002194 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002195 .manufacture_id = PMC_ID,
2196 .model_id = PMC_25LV512,
2197 .total_size = 64,
2198 .page_size = 256,
2199 .tested = TEST_UNTESTED,
2200 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002201 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002202 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002203 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002204 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002205 },
2206
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002207 {
2208 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00002209 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002210 .bustype = CHIP_BUSTYPE_PARALLEL,
2211 .manufacture_id = PMC_ID_NOPREFIX,
2212 .model_id = PMC_29F002T,
2213 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00002214 .page_size = 8 * 1024,
2215 .tested = TEST_OK_PRW,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002216 .probe = probe_29f040b,
2217 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00002218 .erase = NULL,
2219 .block_erasers =
2220 {
2221 {
2222 .eraseblocks = {
2223 {128 * 1024, 1},
2224 {96 * 1024, 1},
2225 {8 * 1024, 2},
2226 {16 * 1024, 1},
2227 },
2228 .block_erase = erase_sector_29f040b,
2229 }, {
2230 .eraseblocks = { {256 * 1024, 1} },
2231 .block_erase = erase_chip_29f040b,
2232 },
2233 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002234 .write = write_pm29f002,
2235 .read = read_memmapped,
2236 },
2237
2238 {
2239 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00002240 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002241 .bustype = CHIP_BUSTYPE_PARALLEL,
2242 .manufacture_id = PMC_ID_NOPREFIX,
2243 .model_id = PMC_29F002B,
2244 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00002245 .page_size = 8 * 1024,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002246 .tested = TEST_UNTESTED,
2247 .probe = probe_29f040b,
2248 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00002249 .erase = NULL,
2250 .block_erasers =
2251 {
2252 {
2253 .eraseblocks = {
2254 {16 * 1024, 1},
2255 {8 * 1024, 2},
2256 {96 * 1024, 1},
2257 {128 * 1024, 1},
2258 },
2259 .block_erase = erase_sector_29f040b,
2260 }, {
2261 .eraseblocks = { {256 * 1024, 1} },
2262 .block_erase = erase_chip_29f040b,
2263 },
2264 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00002265 .write = write_pm29f002,
2266 .read = read_memmapped,
2267 },
2268
2269 {
2270 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002271 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002272 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002273 .manufacture_id = PMC_ID_NOPREFIX,
2274 .model_id = PMC_39F010,
2275 .total_size = 128,
2276 .page_size = 4096,
2277 .tested = TEST_OK_PREW,
2278 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002279 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002280 .erase = erase_chip_jedec,
2281 .write = write_49f002,
2282 .read = read_memmapped,
2283 },
2284
2285 {
2286 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002287 .name = "Pm49FL002",
Urja Rannikko038a3122009-06-28 19:19:25 +00002288 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002289 .manufacture_id = PMC_ID_NOPREFIX,
2290 .model_id = PMC_49FL002,
2291 .total_size = 256,
2292 .page_size = 16 * 1024,
2293 .tested = TEST_OK_PREW,
2294 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +00002295 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002296 .erase = erase_49fl00x,
2297 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002298 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002299 },
2300
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002301 {
2302 .vendor = "PMC",
2303 .name = "Pm49FL004",
Urja Rannikko038a3122009-06-28 19:19:25 +00002304 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002305 .manufacture_id = PMC_ID_NOPREFIX,
2306 .model_id = PMC_49FL004,
2307 .total_size = 512,
2308 .page_size = 64 * 1024,
2309 .tested = TEST_OK_PREW,
2310 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +00002311 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002312 .erase = erase_49fl00x,
2313 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002314 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002315 },
2316
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002317 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00002318 .vendor = "Sanyo",
2319 .name = "LF25FW203A",
2320 .bustype = CHIP_BUSTYPE_SPI,
2321 .manufacture_id = SANYO_ID,
2322 .model_id = SANYO_LE25FW203A,
2323 .total_size = 2048,
2324 .page_size = 256,
2325 .tested = TEST_UNTESTED,
2326 .probe = probe_spi_rdid,
2327 .probe_timing = TIMING_ZERO,
2328 .erase = spi_chip_erase_c7,
2329 .write = spi_chip_write_256,
2330 .read = spi_chip_read,
2331 },
2332
2333 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002334 .vendor = "Sharp",
2335 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00002336 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002337 .manufacture_id = SHARP_ID,
2338 .model_id = SHARP_LHF00L04,
2339 .total_size = 1024,
2340 .page_size = 64 * 1024,
2341 .tested = TEST_UNTESTED,
2342 .probe = probe_lhf00l04,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002343 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sharplhf00l04.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002344 .erase = erase_lhf00l04,
2345 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002346 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002347 },
2348
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002349 {
2350 .vendor = "Spansion",
2351 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002352 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002353 .manufacture_id = SPANSION_ID,
2354 .model_id = SPANSION_S25FL016A,
2355 .total_size = 2048,
2356 .page_size = 256,
2357 .tested = TEST_OK_PREW,
2358 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002359 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002360 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002361 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002362 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002363 },
2364
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002365 {
2366 .vendor = "SST",
2367 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002368 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002369 .manufacture_id = SST_ID,
2370 .model_id = SST_25VF016B,
2371 .total_size = 2048,
2372 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002373 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002374 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002375 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002376 .erase = NULL,
2377 .block_erasers =
2378 {
2379 {
2380 .eraseblocks = { {4 * 1024, 512} },
2381 .block_erase = spi_block_erase_20,
2382 }, {
2383 .eraseblocks = { {32 * 1024, 64} },
2384 .block_erase = spi_block_erase_52,
2385 }, {
2386 .eraseblocks = { {64 * 1024, 32} },
2387 .block_erase = spi_block_erase_d8,
2388 }, {
2389 .eraseblocks = { {2 * 1024 * 1024, 1} },
2390 .block_erase = spi_block_erase_60,
2391 }, {
2392 .eraseblocks = { {2 * 1024 * 1024, 1} },
2393 .block_erase = spi_block_erase_c7,
2394 },
2395 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002396 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002397 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002398 },
2399
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002400 {
2401 .vendor = "SST",
2402 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002403 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002404 .manufacture_id = SST_ID,
2405 .model_id = SST_25VF032B,
2406 .total_size = 4096,
2407 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002408 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002409 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002410 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002411 .erase = NULL,
2412 .block_erasers =
2413 {
2414 {
2415 .eraseblocks = { {4 * 1024, 1024} },
2416 .block_erase = spi_block_erase_20,
2417 }, {
2418 .eraseblocks = { {32 * 1024, 128} },
2419 .block_erase = spi_block_erase_52,
2420 }, {
2421 .eraseblocks = { {64 * 1024, 64} },
2422 .block_erase = spi_block_erase_d8,
2423 }, {
2424 .eraseblocks = { {4 * 1024 * 1024, 1} },
2425 .block_erase = spi_block_erase_60,
2426 }, {
2427 .eraseblocks = { {4 * 1024 * 1024, 1} },
2428 .block_erase = spi_block_erase_c7,
2429 },
2430 },
2431 .write = spi_chip_write_1,
2432 .read = spi_chip_read,
2433 },
2434
2435 {
2436 .vendor = "SST",
2437 .name = "SST25VF040.REMS",
2438 .bustype = CHIP_BUSTYPE_SPI,
2439 .manufacture_id = SST_ID,
2440 .model_id = SST_25VF040_REMS,
2441 .total_size = 512,
2442 .page_size = 256,
2443 .tested = TEST_OK_PR,
2444 .probe = probe_spi_rems,
2445 .probe_timing = TIMING_ZERO,
2446 .erase = NULL,
2447 .block_erasers =
2448 {
2449 {
2450 .eraseblocks = { {4 * 1024, 128} },
2451 .block_erase = spi_block_erase_20,
2452 }, {
2453 .eraseblocks = { {32 * 1024, 16} },
2454 .block_erase = spi_block_erase_52,
2455 }, {
2456 .eraseblocks = { {512 * 1024, 1} },
2457 .block_erase = spi_block_erase_60,
2458 },
2459 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002460 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002461 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002462 },
2463
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002464 {
2465 .vendor = "SST",
2466 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002467 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002468 .manufacture_id = SST_ID,
2469 .model_id = SST_25VF040B,
2470 .total_size = 512,
2471 .page_size = 256,
2472 .tested = TEST_UNTESTED,
2473 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002474 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002475 .erase = NULL,
2476 .block_erasers =
2477 {
2478 {
2479 .eraseblocks = { {4 * 1024, 128} },
2480 .block_erase = spi_block_erase_20,
2481 }, {
2482 .eraseblocks = { {32 * 1024, 16} },
2483 .block_erase = spi_block_erase_52,
2484 }, {
2485 .eraseblocks = { {64 * 1024, 8} },
2486 .block_erase = spi_block_erase_d8,
2487 }, {
2488 .eraseblocks = { {512 * 1024, 1} },
2489 .block_erase = spi_block_erase_60,
2490 }, {
2491 .eraseblocks = { {512 * 1024, 1} },
2492 .block_erase = spi_block_erase_c7,
2493 },
2494 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002495 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00002496 .read = spi_chip_read,
2497 },
2498
2499 {
2500 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00002501 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002502 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002503 .manufacture_id = SST_ID,
2504 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00002505 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002506 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00002507 .tested = TEST_OK_PR,
2508 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002509 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002510 .erase = NULL,
2511 .block_erasers =
2512 {
2513 {
2514 .eraseblocks = { {4 * 1024, 128} },
2515 .block_erase = spi_block_erase_20,
2516 }, {
2517 .eraseblocks = { {32 * 1024, 16} },
2518 .block_erase = spi_block_erase_52,
2519 }, {
2520 .eraseblocks = { {64 * 1024, 8} },
2521 .block_erase = spi_block_erase_d8,
2522 }, {
2523 .eraseblocks = { {512 * 1024, 1} },
2524 .block_erase = spi_block_erase_60,
2525 }, {
2526 .eraseblocks = { {512 * 1024, 1} },
2527 .block_erase = spi_block_erase_c7,
2528 },
2529 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002530 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00002531 .read = spi_chip_read,
2532 },
2533
2534 {
2535 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002536 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002537 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002538 .manufacture_id = SST_ID,
2539 .model_id = SST_25VF080B,
2540 .total_size = 1024,
2541 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002542 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002543 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002544 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00002545 .erase = NULL,
2546 .block_erasers =
2547 {
2548 {
2549 .eraseblocks = { {4 * 1024, 256} },
2550 .block_erase = spi_block_erase_20,
2551 }, {
2552 .eraseblocks = { {32 * 1024, 32} },
2553 .block_erase = spi_block_erase_52,
2554 }, {
2555 .eraseblocks = { {64 * 1024, 16} },
2556 .block_erase = spi_block_erase_d8,
2557 }, {
2558 .eraseblocks = { {1024 * 1024, 1} },
2559 .block_erase = spi_block_erase_60,
2560 }, {
2561 .eraseblocks = { {1024 * 1024, 1} },
2562 .block_erase = spi_block_erase_c7,
2563 },
2564 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002565 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002566 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002567 },
2568
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002569 {
2570 .vendor = "SST",
2571 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002572 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002573 .manufacture_id = SST_ID,
2574 .model_id = SST_28SF040,
2575 .total_size = 512,
2576 .page_size = 256,
2577 .tested = TEST_UNTESTED,
2578 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002579 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002580 .erase = erase_28sf040,
2581 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002582 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002583 },
2584
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002585 {
2586 .vendor = "SST",
2587 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002588 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002589 .manufacture_id = SST_ID,
2590 .model_id = SST_29EE010,
2591 .total_size = 128,
2592 .page_size = 128,
2593 .tested = TEST_OK_PREW,
2594 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002595 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002596 .erase = erase_chip_jedec,
2597 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002598 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002599 },
2600
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002601 {
2602 .vendor = "SST",
2603 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002604 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002605 .manufacture_id = SST_ID,
2606 .model_id = SST_29LE010,
2607 .total_size = 128,
2608 .page_size = 128,
2609 .tested = TEST_UNTESTED,
2610 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002611 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002612 .erase = erase_chip_jedec,
2613 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002614 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002615 },
2616
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002617 {
2618 .vendor = "SST",
2619 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002620 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002621 .manufacture_id = SST_ID,
2622 .model_id = SST_29EE020A,
2623 .total_size = 256,
2624 .page_size = 128,
Peter Stugeb27d0a22009-02-22 21:07:28 +00002625 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002626 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002627 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002628 .erase = erase_chip_jedec,
2629 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002630 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002631 },
2632
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002633 {
2634 .vendor = "SST",
2635 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00002636 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002637 .manufacture_id = SST_ID,
2638 .model_id = SST_29LE020,
2639 .total_size = 256,
2640 .page_size = 128,
2641 .tested = TEST_UNTESTED,
2642 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002643 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002644 .erase = erase_chip_jedec,
2645 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002646 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002647 },
2648
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002649 {
2650 .vendor = "SST",
2651 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002652 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002653 .manufacture_id = SST_ID,
2654 .model_id = SST_39SF010,
2655 .total_size = 128,
2656 .page_size = 4096,
2657 .tested = TEST_OK_PREW,
2658 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002659 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002660 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002661 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002662 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002663 },
2664
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002665 {
2666 .vendor = "SST",
2667 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002668 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002669 .manufacture_id = SST_ID,
2670 .model_id = SST_39SF020,
2671 .total_size = 256,
2672 .page_size = 4096,
2673 .tested = TEST_OK_PREW,
2674 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002675 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002676 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002677 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002678 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002679 },
2680
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002681 {
2682 .vendor = "SST",
2683 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002684 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002685 .manufacture_id = SST_ID,
2686 .model_id = SST_39SF040,
2687 .total_size = 512,
2688 .page_size = 4096,
2689 .tested = TEST_OK_PREW,
2690 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002691 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002692 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002693 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002694 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002695 },
2696
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002697 {
2698 .vendor = "SST",
2699 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00002700 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002701 .manufacture_id = SST_ID,
2702 .model_id = SST_39VF512,
2703 .total_size = 64,
2704 .page_size = 4096,
Rudolf Mareke186da62009-05-17 18:24:24 +00002705 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002706 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002707 .probe_timing = 1, /* 150 ns*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002708 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002709 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002710 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002711 },
2712
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002713 {
2714 .vendor = "SST",
2715 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002716 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002717 .manufacture_id = SST_ID,
2718 .model_id = SST_39VF010,
2719 .total_size = 128,
2720 .page_size = 4096,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002721 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002722 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002723 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002724 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002725 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002726 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002727 },
2728
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002729 {
2730 .vendor = "SST",
2731 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00002732 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002733 .manufacture_id = SST_ID,
2734 .model_id = SST_39VF020,
2735 .total_size = 256,
2736 .page_size = 4096,
2737 .tested = TEST_OK_PREW,
2738 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002739 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002740 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002741 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002742 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002743 },
2744
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002745 {
2746 .vendor = "SST",
2747 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002748 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002749 .manufacture_id = SST_ID,
2750 .model_id = SST_39VF040,
2751 .total_size = 512,
2752 .page_size = 4096,
2753 .tested = TEST_OK_PROBE,
2754 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002755 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002756 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002757 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002758 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00002759 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002760
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002761 {
2762 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00002763 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00002764 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002765 .manufacture_id = SST_ID,
2766 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00002767 .total_size = 1024,
2768 .page_size = 4096,
2769 .tested = TEST_UNTESTED,
2770 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002771 .probe_timing = 1, /* 150 ns */
Peter Stuge8440cc02009-01-25 23:55:12 +00002772 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002773 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002774 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00002775 },
2776
2777 {
2778 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002779 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002780 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002781 .manufacture_id = SST_ID,
2782 .model_id = SST_49LF002A,
2783 .total_size = 256,
2784 .page_size = 16 * 1024,
2785 .tested = TEST_OK_PREW,
2786 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002787 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002788 .erase = erase_sst_fwhub,
2789 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002790 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002791 },
2792
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002793 {
2794 .vendor = "SST",
2795 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002796 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002797 .manufacture_id = SST_ID,
2798 .model_id = SST_49LF003A,
2799 .total_size = 384,
2800 .page_size = 64 * 1024,
Peter Lemenkov45835c42009-09-25 01:09:18 +00002801 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002802 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002803 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002804 .erase = erase_sst_fwhub,
2805 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002806 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002807 },
2808
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002809 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00002810 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
2811 * and is only honored for 64k block erase, but not 4k sector erase.
2812 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002813 .vendor = "SST",
2814 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002815 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002816 .manufacture_id = SST_ID,
2817 .model_id = SST_49LF004A,
2818 .total_size = 512,
2819 .page_size = 64 * 1024,
2820 .tested = TEST_OK_PREW,
2821 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002822 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00002823 .erase = NULL,
2824 .block_erasers =
2825 {
2826 {
2827 .eraseblocks = { {4 * 1024, 128} },
2828 .block_erase = erase_sector_jedec, /* missing unlock */
2829 }, {
2830 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00002831 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00002832 }, {
2833 .eraseblocks = { {512 * 1024, 1} },
2834 .block_erase = NULL, /* AA 55 80 AA 55 10, only in PP mode */
2835 },
2836 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002837 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002838 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002839 },
2840
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002841 {
2842 .vendor = "SST",
2843 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00002844 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002845 .manufacture_id = SST_ID,
2846 .model_id = SST_49LF004C,
2847 .total_size = 512,
2848 .page_size = 4 * 1024,
2849 .tested = TEST_UNTESTED,
2850 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002851 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002852 .erase = erase_49lfxxxc,
2853 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002854 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002855 },
2856
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002857 {
2858 .vendor = "SST",
2859 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002860 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002861 .manufacture_id = SST_ID,
2862 .model_id = SST_49LF008A,
2863 .total_size = 1024,
2864 .page_size = 64 * 1024,
2865 .tested = TEST_OK_PREW,
2866 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002867 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002868 .erase = erase_sst_fwhub,
2869 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002870 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002871 },
2872
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002873 {
2874 .vendor = "SST",
2875 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00002876 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002877 .manufacture_id = SST_ID,
2878 .model_id = SST_49LF008C,
2879 .total_size = 1024,
2880 .page_size = 4 * 1024,
2881 .tested = TEST_UNTESTED,
2882 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002883 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002884 .erase = erase_49lfxxxc,
2885 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002886 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002887 },
2888
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002889 {
2890 .vendor = "SST",
2891 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00002892 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002893 .manufacture_id = SST_ID,
2894 .model_id = SST_49LF016C,
2895 .total_size = 2048,
2896 .page_size = 4 * 1024,
2897 .tested = TEST_OK_PREW,
2898 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002899 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002900 .erase = erase_49lfxxxc,
2901 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002902 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002903 },
2904
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002905 {
2906 .vendor = "SST",
2907 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002908 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002909 .manufacture_id = SST_ID,
2910 .model_id = SST_49LF020,
2911 .total_size = 256,
2912 .page_size = 16 * 1024,
2913 .tested = TEST_OK_PR,
2914 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002915 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002916 .erase = erase_49lf040,
2917 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002918 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00002919 },
2920
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002921 {
2922 .vendor = "SST",
2923 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002924 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002925 .manufacture_id = SST_ID,
2926 .model_id = SST_49LF020A,
2927 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00002928 .page_size = 4 * 1024,
Nils Jacobsc0252682009-09-23 21:58:34 +00002929 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002930 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002931 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002932 .erase = erase_49lf040,
2933 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002934 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002935 },
2936
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002937 {
2938 .vendor = "SST",
2939 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002940 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002941 .manufacture_id = SST_ID,
2942 .model_id = SST_49LF040,
2943 .total_size = 512,
2944 .page_size = 4096,
2945 .tested = TEST_OK_PREW,
2946 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002947 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002948 .erase = erase_49lf040,
2949 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002950 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002951 },
2952
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002953 {
2954 .vendor = "SST",
2955 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002956 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002957 .manufacture_id = SST_ID,
2958 .model_id = SST_49LF040B,
2959 .total_size = 512,
2960 .page_size = 64 * 1024,
2961 .tested = TEST_OK_PREW,
2962 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002963 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002964 .erase = erase_sst_fwhub,
2965 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002966 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002967 },
2968
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002969 {
2970 .vendor = "SST",
2971 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002972 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002973 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00002974 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002975 .total_size = 1024,
2976 .page_size = 4096,
2977 .tested = TEST_OK_PREW,
2978 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002979 .probe_timing = TIMING_FIXME,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002980 .erase = erase_49lf040,
2981 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002982 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002983 },
2984
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002985 {
2986 .vendor = "SST",
2987 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00002988 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002989 .manufacture_id = SST_ID,
2990 .model_id = SST_49LF160C,
2991 .total_size = 2048,
2992 .page_size = 4 * 1024,
2993 .tested = TEST_OK_PREW,
2994 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002995 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002996 .erase = erase_49lfxxxc,
2997 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002998 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002999 },
3000
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003001 {
3002 .vendor = "ST",
3003 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003004 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003005 .manufacture_id = ST_ID,
3006 .model_id = ST_M25P05A,
3007 .total_size = 64,
3008 .page_size = 256,
3009 .tested = TEST_UNTESTED,
3010 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003011 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003012 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003013 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003014 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003015 },
3016
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00003017 /* The ST M25P05 is a bit of a problem. It has the same ID as the
3018 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
3019 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
3020 * only is successful if RDID does not work.
3021 */
3022 {
3023 .vendor = "ST",
3024 .name = "M25P05.RES",
3025 .bustype = CHIP_BUSTYPE_SPI,
3026 .manufacture_id = ST_ID,
3027 .model_id = ST_M25P05_RES,
3028 .total_size = 64,
3029 .page_size = 256,
3030 .tested = TEST_UNTESTED,
3031 .probe = probe_spi_res,
3032 .probe_timing = TIMING_ZERO,
3033 .erase = spi_chip_erase_c7,
3034 .write = spi_chip_write_1, /* 128 */
3035 .read = spi_chip_read,
3036 },
3037
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003038 {
3039 .vendor = "ST",
3040 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003041 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003042 .manufacture_id = ST_ID,
3043 .model_id = ST_M25P10A,
3044 .total_size = 128,
3045 .page_size = 256,
3046 .tested = TEST_UNTESTED,
3047 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003048 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003049 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003050 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003051 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003052 },
3053
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00003054 /* The ST M25P10 has the same problem as the M25P05. */
3055 {
3056 .vendor = "ST",
3057 .name = "M25P10.RES",
3058 .bustype = CHIP_BUSTYPE_SPI,
3059 .manufacture_id = ST_ID,
3060 .model_id = ST_M25P10_RES,
3061 .total_size = 128,
3062 .page_size = 256,
3063 .tested = TEST_UNTESTED,
3064 .probe = probe_spi_res,
3065 .probe_timing = TIMING_ZERO,
3066 .erase = spi_chip_erase_c7,
3067 .write = spi_chip_write_1, /* 128 */
3068 .read = spi_chip_read,
3069 },
3070
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003071 {
3072 .vendor = "ST",
3073 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003074 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003075 .manufacture_id = ST_ID,
3076 .model_id = ST_M25P20,
3077 .total_size = 256,
3078 .page_size = 256,
3079 .tested = TEST_UNTESTED,
3080 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003081 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003082 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003083 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003084 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003085 },
3086
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003087 {
3088 .vendor = "ST",
3089 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003090 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003091 .manufacture_id = ST_ID,
3092 .model_id = ST_M25P40,
3093 .total_size = 512,
3094 .page_size = 256,
Uwe Hermann04d5dc42009-07-03 17:12:05 +00003095 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003096 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003097 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003098 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003099 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003100 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003101 },
3102
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003103 {
3104 .vendor = "ST",
3105 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003106 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003107 .manufacture_id = ST_ID,
3108 .model_id = ST_M25P40_RES,
3109 .total_size = 512,
3110 .page_size = 256,
3111 .tested = TEST_UNTESTED,
3112 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003113 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003114 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003115 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003116 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003117 },
3118
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003119 {
3120 .vendor = "ST",
3121 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003122 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003123 .manufacture_id = ST_ID,
3124 .model_id = ST_M25P80,
3125 .total_size = 1024,
3126 .page_size = 256,
Carl-Daniel Hailfinger5190ec12009-06-22 10:09:07 +00003127 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003128 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003129 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003130 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003131 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003132 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003133 },
3134
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003135 {
3136 .vendor = "ST",
3137 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003138 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003139 .manufacture_id = ST_ID,
3140 .model_id = ST_M25P16,
3141 .total_size = 2048,
3142 .page_size = 256,
3143 .tested = TEST_OK_PREW,
3144 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003145 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003146 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003147 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003148 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003149 },
3150
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003151 {
3152 .vendor = "ST",
3153 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003154 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003155 .manufacture_id = ST_ID,
3156 .model_id = ST_M25P32,
3157 .total_size = 4096,
3158 .page_size = 256,
3159 .tested = TEST_OK_PREW,
3160 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003161 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003162 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003163 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003164 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003165 },
3166
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003167 {
3168 .vendor = "ST",
3169 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003170 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003171 .manufacture_id = ST_ID,
3172 .model_id = ST_M25P64,
3173 .total_size = 8192,
3174 .page_size = 256,
3175 .tested = TEST_UNTESTED,
3176 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003177 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003178 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003179 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003180 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003181 },
3182
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003183 {
3184 .vendor = "ST",
3185 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003186 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003187 .manufacture_id = ST_ID,
3188 .model_id = ST_M25P128,
3189 .total_size = 16384,
3190 .page_size = 256,
3191 .tested = TEST_UNTESTED,
3192 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003193 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003194 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003195 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003196 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003197 },
3198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003199 {
3200 .vendor = "ST",
3201 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003202 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003203 .manufacture_id = ST_ID,
3204 .model_id = ST_M29F002B,
3205 .total_size = 256,
3206 .page_size = 64 * 1024,
3207 .tested = TEST_UNTESTED,
3208 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003209 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003210 .erase = erase_m29f002,
3211 .write = write_m29f002b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003212 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003213 },
3214
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003215 {
3216 .vendor = "ST",
3217 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003218 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003219 .manufacture_id = ST_ID,
3220 .model_id = ST_M29F002T,
3221 .total_size = 256,
3222 .page_size = 64 * 1024,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003223 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003224 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003225 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Peter Stugeaf8ffac2009-01-26 06:42:02 +00003226 .erase = erase_m29f002,
3227 .write = write_m29f002t,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003228 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003229 },
3230
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003231 {
3232 .vendor = "ST",
3233 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003234 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003235 .manufacture_id = ST_ID,
3236 .model_id = ST_M29F040B,
3237 .total_size = 512,
3238 .page_size = 64 * 1024,
3239 .tested = TEST_OK_PREW,
3240 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003241 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003242 .erase = erase_29f040b,
3243 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003244 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003245 },
3246
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003247 {
3248 .vendor = "ST",
3249 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003250 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003251 .manufacture_id = ST_ID,
3252 .model_id = ST_M29F400BT,
3253 .total_size = 512,
3254 .page_size = 64 * 1024,
3255 .tested = TEST_UNTESTED,
3256 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003257 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003258 .erase = erase_m29f400bt,
3259 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003260 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003261 },
3262
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003263 {
3264 .vendor = "ST",
3265 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003266 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003267 .manufacture_id = ST_ID,
3268 .model_id = ST_M29W010B,
3269 .total_size = 128,
3270 .page_size = 16 * 1024,
3271 .tested = TEST_UNTESTED,
3272 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003273 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003274 .erase = erase_chip_jedec,
3275 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003276 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003277 },
3278
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003279 {
3280 .vendor = "ST",
3281 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003282 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003283 .manufacture_id = ST_ID,
3284 .model_id = ST_M29W040B,
3285 .total_size = 512,
3286 .page_size = 64 * 1024,
3287 .tested = TEST_UNTESTED,
3288 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003289 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003290 .erase = erase_chip_jedec,
3291 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003292 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003293 },
3294
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003295 {
3296 .vendor = "ST",
3297 .name = "M50FLW040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003298 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003299 .manufacture_id = ST_ID,
3300 .model_id = ST_M50FLW040A,
3301 .total_size = 512,
3302 .page_size = 64 * 1024,
3303 .tested = TEST_UNTESTED,
3304 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003305 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003306 .erase = erase_stm50flw0x0x,
3307 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003308 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003309 },
3310
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003311 {
3312 .vendor = "ST",
3313 .name = "M50FLW040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003314 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003315 .manufacture_id = ST_ID,
3316 .model_id = ST_M50FLW040B,
3317 .total_size = 512,
3318 .page_size = 64 * 1024,
3319 .tested = TEST_UNTESTED,
3320 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003321 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003322 .erase = erase_stm50flw0x0x,
3323 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003324 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003325 },
3326
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003327 {
3328 .vendor = "ST",
3329 .name = "M50FLW080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003330 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003331 .manufacture_id = ST_ID,
3332 .model_id = ST_M50FLW080A,
3333 .total_size = 1024,
3334 .page_size = 64 * 1024,
3335 .tested = TEST_OK_PREW,
3336 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003337 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003338 .erase = erase_stm50flw0x0x,
3339 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003340 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003341 },
3342
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003343 {
3344 .vendor = "ST",
3345 .name = "M50FLW080B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003346 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003347 .manufacture_id = ST_ID,
3348 .model_id = ST_M50FLW080B,
3349 .total_size = 1024,
3350 .page_size = 64 * 1024,
3351 .tested = TEST_UNTESTED,
3352 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003353 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003354 .erase = erase_stm50flw0x0x,
3355 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003356 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003357 },
3358
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003359 {
3360 .vendor = "ST",
3361 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00003362 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003363 .manufacture_id = ST_ID,
3364 .model_id = ST_M50FW002,
3365 .total_size = 256,
3366 .page_size = 64 * 1024,
3367 .tested = TEST_UNTESTED,
3368 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003369 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003370 .erase = NULL,
3371 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003372 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003373 },
3374
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003375 {
3376 .vendor = "ST",
3377 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00003378 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003379 .manufacture_id = ST_ID,
3380 .model_id = ST_M50FW016,
3381 .total_size = 2048,
3382 .page_size = 64 * 1024,
3383 .tested = TEST_UNTESTED,
3384 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003385 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003386 .erase = erase_82802ab,
3387 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003388 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003389 },
3390
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003391 {
3392 .vendor = "ST",
3393 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003394 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003395 .manufacture_id = ST_ID,
3396 .model_id = ST_M50FW040,
3397 .total_size = 512,
3398 .page_size = 64 * 1024,
3399 .tested = TEST_OK_PREW,
3400 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003401 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003402 .erase = erase_82802ab,
3403 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003404 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003405 },
3406
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003407 {
3408 .vendor = "ST",
3409 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00003410 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003411 .manufacture_id = ST_ID,
3412 .model_id = ST_M50FW080,
3413 .total_size = 1024,
3414 .page_size = 64 * 1024,
Peter Stugea657e942009-01-24 23:01:08 +00003415 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003416 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003417 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003418 .erase = erase_82802ab,
3419 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003420 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003421 },
3422
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003423 {
3424 .vendor = "ST",
3425 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00003426 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003427 .manufacture_id = ST_ID,
3428 .model_id = ST_M50LPW116,
3429 .total_size = 2048,
3430 .page_size = 64 * 1024,
3431 .tested = TEST_UNTESTED,
3432 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003433 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003434 .erase = erase_chip_jedec,
3435 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003436 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003437 },
3438
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003439 {
3440 .vendor = "SyncMOS",
3441 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003442 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003443 .manufacture_id = SYNCMOS_ID,
3444 .model_id = S29C31004T,
3445 .total_size = 512,
3446 .page_size = 128,
3447 .tested = TEST_UNTESTED,
3448 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003449 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003450 .erase = erase_chip_jedec,
3451 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003452 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003453 },
3454
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003455 {
3456 .vendor = "SyncMOS",
3457 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003458 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003459 .manufacture_id = SYNCMOS_ID,
3460 .model_id = S29C51001T,
3461 .total_size = 128,
3462 .page_size = 128,
3463 .tested = TEST_UNTESTED,
3464 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003465 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003466 .erase = erase_chip_jedec,
3467 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003468 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003469 },
3470
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003471 {
3472 .vendor = "SyncMOS",
3473 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003474 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003475 .manufacture_id = SYNCMOS_ID,
3476 .model_id = S29C51002T,
3477 .total_size = 256,
3478 .page_size = 128,
3479 .tested = TEST_OK_PREW,
3480 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003481 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003482 .erase = erase_chip_jedec,
3483 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003484 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003485 },
3486
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003487 {
3488 .vendor = "SyncMOS",
3489 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003490 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003491 .manufacture_id = SYNCMOS_ID,
3492 .model_id = S29C51004T,
3493 .total_size = 512,
3494 .page_size = 128,
3495 .tested = TEST_UNTESTED,
3496 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003497 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003498 .erase = erase_chip_jedec,
3499 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003500 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003501 },
3502
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003503 {
Uwe Hermanna106d152009-05-27 23:17:40 +00003504 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003505 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00003506 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003507 .manufacture_id = TI_OLD_ID,
3508 .model_id = TI_TMS29F002RB,
3509 .total_size = 256,
3510 .page_size = 16384, /* Non-uniform sectors */
3511 .tested = TEST_UNTESTED,
3512 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003513 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003514 .erase = NULL,
3515 .write = NULL,
3516 .read = read_memmapped,
3517 },
3518
3519 {
Uwe Hermanna106d152009-05-27 23:17:40 +00003520 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003521 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003522 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003523 .manufacture_id = TI_OLD_ID,
3524 .model_id = TI_TMS29F002RT,
3525 .total_size = 256,
3526 .page_size = 16384, /* Non-uniform sectors */
3527 .tested = TEST_UNTESTED,
3528 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003529 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003530 .erase = NULL,
3531 .write = NULL,
3532 .read = read_memmapped,
3533 },
3534
3535 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003536 .vendor = "Winbond",
3537 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003538 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003539 .manufacture_id = WINBOND_NEX_ID,
3540 .model_id = W_25X10,
3541 .total_size = 128,
3542 .page_size = 256,
3543 .tested = TEST_UNTESTED,
3544 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003545 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003546 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003547 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003548 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003549 },
3550
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003551 {
3552 .vendor = "Winbond",
3553 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003554 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003555 .manufacture_id = WINBOND_NEX_ID,
3556 .model_id = W_25X20,
3557 .total_size = 256,
3558 .page_size = 256,
3559 .tested = TEST_UNTESTED,
3560 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003561 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003562 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003563 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003564 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003565 },
3566
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003567 {
3568 .vendor = "Winbond",
3569 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003570 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003571 .manufacture_id = WINBOND_NEX_ID,
3572 .model_id = W_25X40,
3573 .total_size = 512,
3574 .page_size = 256,
3575 .tested = TEST_OK_PREW,
3576 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003577 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003578 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003579 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003580 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003581 },
3582
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003583 {
3584 .vendor = "Winbond",
3585 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003586 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003587 .manufacture_id = WINBOND_NEX_ID,
3588 .model_id = W_25X80,
3589 .total_size = 1024,
3590 .page_size = 256,
3591 .tested = TEST_OK_PREW,
3592 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003593 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003594 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003595 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003596 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003597 },
3598
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003599 {
3600 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00003601 .name = "W25x16",
3602 .bustype = CHIP_BUSTYPE_SPI,
3603 .manufacture_id = WINBOND_NEX_ID,
3604 .model_id = W_25X16,
3605 .total_size = 2048,
3606 .page_size = 256,
3607 .tested = TEST_OK_PR,
3608 .probe = probe_spi_rdid,
3609 .probe_timing = TIMING_ZERO,
3610 .erase = spi_chip_erase_c7,
3611 .write = spi_chip_write_256,
3612 .read = spi_chip_read,
3613 },
3614
3615 {
3616 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00003617 .name = "W25x32",
3618 .bustype = CHIP_BUSTYPE_SPI,
3619 .manufacture_id = WINBOND_NEX_ID,
3620 .model_id = W_25X32,
3621 .total_size = 4096,
3622 .page_size = 256,
3623 .tested = TEST_OK_PROBE,
3624 .probe = probe_spi_rdid,
3625 .probe_timing = TIMING_ZERO,
3626 .erase = spi_chip_erase_c7,
3627 .write = spi_chip_write_256,
3628 .read = spi_chip_read,
3629 },
3630
3631 {
3632 .vendor = "Winbond",
3633 .name = "W25x64",
3634 .bustype = CHIP_BUSTYPE_SPI,
3635 .manufacture_id = WINBOND_NEX_ID,
3636 .model_id = W_25X64,
3637 .total_size = 8192,
3638 .page_size = 256,
3639 .tested = TEST_UNTESTED,
3640 .probe = probe_spi_rdid,
3641 .probe_timing = TIMING_ZERO,
3642 .erase = spi_chip_erase_c7,
3643 .write = spi_chip_write_256,
3644 .read = spi_chip_read,
3645 },
3646
3647 {
3648 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003649 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00003650 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003651 .manufacture_id = WINBOND_ID,
3652 .model_id = W_29C011,
3653 .total_size = 128,
3654 .page_size = 128,
3655 .tested = TEST_OK_PREW,
3656 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003657 .probe_timing = 10, /* used datasheet for the W29C011A */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003658 .erase = erase_chip_jedec,
3659 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003660 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003661 },
3662
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003663 {
3664 .vendor = "Winbond",
3665 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00003666 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003667 .manufacture_id = WINBOND_ID,
3668 .model_id = W_29C020C,
3669 .total_size = 256,
3670 .page_size = 128,
3671 .tested = TEST_OK_PREW,
3672 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003673 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003674 .erase = erase_chip_jedec,
3675 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003676 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003677 },
3678
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003679 {
3680 .vendor = "Winbond",
3681 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00003682 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003683 .manufacture_id = WINBOND_ID,
3684 .model_id = W_29C040P,
3685 .total_size = 512,
3686 .page_size = 256,
Carl-Daniel Hailfinger8a8a2262009-11-14 03:48:33 +00003687 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003688 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003689 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003690 .erase = erase_chip_jedec,
3691 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003692 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003693 },
3694
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003695 {
3696 .vendor = "Winbond",
3697 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00003698 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003699 .manufacture_id = WINBOND_ID,
3700 .model_id = W_29C011,
3701 .total_size = 128,
3702 .page_size = 128,
3703 .tested = TEST_OK_PREW,
3704 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003705 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003706 .erase = erase_chip_jedec,
3707 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003708 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003709 },
3710
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003711 {
3712 .vendor = "Winbond",
3713 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003714 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003715 .manufacture_id = WINBOND_ID,
3716 .model_id = W_39V040A,
3717 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003718 .page_size = 64 * 1024,
Uwe Hermann690bcba2009-05-21 17:11:25 +00003719 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003720 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003721 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003722 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003723 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003724 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003725 },
3726
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003727 {
3728 .vendor = "Winbond",
3729 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003730 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003731 .manufacture_id = WINBOND_ID,
3732 .model_id = W_39V040B,
3733 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003734 .page_size = 64 * 1024,
Luc Verhaegen8bfb59c2009-07-08 14:50:36 +00003735 .tested = TEST_OK_PR | TEST_BAD_ERASE | TEST_BAD_WRITE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003736 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003737 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003738 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003739 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003740 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003741 },
3742
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003743 {
3744 .vendor = "Winbond",
3745 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003746 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003747 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003748 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003749 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003750 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003751 .tested = TEST_OK_PREW,
3752 .probe = probe_w39v040c,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003753 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v040c.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003754 .erase = erase_w39v040c,
3755 .write = write_w39v040c,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003756 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003757 },
3758
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003759 {
3760 .vendor = "Winbond",
3761 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003762 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003763 .manufacture_id = WINBOND_ID,
3764 .model_id = W_39V040FA,
3765 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003766 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003767 .tested = TEST_OK_PREW,
3768 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003769 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003770 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003771 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003772 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003773 },
3774
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003775 {
3776 .vendor = "Winbond",
3777 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003778 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003779 .manufacture_id = WINBOND_ID,
3780 .model_id = W_39V080A,
3781 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00003782 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003783 .tested = TEST_OK_PREW,
3784 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003785 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003786 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003787 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003788 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003789 },
3790
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003791 {
3792 .vendor = "Winbond",
3793 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00003794 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003795 .manufacture_id = WINBOND_ID,
3796 .model_id = W_49F002U,
3797 .total_size = 256,
3798 .page_size = 128,
3799 .tested = TEST_OK_PREW,
3800 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003801 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003802 .erase = erase_chip_jedec,
3803 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003804 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003805 },
3806
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003807 {
3808 .vendor = "Winbond",
3809 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003810 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003811 .manufacture_id = WINBOND_ID,
3812 .model_id = W_49V002A,
3813 .total_size = 256,
3814 .page_size = 128,
3815 .tested = TEST_OK_PREW,
3816 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003817 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003818 .erase = erase_chip_jedec,
3819 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003820 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003821 },
3822
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003823 {
3824 .vendor = "Winbond",
3825 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003826 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003827 .manufacture_id = WINBOND_ID,
3828 .model_id = W_49V002FA,
3829 .total_size = 256,
3830 .page_size = 128,
3831 .tested = TEST_UNTESTED,
3832 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003833 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003834 .erase = erase_chip_jedec,
3835 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003836 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003837 },
3838
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003839 {
3840 .vendor = "Winbond",
3841 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003842 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003843 .manufacture_id = WINBOND_ID,
3844 .model_id = W_39V080FA,
3845 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00003846 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003847 .tested = TEST_OK_PREW,
3848 .probe = probe_winbond_fwhub,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003849 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v080fa.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003850 .erase = erase_winbond_fwhub,
3851 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003852 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003853 },
3854
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003855 {
3856 .vendor = "Winbond",
3857 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003858 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003859 .manufacture_id = WINBOND_ID,
3860 .model_id = W_39V080FA_DM,
3861 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003862 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003863 .tested = TEST_UNTESTED,
3864 .probe = probe_winbond_fwhub,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003865 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v080fa.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003866 .erase = erase_winbond_fwhub,
3867 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003868 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003869 },
3870
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003871 {
3872 .vendor = "Atmel",
3873 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003874 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003875 .manufacture_id = ATMEL_ID,
3876 .model_id = GENERIC_DEVICE_ID,
3877 .total_size = 0,
3878 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003879 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003880 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003881 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003882 .erase = NULL,
3883 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003884 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003885 },
3886
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003887 {
3888 .vendor = "EON",
3889 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003890 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003891 .manufacture_id = EON_ID_NOPREFIX,
3892 .model_id = GENERIC_DEVICE_ID,
3893 .total_size = 0,
3894 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003895 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003896 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003897 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003898 .erase = NULL,
3899 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003900 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003901 },
3902
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003903 {
3904 .vendor = "Macronix",
3905 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003906 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003907 .manufacture_id = MX_ID,
3908 .model_id = GENERIC_DEVICE_ID,
3909 .total_size = 0,
3910 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003911 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003912 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003913 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003914 .erase = NULL,
3915 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003916 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003917 },
3918
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003919 {
3920 .vendor = "PMC",
3921 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003922 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003923 .manufacture_id = PMC_ID,
3924 .model_id = GENERIC_DEVICE_ID,
3925 .total_size = 0,
3926 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003927 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003928 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003929 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003930 .erase = NULL,
3931 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003932 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003933 },
3934
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003935 {
3936 .vendor = "SST",
3937 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003938 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003939 .manufacture_id = SST_ID,
3940 .model_id = GENERIC_DEVICE_ID,
3941 .total_size = 0,
3942 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003943 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003944 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003945 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003946 .erase = NULL,
3947 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003948 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003949 },
3950
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003951 {
3952 .vendor = "ST",
3953 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003954 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003955 .manufacture_id = ST_ID,
3956 .model_id = GENERIC_DEVICE_ID,
3957 .total_size = 0,
3958 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003959 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003960 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003961 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003962 .erase = NULL,
3963 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003964 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003965 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00003966
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00003967 {
Sean Nelson118e1d62009-11-24 02:08:11 +00003968 .vendor = "Sanyo",
3969 .name = "unknown Sanyo SPI chip",
3970 .bustype = CHIP_BUSTYPE_SPI,
3971 .manufacture_id = SANYO_ID,
3972 .model_id = GENERIC_DEVICE_ID,
3973 .total_size = 0,
3974 .page_size = 256,
3975 .tested = TEST_BAD_PREW,
3976 .probe = probe_spi_rdid,
3977 .probe_timing = TIMING_ZERO,
3978 .erase = NULL,
3979 .write = NULL,
3980 .read = NULL,
3981 },
3982
3983 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00003984 .vendor = "Generic",
3985 .name = "unknown SPI chip (RDID)",
3986 .bustype = CHIP_BUSTYPE_SPI,
3987 .manufacture_id = GENERIC_MANUF_ID,
3988 .model_id = GENERIC_DEVICE_ID,
3989 .total_size = 0,
3990 .page_size = 256,
3991 .tested = TEST_BAD_PREW,
3992 .probe = probe_spi_rdid,
3993 .erase = NULL,
3994 .write = NULL,
3995 },
3996 {
3997 .vendor = "Generic",
3998 .name = "unknown SPI chip (REMS)",
3999 .bustype = CHIP_BUSTYPE_SPI,
4000 .manufacture_id = GENERIC_MANUF_ID,
4001 .model_id = GENERIC_DEVICE_ID,
4002 .total_size = 0,
4003 .page_size = 256,
4004 .tested = TEST_BAD_PREW,
4005 .probe = probe_spi_rems,
4006 .erase = NULL,
4007 .write = NULL,
4008 },
4009
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004010 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00004011};