blob: 786d53a15fa007ba3265eb892f14db5f9d3ed6b6 [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,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000301 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000302 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000303 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000304 },
305
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000306 {
307 .vendor = "Atmel",
308 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000309 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000310 .manufacture_id = ATMEL_ID,
311 .model_id = AT_25DF041A,
312 .total_size = 512,
313 .page_size = 256,
314 .tested = TEST_UNTESTED,
315 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000316 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000317 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000318 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000319 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000320 },
321
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000322 {
323 .vendor = "Atmel",
324 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000325 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000326 .manufacture_id = ATMEL_ID,
327 .model_id = AT_25DF081,
328 .total_size = 1024,
329 .page_size = 256,
330 .tested = TEST_UNTESTED,
331 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000332 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000333 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000334 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000335 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000336 },
337
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000338 {
339 .vendor = "Atmel",
340 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000341 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000342 .manufacture_id = ATMEL_ID,
343 .model_id = AT_25DF161,
344 .total_size = 2048,
345 .page_size = 256,
346 .tested = TEST_UNTESTED,
347 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000348 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000349 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000350 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000351 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000352 },
353
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000354 {
355 .vendor = "Atmel",
356 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000357 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000358 .manufacture_id = ATMEL_ID,
359 .model_id = AT_25DF321,
360 .total_size = 4096,
361 .page_size = 256,
362 .tested = TEST_OK_PREW,
363 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000364 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000365 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000366 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000367 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000368 },
369
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000370 {
371 .vendor = "Atmel",
372 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000373 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000374 .manufacture_id = ATMEL_ID,
375 .model_id = AT_25DF321A,
376 .total_size = 4096,
377 .page_size = 256,
378 .tested = TEST_UNTESTED,
379 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000380 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000381 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000382 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000383 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000384 },
385
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000386 {
387 .vendor = "Atmel",
388 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000389 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000390 .manufacture_id = ATMEL_ID,
391 .model_id = AT_25DF641,
392 .total_size = 8192,
393 .page_size = 256,
394 .tested = TEST_UNTESTED,
395 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000396 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000397 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000398 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000399 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000400 },
401
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000402 {
403 .vendor = "Atmel",
404 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000405 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000406 .manufacture_id = ATMEL_ID,
407 .model_id = AT_25F512B,
408 .total_size = 64,
409 .page_size = 256,
410 .tested = TEST_UNTESTED,
411 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000412 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000413 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000414 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000415 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000416 },
417
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000418 {
419 .vendor = "Atmel",
420 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000421 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000422 .manufacture_id = ATMEL_ID,
423 .model_id = AT_25FS010,
424 .total_size = 128,
425 .page_size = 256,
426 .tested = TEST_UNTESTED,
427 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000428 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000429 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000430 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000431 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000432 },
433
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000434 {
435 .vendor = "Atmel",
436 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000437 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000438 .manufacture_id = ATMEL_ID,
439 .model_id = AT_25FS040,
440 .total_size = 512,
441 .page_size = 256,
442 .tested = TEST_UNTESTED,
443 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000444 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000445 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000446 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000447 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000448 },
449
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000450 {
451 .vendor = "Atmel",
452 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000453 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000454 .manufacture_id = ATMEL_ID,
455 .model_id = AT_26DF041,
456 .total_size = 512,
457 .page_size = 256,
458 .tested = TEST_UNTESTED,
459 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000460 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000461 .erase = NULL,
462 .write = NULL /* Incompatible Page write */,
463 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000464 },
465
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000466 {
467 .vendor = "Atmel",
468 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000469 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000470 .manufacture_id = ATMEL_ID,
471 .model_id = AT_26DF081A,
472 .total_size = 1024,
473 .page_size = 256,
474 .tested = TEST_UNTESTED,
475 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000476 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000477 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000478 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000479 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000480 },
481
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000482 {
483 .vendor = "Atmel",
484 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000485 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000486 .manufacture_id = ATMEL_ID,
487 .model_id = AT_26DF161,
488 .total_size = 2048,
489 .page_size = 256,
490 .tested = TEST_UNTESTED,
491 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000492 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000493 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000494 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000495 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000496 },
497
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000498 {
499 .vendor = "Atmel",
500 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000501 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000502 .manufacture_id = ATMEL_ID,
503 .model_id = AT_26DF161A,
504 .total_size = 2048,
505 .page_size = 256,
506 .tested = TEST_UNTESTED,
507 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000508 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000509 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000510 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000511 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000512 },
513
514 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000515 /*{
516 .vendor = "Atmel",
517 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000518 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000519 .manufacture_id = ATMEL_ID,
520 .model_id = AT_26DF321,
521 .total_size = 4096,
522 .page_size = 256,
523 .tested = TEST_UNTESTED,
524 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000525 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000526 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000527 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000528 .read = spi_chip_read,
529 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000530
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000531 {
532 .vendor = "Atmel",
533 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000534 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000535 .manufacture_id = ATMEL_ID,
536 .model_id = AT_26F004,
537 .total_size = 512,
538 .page_size = 256,
539 .tested = TEST_UNTESTED,
540 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000541 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf8bc28f2009-01-08 16:53:13 +0000542 .erase = spi_chip_erase_60_c7,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000543 .write = NULL /* Incompatible Page write */,
544 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000545 },
546
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000547 {
548 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000549 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000550 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000551 .manufacture_id = ATMEL_ID,
552 .model_id = AT_29C512,
553 .total_size = 64,
554 .page_size = 128,
555 .tested = TEST_OK_PREW,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000556 .probe = probe_jedec,
557 .probe_timing = 10000, /* 10mS, Enter=Exec */
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000558 .erase = erase_chip_jedec,
559 .write = write_jedec,
560 .read = read_memmapped,
561
562 },
563
564 {
565 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000566 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000567 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000568 .manufacture_id = ATMEL_ID,
569 .model_id = AT_29C010A,
570 .total_size = 128,
571 .page_size = 128,
572 .tested = TEST_OK_PRE,
573 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000574 .probe_timing = 10000, /* 10mS, Enter=Exec */
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000575 .erase = erase_chip_jedec,
576 .write = write_jedec, /* FIXME */
577 .read = read_memmapped,
578 },
579
580 {
581 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000582 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000583 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000584 .manufacture_id = ATMEL_ID,
585 .model_id = AT_29C020,
586 .total_size = 256,
587 .page_size = 256,
588 .tested = TEST_OK_PREW,
589 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000590 .probe_timing = 10000, /* 10ms */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000591 .erase = erase_chip_jedec,
592 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000593 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000594 },
595
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000596 {
597 .vendor = "Atmel",
598 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000599 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000600 .manufacture_id = ATMEL_ID,
601 .model_id = AT_29C040A,
602 .total_size = 512,
603 .page_size = 256,
604 .tested = TEST_UNTESTED,
605 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000606 .probe_timing = 10000, /* 10 ms */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000607 .erase = erase_chip_jedec,
608 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000609 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000610 },
611
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000612 {
613 .vendor = "Atmel",
614 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000615 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000616 .manufacture_id = ATMEL_ID,
617 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000618 .total_size = 16896 /* No power of two sizes */,
619 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000620 .tested = TEST_BAD_READ,
621 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000622 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000623 .erase = NULL,
624 .write = NULL /* Incompatible Page write */,
625 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000626 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000627
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000628 {
629 .vendor = "Atmel",
630 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000631 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000632 .manufacture_id = ATMEL_ID,
633 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000634 .total_size = 128 /* Size can only be determined from status register */,
635 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000636 .tested = TEST_BAD_READ,
637 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000638 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000639 .erase = NULL,
640 .write = NULL,
641 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000642 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000643
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000644 {
645 .vendor = "Atmel",
646 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000647 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000648 .manufacture_id = ATMEL_ID,
649 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000650 .total_size = 256 /* Size can only be determined from status register */,
651 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000652 .tested = TEST_BAD_READ,
653 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000654 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000655 .erase = NULL,
656 .write = NULL,
657 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000658 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000659
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000660 {
661 .vendor = "Atmel",
662 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000663 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000664 .manufacture_id = ATMEL_ID,
665 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000666 .total_size = 512 /* Size can only be determined from status register */,
667 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000668 .tested = TEST_BAD_READ,
669 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000670 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000671 .erase = NULL,
672 .write = NULL,
673 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000674 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000675
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000676 {
677 .vendor = "Atmel",
678 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000679 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000680 .manufacture_id = ATMEL_ID,
681 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000682 .total_size = 1024 /* Size can only be determined from status register */,
683 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000684 .tested = TEST_BAD_READ,
685 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000686 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000687 .erase = NULL,
688 .write = NULL,
689 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000690 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000691
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000692 {
693 .vendor = "Atmel",
694 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000695 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000696 .manufacture_id = ATMEL_ID,
697 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000698 .total_size = 2048 /* Size can only be determined from status register */,
699 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000700 .tested = TEST_BAD_READ,
701 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000702 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000703 .erase = NULL,
704 .write = NULL,
705 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000706 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000707
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000708 {
709 .vendor = "Atmel",
710 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000711 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000712 .manufacture_id = ATMEL_ID,
713 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000714 .total_size = 4224 /* No power of two sizes */,
715 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000716 .tested = TEST_BAD_READ,
717 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000718 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000719 .erase = NULL,
720 .write = NULL,
721 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000722 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000723
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000724 {
725 .vendor = "Atmel",
726 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000727 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000728 .manufacture_id = ATMEL_ID,
729 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000730 .total_size = 4096 /* Size can only be determined from status register */,
731 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000732 .tested = TEST_BAD_READ,
733 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000734 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000735 .erase = NULL,
736 .write = NULL,
737 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000738 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000739
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000740 {
741 .vendor = "Atmel",
742 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000743 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000744 .manufacture_id = ATMEL_ID,
745 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000746 .total_size = 8192 /* Size can only be determined from status register */,
747 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000748 .tested = TEST_BAD_READ,
749 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000750 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000751 .erase = NULL,
752 .write = NULL,
753 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000754 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000755
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000756 {
757 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +0000758 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +0000759 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +0000760 .manufacture_id = ATMEL_ID,
761 .model_id = AT_49BV512,
762 .total_size = 64,
763 .page_size = 64,
764 .tested = TEST_OK_PREW,
765 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000766 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Uwe Hermannb4dcb712009-05-13 11:36:06 +0000767 .erase = erase_chip_jedec,
768 .write = write_49f002,
769 .read = read_memmapped,
770 },
771
772 {
773 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000774 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +0000775 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000776 .manufacture_id = ATMEL_ID,
777 .model_id = AT_49F002N,
778 .total_size = 256,
779 .page_size = 256,
780 .tested = TEST_UNTESTED,
781 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000782 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000783 .erase = erase_chip_jedec,
784 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000785 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000786 },
787
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000788 {
789 .vendor = "Atmel",
790 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +0000791 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000792 .manufacture_id = ATMEL_ID,
793 .model_id = AT_49F002NT,
794 .total_size = 256,
795 .page_size = 256,
796 .tested = TEST_OK_PREW,
797 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000798 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000799 .erase = erase_chip_jedec,
800 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000801 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000802 },
803
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000804 {
805 .vendor = "AMIC",
806 .name = "A25L40P",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000807 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000808 .manufacture_id = AMIC_ID,
809 .model_id = AMIC_A25L40P,
810 .total_size = 512,
811 .page_size = 256,
812 .tested = TEST_OK_PREW,
813 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000814 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000815 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000816 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000817 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000818 },
819
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000820 {
821 .vendor = "AMIC",
822 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000823 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000824 .manufacture_id = AMIC_ID_NOPREFIX,
825 .model_id = AMIC_A29002B,
826 .total_size = 256,
827 .page_size = 64 * 1024,
828 .tested = TEST_UNTESTED,
829 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000830 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000831 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +0000832 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000833 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000834 },
835
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000836 {
837 .vendor = "AMIC",
838 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +0000839 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000840 .manufacture_id = AMIC_ID_NOPREFIX,
841 .model_id = AMIC_A29002T,
842 .total_size = 256,
843 .page_size = 64 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +0000844 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000845 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000846 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000847 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +0000848 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000849 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000850 },
851
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000852 {
853 .vendor = "AMIC",
854 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +0000855 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000856 .manufacture_id = AMIC_ID_NOPREFIX,
857 .model_id = AMIC_A29040B,
858 .total_size = 512,
859 .page_size = 64 * 1024,
860 .tested = TEST_OK_PR,
861 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000862 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000863 .erase = NULL,
864 .block_erasers =
865 {
866 {
867 .eraseblocks = { {64 * 1024, 8} },
868 .block_erase = erase_sector_29f040b,
869 }, {
870 .eraseblocks = { {512 * 1024, 1} },
871 .block_erase = erase_chip_29f040b,
872 },
873 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000874 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000875 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000876 },
877
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000878 {
879 .vendor = "AMIC",
880 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000881 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000882 .manufacture_id = AMIC_ID_NOPREFIX,
883 .model_id = AMIC_A49LF040A,
884 .total_size = 512,
885 .page_size = 64 * 1024,
886 .tested = TEST_OK_PREW,
887 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +0000888 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000889 .erase = erase_49fl00x,
890 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000891 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000892 },
893
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000894 {
895 .vendor = "EMST",
896 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +0000897 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000898 .manufacture_id = EMST_ID,
899 .model_id = EMST_F49B002UA,
900 .total_size = 256,
901 .page_size = 4096,
902 .tested = TEST_UNTESTED,
903 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000904 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000905 .erase = erase_chip_jedec,
906 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000907 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000908 },
909
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000910 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +0000911 .vendor = "Eon",
912 .name = "EN25B05",
913 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +0000914 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +0000915 .model_id = EN_25B05,
916 .total_size = 64,
917 .page_size = 256,
918 .tested = TEST_UNTESTED,
919 .probe = probe_spi_rdid,
920 .probe_timing = TIMING_ZERO,
921 .erase = spi_chip_erase_c7,
922 .write = spi_chip_write_256,
923 .read = spi_chip_read,
924 },
925
926 {
927 .vendor = "Eon",
928 .name = "EN25B10",
929 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +0000930 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +0000931 .model_id = EN_25B10,
932 .total_size = 128,
933 .page_size = 256,
934 .tested = TEST_UNTESTED,
935 .probe = probe_spi_rdid,
936 .probe_timing = TIMING_ZERO,
937 .erase = spi_chip_erase_c7,
938 .write = spi_chip_write_256,
939 .read = spi_chip_read,
940 },
941
942 {
943 .vendor = "Eon",
944 .name = "EN25B20",
945 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +0000946 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +0000947 .model_id = EN_25B20,
948 .total_size = 256,
949 .page_size = 256,
950 .tested = TEST_UNTESTED,
951 .probe = probe_spi_rdid,
952 .probe_timing = TIMING_ZERO,
953 .erase = spi_chip_erase_c7,
954 .write = spi_chip_write_256,
955 .read = spi_chip_read,
956 },
957
958 {
959 .vendor = "Eon",
960 .name = "EN25B40",
961 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +0000962 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +0000963 .model_id = EN_25B40,
964 .total_size = 512,
965 .page_size = 256,
966 .tested = TEST_UNTESTED,
967 .probe = probe_spi_rdid,
968 .probe_timing = TIMING_ZERO,
969 .erase = spi_chip_erase_c7,
970 .write = spi_chip_write_256,
971 .read = spi_chip_read,
972 },
973
974 {
975 .vendor = "Eon",
976 .name = "EN25B80",
977 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +0000978 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +0000979 .model_id = EN_25B80,
980 .total_size = 1024,
981 .page_size = 256,
982 .tested = TEST_UNTESTED,
983 .probe = probe_spi_rdid,
984 .probe_timing = TIMING_ZERO,
985 .erase = spi_chip_erase_c7,
986 .write = spi_chip_write_256,
987 .read = spi_chip_read,
988 },
989
990 {
991 .vendor = "Eon",
992 .name = "EN25B16",
993 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +0000994 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +0000995 .model_id = EN_25B16,
996 .total_size = 2048,
997 .page_size = 256,
998 .tested = TEST_UNTESTED,
999 .probe = probe_spi_rdid,
1000 .probe_timing = TIMING_ZERO,
1001 .erase = spi_chip_erase_c7,
1002 .write = spi_chip_write_256,
1003 .read = spi_chip_read,
1004 },
1005
1006 {
1007 .vendor = "Eon",
1008 .name = "EN25B32",
1009 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001010 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001011 .model_id = EN_25B32,
1012 .total_size = 4096,
1013 .page_size = 256,
1014 .tested = TEST_UNTESTED,
1015 .probe = probe_spi_rdid,
1016 .probe_timing = TIMING_ZERO,
1017 .erase = spi_chip_erase_c7,
1018 .write = spi_chip_write_256,
1019 .read = spi_chip_read,
1020 },
1021
1022 {
1023 .vendor = "Eon",
1024 .name = "EN25B64",
1025 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001026 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001027 .model_id = EN_25B64,
1028 .total_size = 8192,
1029 .page_size = 256,
1030 .tested = TEST_UNTESTED,
1031 .probe = probe_spi_rdid,
1032 .probe_timing = TIMING_ZERO,
1033 .erase = spi_chip_erase_c7,
1034 .write = spi_chip_write_256,
1035 .read = spi_chip_read,
1036 },
1037
1038 {
1039 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001040 .name = "EN25D16",
1041 .bustype = CHIP_BUSTYPE_SPI,
1042 .manufacture_id = EON_ID_NOPREFIX,
1043 .model_id = EN_25D16,
1044 .total_size = 2048,
1045 .page_size = 256,
1046 .tested = TEST_UNTESTED,
1047 .probe = probe_spi_rdid,
1048 .probe_timing = TIMING_ZERO,
1049 .erase = spi_chip_erase_60_c7,
1050 .write = spi_chip_write_256,
1051 .read = spi_chip_read,
1052 },
1053
1054 {
1055 .vendor = "Eon",
1056 .name = "EN25F05",
1057 .bustype = CHIP_BUSTYPE_SPI,
1058 .manufacture_id = EON_ID_NOPREFIX,
1059 .model_id = EN_25F05,
1060 .total_size = 64,
1061 .page_size = 256,
1062 .tested = TEST_UNTESTED,
1063 .probe = probe_spi_rdid,
1064 .probe_timing = TIMING_ZERO,
1065 .erase = spi_chip_erase_60_c7,
1066 .write = spi_chip_write_256,
1067 .read = spi_chip_read,
1068 },
1069
1070 {
1071 .vendor = "Eon",
1072 .name = "EN25F10",
1073 .bustype = CHIP_BUSTYPE_SPI,
1074 .manufacture_id = EON_ID_NOPREFIX,
1075 .model_id = EN_25F10,
1076 .total_size = 128,
1077 .page_size = 256,
1078 .tested = TEST_UNTESTED,
1079 .probe = probe_spi_rdid,
1080 .probe_timing = TIMING_ZERO,
1081 .erase = spi_chip_erase_60_c7,
1082 .write = spi_chip_write_256,
1083 .read = spi_chip_read,
1084 },
1085
1086 {
1087 .vendor = "Eon",
1088 .name = "EN25F20",
1089 .bustype = CHIP_BUSTYPE_SPI,
1090 .manufacture_id = EON_ID_NOPREFIX,
1091 .model_id = EN_25F20,
1092 .total_size = 256,
1093 .page_size = 256,
1094 .tested = TEST_UNTESTED,
1095 .probe = probe_spi_rdid,
1096 .probe_timing = TIMING_ZERO,
1097 .erase = spi_chip_erase_60_c7,
1098 .write = spi_chip_write_256,
1099 .read = spi_chip_read,
1100 },
1101
1102 {
1103 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001104 .name = "EN25F40",
1105 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001106 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001107 .model_id = EN_25F40,
1108 .total_size = 512,
1109 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001110 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001111 .probe = probe_spi_rdid,
1112 .probe_timing = TIMING_ZERO,
1113 .erase = spi_chip_erase_60_c7,
1114 .write = spi_chip_write_256,
1115 .read = spi_chip_read,
1116 },
1117
1118 {
1119 .vendor = "Eon",
1120 .name = "EN25F80",
1121 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001122 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001123 .model_id = EN_25F80,
1124 .total_size = 1024,
1125 .page_size = 256,
1126 .tested = TEST_UNTESTED,
1127 .probe = probe_spi_rdid,
1128 .probe_timing = TIMING_ZERO,
1129 .erase = spi_chip_erase_60_c7,
1130 .write = spi_chip_write_256,
1131 .read = spi_chip_read,
1132 },
1133
1134 {
1135 .vendor = "Eon",
1136 .name = "EN25F16",
1137 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001138 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001139 .model_id = EN_25F16,
1140 .total_size = 2048,
1141 .page_size = 256,
1142 .tested = TEST_UNTESTED,
1143 .probe = probe_spi_rdid,
1144 .probe_timing = TIMING_ZERO,
1145 .erase = spi_chip_erase_60_c7,
1146 .write = spi_chip_write_256,
1147 .read = spi_chip_read,
1148 },
1149
1150 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001151 .vendor = "Eon",
1152 .name = "EN25F32",
1153 .bustype = CHIP_BUSTYPE_SPI,
1154 .manufacture_id = EON_ID_NOPREFIX,
1155 .model_id = EN_25F32,
1156 .total_size = 4096,
1157 .page_size = 256,
1158 .tested = TEST_UNTESTED,
1159 .probe = probe_spi_rdid,
1160 .probe_timing = TIMING_ZERO,
1161 .erase = spi_chip_erase_60_c7,
1162 .write = spi_chip_write_256,
1163 .read = spi_chip_read,
1164 },
1165
1166 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001167 .vendor = "EON",
1168 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001169 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001170 .manufacture_id = EON_ID,
1171 .model_id = EN_29F002B,
1172 .total_size = 256,
1173 .page_size = 256,
1174 .tested = TEST_UNTESTED,
1175 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001176 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001177 .erase = erase_chip_jedec,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001178 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001179 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001180 },
1181
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001182 {
1183 .vendor = "EON",
1184 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001185 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001186 .manufacture_id = EON_ID,
1187 .model_id = EN_29F002T,
1188 .total_size = 256,
1189 .page_size = 256,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001190 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001191 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001192 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001193 .erase = erase_chip_jedec,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001194 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001195 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001196 },
1197
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001198 {
1199 .vendor = "Fujitsu",
1200 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001201 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001202 .manufacture_id = FUJITSU_ID,
1203 .model_id = MBM29F004BC,
1204 .total_size = 512,
1205 .page_size = 64 * 1024,
1206 .tested = TEST_UNTESTED,
1207 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001208 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001209 .erase = NULL,
1210 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001211 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001212 },
1213
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001214 {
1215 .vendor = "Fujitsu",
1216 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001217 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001218 .manufacture_id = FUJITSU_ID,
1219 .model_id = MBM29F004TC,
1220 .total_size = 512,
1221 .page_size = 64 * 1024,
1222 .tested = TEST_UNTESTED,
1223 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001224 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001225 .erase = NULL,
1226 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001227 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001228 },
1229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001230 {
1231 .vendor = "Fujitsu",
1232 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001233 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001234 .manufacture_id = FUJITSU_ID,
1235 .model_id = MBM29F400BC,
1236 .total_size = 512,
1237 .page_size = 64 * 1024,
1238 .tested = TEST_UNTESTED,
1239 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001240 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001241 .erase = erase_m29f400bt,
1242 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001243 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001244 },
1245
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001246 {
1247 .vendor = "Fujitsu",
1248 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00001249 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001250 .manufacture_id = FUJITSU_ID,
1251 .model_id = MBM29F400TC,
1252 .total_size = 512,
1253 .page_size = 64 * 1024,
1254 .tested = TEST_UNTESTED,
1255 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001256 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001257 .erase = erase_m29f400bt,
1258 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001259 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001260 },
1261
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001262 {
1263 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001264 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001265 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001266 .manufacture_id = INTEL_ID,
1267 .model_id = P28F001BXB,
1268 .total_size = 128,
1269 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
1270 .tested = TEST_BAD_ERASE|TEST_BAD_WRITE,
1271 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001272 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001273 .erase = NULL,
1274 .write = NULL,
1275 .read = read_memmapped,
1276 },
1277
1278 {
1279 .vendor = "Intel",
1280 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001281 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001282 .manufacture_id = INTEL_ID,
1283 .model_id = P28F001BXT,
1284 .total_size = 128,
1285 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
1286 .tested = TEST_OK_PR|TEST_BAD_ERASE|TEST_BAD_WRITE,
1287 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001288 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Urja Rannikkoebd7b832009-05-29 12:55:31 +00001289 .erase = NULL,
1290 .write = NULL,
1291 .read = read_memmapped,
1292 },
1293
1294 {
1295 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001296 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001297 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001298 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001299 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001300 .total_size = 512,
1301 .page_size = 64 * 1024,
1302 .tested = TEST_OK_PREW,
1303 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001304 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001305 .erase = erase_82802ab,
1306 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001307 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001308 },
1309
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001310 {
1311 .vendor = "Intel",
1312 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001313 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001314 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001315 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001316 .total_size = 1024,
1317 .page_size = 64 * 1024,
1318 .tested = TEST_OK_PREW,
1319 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001320 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001321 .erase = erase_82802ab,
1322 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001323 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001324 },
1325
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001326 {
1327 .vendor = "Macronix",
1328 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001329 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001330 .manufacture_id = MX_ID,
1331 .model_id = MX_25L512,
1332 .total_size = 64,
1333 .page_size = 256,
1334 .tested = TEST_UNTESTED,
1335 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001336 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001337 .erase = NULL,
1338 .block_erasers =
1339 {
1340 {
1341 .eraseblocks = { {4 * 1024, 16} },
1342 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001343 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001344 .eraseblocks = { {64 * 1024, 1} },
1345 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001346 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001347 .eraseblocks = { {64 * 1024, 1} },
1348 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001349 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001350 .eraseblocks = { {64 * 1024, 1} },
1351 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001352 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001353 .eraseblocks = { {64 * 1024, 1} },
1354 .block_erase = spi_block_erase_c7,
1355 },
1356 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001357 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001358 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001359 },
1360
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001361 {
1362 .vendor = "Macronix",
1363 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001364 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001365 .manufacture_id = MX_ID,
1366 .model_id = MX_25L1005,
1367 .total_size = 128,
1368 .page_size = 256,
1369 .tested = TEST_UNTESTED,
1370 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001371 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001372 .erase = NULL,
1373 .block_erasers =
1374 {
1375 {
1376 .eraseblocks = { {4 * 1024, 32} },
1377 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001378 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001379 .eraseblocks = { {64 * 1024, 2} },
1380 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001381 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001382 .eraseblocks = { {128 * 1024, 1} },
1383 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001384 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00001385 .eraseblocks = { {128 * 1024, 1} },
1386 .block_erase = spi_block_erase_c7,
1387 },
1388 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001389 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001390 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001391 },
1392
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001393 {
1394 .vendor = "Macronix",
1395 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001396 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001397 .manufacture_id = MX_ID,
1398 .model_id = MX_25L2005,
1399 .total_size = 256,
1400 .page_size = 256,
1401 .tested = TEST_UNTESTED,
1402 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001403 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001404 .erase = NULL,
1405 .block_erasers =
1406 {
1407 {
1408 .eraseblocks = { {4 * 1024, 64} },
1409 .block_erase = spi_block_erase_20,
1410 }, {
1411 .eraseblocks = { {64 * 1024, 4} },
1412 .block_erase = spi_block_erase_52,
1413 }, {
1414 .eraseblocks = { {64 * 1024, 4} },
1415 .block_erase = spi_block_erase_d8,
1416 }, {
1417 .eraseblocks = { {256 * 1024, 1} },
1418 .block_erase = spi_block_erase_60,
1419 }, {
1420 .eraseblocks = { {256 * 1024, 1} },
1421 .block_erase = spi_block_erase_c7,
1422 },
1423 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001424 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001425 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001426 },
1427
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001428 {
1429 .vendor = "Macronix",
1430 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001431 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001432 .manufacture_id = MX_ID,
1433 .model_id = MX_25L4005,
1434 .total_size = 512,
1435 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001436 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001437 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001438 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001439 .erase = NULL,
1440 .block_erasers =
1441 {
1442 {
1443 .eraseblocks = { {4 * 1024, 128} },
1444 .block_erase = spi_block_erase_20,
1445 }, {
1446 .eraseblocks = { {64 * 1024, 8} },
1447 .block_erase = spi_block_erase_52,
1448 }, {
1449 .eraseblocks = { {64 * 1024, 8} },
1450 .block_erase = spi_block_erase_d8,
1451 }, {
1452 .eraseblocks = { {512 * 1024, 1} },
1453 .block_erase = spi_block_erase_60,
1454 }, {
1455 .eraseblocks = { {512 * 1024, 1} },
1456 .block_erase = spi_block_erase_c7,
1457 },
1458 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001459 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001460 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001461 },
1462
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001463 {
1464 .vendor = "Macronix",
1465 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001466 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001467 .manufacture_id = MX_ID,
1468 .model_id = MX_25L8005,
1469 .total_size = 1024,
1470 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001471 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001472 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001473 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001474 .erase = NULL,
1475 .block_erasers =
1476 {
1477 {
1478 .eraseblocks = { {4 * 1024, 256} },
1479 .block_erase = spi_block_erase_20,
1480 }, {
1481 .eraseblocks = { {64 * 1024, 16} },
1482 .block_erase = spi_block_erase_52,
1483 }, {
1484 .eraseblocks = { {64 * 1024, 16} },
1485 .block_erase = spi_block_erase_d8,
1486 }, {
1487 .eraseblocks = { {1024 * 1024, 1} },
1488 .block_erase = spi_block_erase_60,
1489 }, {
1490 .eraseblocks = { {1024 * 1024, 1} },
1491 .block_erase = spi_block_erase_c7,
1492 },
1493 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001494 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001495 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001496 },
1497
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001498 {
1499 .vendor = "Macronix",
1500 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001501 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001502 .manufacture_id = MX_ID,
1503 .model_id = MX_25L1605,
1504 .total_size = 2048,
1505 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001506 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001507 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001508 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00001509 .erase = NULL,
1510 .block_erasers =
1511 {
1512 {
1513 .eraseblocks = { {4 * 1024, 512} },
1514 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
1515 }, {
1516 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
1517 .block_erase = spi_block_erase_52,
1518 }, {
1519 .eraseblocks = { {64 * 1024, 32} },
1520 .block_erase = spi_block_erase_d8,
1521 }, {
1522 .eraseblocks = { {2 * 1024 * 1024, 1} },
1523 .block_erase = spi_block_erase_60,
1524 }, {
1525 .eraseblocks = { {2 * 1024 * 1024, 1} },
1526 .block_erase = spi_block_erase_c7,
1527 },
1528 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001529 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001530 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001531 },
1532
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001533 {
1534 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00001535 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001536 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00001537 .manufacture_id = MX_ID,
1538 .model_id = MX_25L1635D,
1539 .total_size = 2048,
1540 .page_size = 256,
1541 .tested = TEST_UNTESTED,
1542 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001543 .probe_timing = TIMING_ZERO,
Stephan Guillouxe39631c2009-04-19 23:24:26 +00001544 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001545 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00001546 .read = spi_chip_read,
1547 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00001548
Stephan Guillouxf5c70902009-04-19 23:04:00 +00001549 {
1550 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001551 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001552 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001553 .manufacture_id = MX_ID,
1554 .model_id = MX_25L3205,
1555 .total_size = 4096,
1556 .page_size = 256,
1557 .tested = TEST_OK_PREW,
1558 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001559 .probe_timing = TIMING_ZERO,
Stephan Guillouxfd315502009-04-20 22:54:13 +00001560 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001561 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001562 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001563 },
1564
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001565 {
1566 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00001567 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001568 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00001569 .manufacture_id = MX_ID,
1570 .model_id = MX_25L3235D,
1571 .total_size = 4096,
1572 .page_size = 256,
1573 .tested = TEST_UNTESTED,
1574 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001575 .probe_timing = TIMING_ZERO,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00001576 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001577 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00001578 .read = spi_chip_read,
1579 },
1580
1581 {
1582 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001583 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001584 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001585 .manufacture_id = MX_ID,
1586 .model_id = MX_25L6405,
1587 .total_size = 8192,
1588 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00001589 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001590 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001591 .probe_timing = TIMING_ZERO,
Stephan Guillouxfd315502009-04-20 22:54:13 +00001592 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001593 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001594 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001595 },
1596
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001597 {
1598 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00001599 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001600 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00001601 .manufacture_id = MX_ID,
1602 .model_id = MX_25L12805,
1603 .total_size = 16384,
1604 .page_size = 256,
1605 .tested = TEST_UNTESTED,
1606 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001607 .probe_timing = TIMING_ZERO,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00001608 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001609 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00001610 .read = spi_chip_read,
1611 },
1612
1613 {
1614 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00001615 .name = "MX29F001B",
1616 .bustype = CHIP_BUSTYPE_PARALLEL,
1617 .manufacture_id = MX_ID,
1618 .model_id = MX_29F001B,
1619 .total_size = 128,
1620 .page_size = 32 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001621 .tested = TEST_OK_PRE,
Mark Panajotovic502a9132009-08-24 01:42:24 +00001622 .probe = probe_29f002,
1623 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
1624 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001625 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00001626 .read = read_memmapped,
1627 },
1628
1629 {
1630 .vendor = "Macronix",
1631 .name = "MX29F001T",
1632 .bustype = CHIP_BUSTYPE_PARALLEL,
1633 .manufacture_id = MX_ID,
1634 .model_id = MX_29F001T,
1635 .total_size = 128,
1636 .page_size = 32 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001637 .tested = TEST_OK_PRE,
Mark Panajotovic502a9132009-08-24 01:42:24 +00001638 .probe = probe_29f002,
1639 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
1640 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001641 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00001642 .read = read_memmapped,
1643 },
1644
1645 {
1646 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001647 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001648 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001649 .manufacture_id = MX_ID,
1650 .model_id = MX_29F002B,
1651 .total_size = 256,
1652 .page_size = 64 * 1024,
1653 .tested = TEST_UNTESTED,
1654 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001655 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001656 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001657 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001658 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001659 },
1660
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001661 {
1662 .vendor = "Macronix",
1663 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001664 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001665 .manufacture_id = MX_ID,
1666 .model_id = MX_29F002T,
1667 .total_size = 256,
1668 .page_size = 64 * 1024,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001669 .tested = TEST_OK_PRE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001670 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001671 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001672 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001673 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001674 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001675 },
1676
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001677 {
1678 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00001679 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00001680 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001681 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00001682 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001683 .total_size = 512,
1684 .page_size = 64 * 1024,
1685 .tested = TEST_OK_PR,
1686 .probe = probe_29f002,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001687 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001688 .erase = erase_29f002,
Michael Karcher1c296ca2009-11-27 17:49:42 +00001689 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001690 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00001691 },
1692
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001693 {
1694 .vendor = "Numonyx",
1695 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001696 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001697 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001698 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001699 .total_size = 128,
1700 .page_size = 256,
1701 .tested = TEST_UNTESTED,
1702 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001703 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001704 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001705 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001706 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001707 },
1708
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001709 {
1710 .vendor = "Numonyx",
1711 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001712 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001713 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001714 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001715 .total_size = 256,
1716 .page_size = 256,
1717 .tested = TEST_UNTESTED,
1718 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001719 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001720 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001721 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001722 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001723 },
1724
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001725 {
1726 .vendor = "Numonyx",
1727 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001728 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001729 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001730 .model_id = ST_M25PE40,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001731 .total_size = 256,
1732 .page_size = 256,
1733 .tested = TEST_UNTESTED,
1734 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001735 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001736 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001737 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001738 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001739 },
1740
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001741 {
1742 .vendor = "Numonyx",
1743 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001744 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001745 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001746 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001747 .total_size = 1024,
1748 .page_size = 256,
1749 .tested = TEST_OK_PREW,
1750 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001751 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001752 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001753 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001754 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001755 },
1756
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001757 {
1758 .vendor = "Numonyx",
1759 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001760 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001761 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00001762 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001763 .total_size = 2048,
1764 .page_size = 256,
1765 .tested = TEST_UNTESTED,
1766 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001767 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001768 .erase = spi_chip_erase_d8,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001769 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001770 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001771 },
1772
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001773 {
1774 .vendor = "PMC",
1775 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001776 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001777 .manufacture_id = PMC_ID,
1778 .model_id = PMC_25LV010,
1779 .total_size = 128,
1780 .page_size = 256,
1781 .tested = TEST_UNTESTED,
1782 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001783 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001784 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001785 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001786 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001787 },
1788
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001789 {
1790 .vendor = "PMC",
1791 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001792 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001793 .manufacture_id = PMC_ID,
1794 .model_id = PMC_25LV016B,
1795 .total_size = 2048,
1796 .page_size = 256,
1797 .tested = TEST_UNTESTED,
1798 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001799 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001800 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001801 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001802 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001803 },
1804
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001805 {
1806 .vendor = "PMC",
1807 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001808 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001809 .manufacture_id = PMC_ID,
1810 .model_id = PMC_25LV020,
1811 .total_size = 256,
1812 .page_size = 256,
1813 .tested = TEST_UNTESTED,
1814 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001815 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001816 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001817 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001818 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001819 },
1820
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001821 {
1822 .vendor = "PMC",
1823 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001824 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001825 .manufacture_id = PMC_ID,
1826 .model_id = PMC_25LV040,
1827 .total_size = 512,
1828 .page_size = 256,
1829 .tested = TEST_UNTESTED,
1830 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001831 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001832 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001833 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001834 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001835 },
1836
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001837 {
1838 .vendor = "PMC",
1839 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001840 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001841 .manufacture_id = PMC_ID,
1842 .model_id = PMC_25LV080B,
1843 .total_size = 1024,
1844 .page_size = 256,
1845 .tested = TEST_UNTESTED,
1846 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001847 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001848 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001849 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001850 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001851 },
1852
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001853 {
1854 .vendor = "PMC",
1855 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001856 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001857 .manufacture_id = PMC_ID,
1858 .model_id = PMC_25LV512,
1859 .total_size = 64,
1860 .page_size = 256,
1861 .tested = TEST_UNTESTED,
1862 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001863 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001864 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001865 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001866 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001867 },
1868
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001869 {
1870 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00001871 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00001872 .bustype = CHIP_BUSTYPE_PARALLEL,
1873 .manufacture_id = PMC_ID_NOPREFIX,
1874 .model_id = PMC_29F002T,
1875 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00001876 .page_size = 8 * 1024,
1877 .tested = TEST_OK_PRW,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00001878 .probe = probe_29f040b,
1879 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00001880 .erase = NULL,
1881 .block_erasers =
1882 {
1883 {
1884 .eraseblocks = {
1885 {128 * 1024, 1},
1886 {96 * 1024, 1},
1887 {8 * 1024, 2},
1888 {16 * 1024, 1},
1889 },
1890 .block_erase = erase_sector_29f040b,
1891 }, {
1892 .eraseblocks = { {256 * 1024, 1} },
1893 .block_erase = erase_chip_29f040b,
1894 },
1895 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00001896 .write = write_pm29f002,
1897 .read = read_memmapped,
1898 },
1899
1900 {
1901 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00001902 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00001903 .bustype = CHIP_BUSTYPE_PARALLEL,
1904 .manufacture_id = PMC_ID_NOPREFIX,
1905 .model_id = PMC_29F002B,
1906 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00001907 .page_size = 8 * 1024,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00001908 .tested = TEST_UNTESTED,
1909 .probe = probe_29f040b,
1910 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00001911 .erase = NULL,
1912 .block_erasers =
1913 {
1914 {
1915 .eraseblocks = {
1916 {16 * 1024, 1},
1917 {8 * 1024, 2},
1918 {96 * 1024, 1},
1919 {128 * 1024, 1},
1920 },
1921 .block_erase = erase_sector_29f040b,
1922 }, {
1923 .eraseblocks = { {256 * 1024, 1} },
1924 .block_erase = erase_chip_29f040b,
1925 },
1926 },
Uwe Hermannf983d9f2009-06-14 21:53:26 +00001927 .write = write_pm29f002,
1928 .read = read_memmapped,
1929 },
1930
1931 {
1932 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00001933 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00001934 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00001935 .manufacture_id = PMC_ID_NOPREFIX,
1936 .model_id = PMC_39F010,
1937 .total_size = 128,
1938 .page_size = 4096,
1939 .tested = TEST_OK_PREW,
1940 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001941 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00001942 .erase = erase_chip_jedec,
1943 .write = write_49f002,
1944 .read = read_memmapped,
1945 },
1946
1947 {
1948 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001949 .name = "Pm49FL002",
Urja Rannikko038a3122009-06-28 19:19:25 +00001950 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001951 .manufacture_id = PMC_ID_NOPREFIX,
1952 .model_id = PMC_49FL002,
1953 .total_size = 256,
1954 .page_size = 16 * 1024,
1955 .tested = TEST_OK_PREW,
1956 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +00001957 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001958 .erase = erase_49fl00x,
1959 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001960 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001961 },
1962
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001963 {
1964 .vendor = "PMC",
1965 .name = "Pm49FL004",
Urja Rannikko038a3122009-06-28 19:19:25 +00001966 .bustype = CHIP_BUSTYPE_LPC|CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001967 .manufacture_id = PMC_ID_NOPREFIX,
1968 .model_id = PMC_49FL004,
1969 .total_size = 512,
1970 .page_size = 64 * 1024,
1971 .tested = TEST_OK_PREW,
1972 .probe = probe_49fl00x,
Udu Ogahc04ee222009-09-05 01:31:32 +00001973 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001974 .erase = erase_49fl00x,
1975 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001976 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001977 },
1978
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001979 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00001980 .vendor = "Sanyo",
1981 .name = "LF25FW203A",
1982 .bustype = CHIP_BUSTYPE_SPI,
1983 .manufacture_id = SANYO_ID,
1984 .model_id = SANYO_LE25FW203A,
1985 .total_size = 2048,
1986 .page_size = 256,
1987 .tested = TEST_UNTESTED,
1988 .probe = probe_spi_rdid,
1989 .probe_timing = TIMING_ZERO,
1990 .erase = spi_chip_erase_c7,
1991 .write = spi_chip_write_256,
1992 .read = spi_chip_read,
1993 },
1994
1995 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001996 .vendor = "Sharp",
1997 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00001998 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001999 .manufacture_id = SHARP_ID,
2000 .model_id = SHARP_LHF00L04,
2001 .total_size = 1024,
2002 .page_size = 64 * 1024,
2003 .tested = TEST_UNTESTED,
2004 .probe = probe_lhf00l04,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002005 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sharplhf00l04.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002006 .erase = erase_lhf00l04,
2007 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002008 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002009 },
2010
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002011 {
2012 .vendor = "Spansion",
2013 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002014 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002015 .manufacture_id = SPANSION_ID,
2016 .model_id = SPANSION_S25FL016A,
2017 .total_size = 2048,
2018 .page_size = 256,
2019 .tested = TEST_OK_PREW,
2020 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002021 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002022 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002023 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002024 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002025 },
2026
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002027 {
2028 .vendor = "SST",
2029 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002030 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002031 .manufacture_id = SST_ID,
2032 .model_id = SST_25VF016B,
2033 .total_size = 2048,
2034 .page_size = 256,
2035 .tested = TEST_OK_PREW,
2036 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002037 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002038 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002039 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002040 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002041 },
2042
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002043 {
2044 .vendor = "SST",
2045 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002046 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002047 .manufacture_id = SST_ID,
2048 .model_id = SST_25VF032B,
2049 .total_size = 4096,
2050 .page_size = 256,
2051 .tested = TEST_OK_PREW,
2052 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002053 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002054 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002055 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002056 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002057 },
2058
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002059 {
2060 .vendor = "SST",
2061 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002062 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002063 .manufacture_id = SST_ID,
2064 .model_id = SST_25VF040B,
2065 .total_size = 512,
2066 .page_size = 256,
2067 .tested = TEST_UNTESTED,
2068 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002069 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002070 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002071 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002072 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002073 },
2074
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002075 {
2076 .vendor = "SST",
Zheng Bao0677dff2009-02-25 08:07:33 +00002077 .name = "SST25VF040.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002078 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002079 .manufacture_id = SST_ID,
2080 .model_id = SST_25VF040_REMS,
Zheng Bao0677dff2009-02-25 08:07:33 +00002081 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00002082 .page_size = 64 * 1024,
Zheng Bao0677dff2009-02-25 08:07:33 +00002083 .tested = TEST_OK_PR,
2084 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002085 .probe_timing = TIMING_ZERO,
Zheng Bao0677dff2009-02-25 08:07:33 +00002086 .erase = spi_chip_erase_60,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002087 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00002088 .read = spi_chip_read,
2089 },
2090
2091 {
2092 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00002093 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002094 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002095 .manufacture_id = SST_ID,
2096 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00002097 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00002098 .page_size = 64 * 1024,
Peter Stugefd9217d2009-01-26 03:37:40 +00002099 .tested = TEST_OK_PR,
2100 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002101 .probe_timing = TIMING_ZERO,
Peter Stugefd9217d2009-01-26 03:37:40 +00002102 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00002103 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00002104 .read = spi_chip_read,
2105 },
2106
2107 {
2108 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002109 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002110 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002111 .manufacture_id = SST_ID,
2112 .model_id = SST_25VF080B,
2113 .total_size = 1024,
2114 .page_size = 256,
Peter Stugee612a112009-05-05 16:34:53 +00002115 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002116 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002117 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002118 .erase = spi_chip_erase_60_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002119 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002120 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002121 },
2122
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002123 {
2124 .vendor = "SST",
2125 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002126 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002127 .manufacture_id = SST_ID,
2128 .model_id = SST_28SF040,
2129 .total_size = 512,
2130 .page_size = 256,
2131 .tested = TEST_UNTESTED,
2132 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002133 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002134 .erase = erase_28sf040,
2135 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002136 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002137 },
2138
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002139 {
2140 .vendor = "SST",
2141 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002142 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002143 .manufacture_id = SST_ID,
2144 .model_id = SST_29EE010,
2145 .total_size = 128,
2146 .page_size = 128,
2147 .tested = TEST_OK_PREW,
2148 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002149 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002150 .erase = erase_chip_jedec,
2151 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002152 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002153 },
2154
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002155 {
2156 .vendor = "SST",
2157 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002158 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002159 .manufacture_id = SST_ID,
2160 .model_id = SST_29LE010,
2161 .total_size = 128,
2162 .page_size = 128,
2163 .tested = TEST_UNTESTED,
2164 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002165 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002166 .erase = erase_chip_jedec,
2167 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002168 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002169 },
2170
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002171 {
2172 .vendor = "SST",
2173 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002174 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002175 .manufacture_id = SST_ID,
2176 .model_id = SST_29EE020A,
2177 .total_size = 256,
2178 .page_size = 128,
Peter Stugeb27d0a22009-02-22 21:07:28 +00002179 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002180 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002181 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002182 .erase = erase_chip_jedec,
2183 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002184 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002185 },
2186
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002187 {
2188 .vendor = "SST",
2189 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00002190 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002191 .manufacture_id = SST_ID,
2192 .model_id = SST_29LE020,
2193 .total_size = 256,
2194 .page_size = 128,
2195 .tested = TEST_UNTESTED,
2196 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002197 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002198 .erase = erase_chip_jedec,
2199 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002200 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002201 },
2202
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002203 {
2204 .vendor = "SST",
2205 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002206 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002207 .manufacture_id = SST_ID,
2208 .model_id = SST_39SF010,
2209 .total_size = 128,
2210 .page_size = 4096,
2211 .tested = TEST_OK_PREW,
2212 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002213 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002214 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002215 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002216 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002217 },
2218
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002219 {
2220 .vendor = "SST",
2221 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002222 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002223 .manufacture_id = SST_ID,
2224 .model_id = SST_39SF020,
2225 .total_size = 256,
2226 .page_size = 4096,
2227 .tested = TEST_OK_PREW,
2228 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002229 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002230 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002231 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002232 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002233 },
2234
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002235 {
2236 .vendor = "SST",
2237 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002238 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002239 .manufacture_id = SST_ID,
2240 .model_id = SST_39SF040,
2241 .total_size = 512,
2242 .page_size = 4096,
2243 .tested = TEST_OK_PREW,
2244 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002245 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002246 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002247 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002248 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002249 },
2250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002251 {
2252 .vendor = "SST",
2253 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00002254 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002255 .manufacture_id = SST_ID,
2256 .model_id = SST_39VF512,
2257 .total_size = 64,
2258 .page_size = 4096,
Rudolf Mareke186da62009-05-17 18:24:24 +00002259 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002260 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002261 .probe_timing = 1, /* 150 ns*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002262 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002263 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002264 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002265 },
2266
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002267 {
2268 .vendor = "SST",
2269 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00002270 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002271 .manufacture_id = SST_ID,
2272 .model_id = SST_39VF010,
2273 .total_size = 128,
2274 .page_size = 4096,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00002275 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002276 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002277 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002278 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002279 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002280 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002281 },
2282
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002283 {
2284 .vendor = "SST",
2285 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00002286 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002287 .manufacture_id = SST_ID,
2288 .model_id = SST_39VF020,
2289 .total_size = 256,
2290 .page_size = 4096,
2291 .tested = TEST_OK_PREW,
2292 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002293 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002294 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002295 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002296 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002297 },
2298
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002299 {
2300 .vendor = "SST",
2301 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002302 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002303 .manufacture_id = SST_ID,
2304 .model_id = SST_39VF040,
2305 .total_size = 512,
2306 .page_size = 4096,
2307 .tested = TEST_OK_PROBE,
2308 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002309 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002310 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002311 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002312 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00002313 },
FENG yu ningff692fb2008-12-08 18:15:10 +00002314
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002315 {
2316 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00002317 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00002318 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002319 .manufacture_id = SST_ID,
2320 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00002321 .total_size = 1024,
2322 .page_size = 4096,
2323 .tested = TEST_UNTESTED,
2324 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002325 .probe_timing = 1, /* 150 ns */
Peter Stuge8440cc02009-01-25 23:55:12 +00002326 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00002327 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002328 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00002329 },
2330
2331 {
2332 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002333 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002334 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002335 .manufacture_id = SST_ID,
2336 .model_id = SST_49LF002A,
2337 .total_size = 256,
2338 .page_size = 16 * 1024,
2339 .tested = TEST_OK_PREW,
2340 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002341 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002342 .erase = erase_sst_fwhub,
2343 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002344 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002345 },
2346
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002347 {
2348 .vendor = "SST",
2349 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002350 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002351 .manufacture_id = SST_ID,
2352 .model_id = SST_49LF003A,
2353 .total_size = 384,
2354 .page_size = 64 * 1024,
Peter Lemenkov45835c42009-09-25 01:09:18 +00002355 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002356 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002357 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002358 .erase = erase_sst_fwhub,
2359 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002360 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002361 },
2362
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002363 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00002364 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
2365 * and is only honored for 64k block erase, but not 4k sector erase.
2366 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002367 .vendor = "SST",
2368 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002369 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002370 .manufacture_id = SST_ID,
2371 .model_id = SST_49LF004A,
2372 .total_size = 512,
2373 .page_size = 64 * 1024,
2374 .tested = TEST_OK_PREW,
2375 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002376 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00002377 .erase = NULL,
2378 .block_erasers =
2379 {
2380 {
2381 .eraseblocks = { {4 * 1024, 128} },
2382 .block_erase = erase_sector_jedec, /* missing unlock */
2383 }, {
2384 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00002385 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00002386 }, {
2387 .eraseblocks = { {512 * 1024, 1} },
2388 .block_erase = NULL, /* AA 55 80 AA 55 10, only in PP mode */
2389 },
2390 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002391 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002392 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002393 },
2394
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002395 {
2396 .vendor = "SST",
2397 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00002398 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002399 .manufacture_id = SST_ID,
2400 .model_id = SST_49LF004C,
2401 .total_size = 512,
2402 .page_size = 4 * 1024,
2403 .tested = TEST_UNTESTED,
2404 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002405 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002406 .erase = erase_49lfxxxc,
2407 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002408 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002409 },
2410
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002411 {
2412 .vendor = "SST",
2413 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002414 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002415 .manufacture_id = SST_ID,
2416 .model_id = SST_49LF008A,
2417 .total_size = 1024,
2418 .page_size = 64 * 1024,
2419 .tested = TEST_OK_PREW,
2420 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002421 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002422 .erase = erase_sst_fwhub,
2423 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002424 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002425 },
2426
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002427 {
2428 .vendor = "SST",
2429 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00002430 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002431 .manufacture_id = SST_ID,
2432 .model_id = SST_49LF008C,
2433 .total_size = 1024,
2434 .page_size = 4 * 1024,
2435 .tested = TEST_UNTESTED,
2436 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002437 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002438 .erase = erase_49lfxxxc,
2439 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002440 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002441 },
2442
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002443 {
2444 .vendor = "SST",
2445 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00002446 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002447 .manufacture_id = SST_ID,
2448 .model_id = SST_49LF016C,
2449 .total_size = 2048,
2450 .page_size = 4 * 1024,
2451 .tested = TEST_OK_PREW,
2452 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002453 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002454 .erase = erase_49lfxxxc,
2455 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002456 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002457 },
2458
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002459 {
2460 .vendor = "SST",
2461 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002462 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002463 .manufacture_id = SST_ID,
2464 .model_id = SST_49LF020,
2465 .total_size = 256,
2466 .page_size = 16 * 1024,
2467 .tested = TEST_OK_PR,
2468 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002469 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002470 .erase = erase_49lf040,
2471 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002472 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00002473 },
2474
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002475 {
2476 .vendor = "SST",
2477 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002478 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002479 .manufacture_id = SST_ID,
2480 .model_id = SST_49LF020A,
2481 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00002482 .page_size = 4 * 1024,
Nils Jacobsc0252682009-09-23 21:58:34 +00002483 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002484 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002485 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002486 .erase = erase_49lf040,
2487 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002488 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002489 },
2490
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002491 {
2492 .vendor = "SST",
2493 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002494 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002495 .manufacture_id = SST_ID,
2496 .model_id = SST_49LF040,
2497 .total_size = 512,
2498 .page_size = 4096,
2499 .tested = TEST_OK_PREW,
2500 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002501 .probe_timing = 1, /* 150 ns */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002502 .erase = erase_49lf040,
2503 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002504 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002505 },
2506
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002507 {
2508 .vendor = "SST",
2509 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002510 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002511 .manufacture_id = SST_ID,
2512 .model_id = SST_49LF040B,
2513 .total_size = 512,
2514 .page_size = 64 * 1024,
2515 .tested = TEST_OK_PREW,
2516 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00002517 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002518 .erase = erase_sst_fwhub,
2519 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002520 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002521 },
2522
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002523 {
2524 .vendor = "SST",
2525 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002526 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002527 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00002528 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002529 .total_size = 1024,
2530 .page_size = 4096,
2531 .tested = TEST_OK_PREW,
2532 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002533 .probe_timing = TIMING_FIXME,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002534 .erase = erase_49lf040,
2535 .write = write_49lf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002536 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002537 },
2538
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002539 {
2540 .vendor = "SST",
2541 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00002542 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002543 .manufacture_id = SST_ID,
2544 .model_id = SST_49LF160C,
2545 .total_size = 2048,
2546 .page_size = 4 * 1024,
2547 .tested = TEST_OK_PREW,
2548 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002549 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002550 .erase = erase_49lfxxxc,
2551 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002552 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002553 },
2554
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002555 {
2556 .vendor = "ST",
2557 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002558 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002559 .manufacture_id = ST_ID,
2560 .model_id = ST_M25P05A,
2561 .total_size = 64,
2562 .page_size = 256,
2563 .tested = TEST_UNTESTED,
2564 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002565 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002566 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002567 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002568 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002569 },
2570
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00002571 /* The ST M25P05 is a bit of a problem. It has the same ID as the
2572 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
2573 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
2574 * only is successful if RDID does not work.
2575 */
2576 {
2577 .vendor = "ST",
2578 .name = "M25P05.RES",
2579 .bustype = CHIP_BUSTYPE_SPI,
2580 .manufacture_id = ST_ID,
2581 .model_id = ST_M25P05_RES,
2582 .total_size = 64,
2583 .page_size = 256,
2584 .tested = TEST_UNTESTED,
2585 .probe = probe_spi_res,
2586 .probe_timing = TIMING_ZERO,
2587 .erase = spi_chip_erase_c7,
2588 .write = spi_chip_write_1, /* 128 */
2589 .read = spi_chip_read,
2590 },
2591
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002592 {
2593 .vendor = "ST",
2594 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002595 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002596 .manufacture_id = ST_ID,
2597 .model_id = ST_M25P10A,
2598 .total_size = 128,
2599 .page_size = 256,
2600 .tested = TEST_UNTESTED,
2601 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002602 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002603 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002604 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002605 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002606 },
2607
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00002608 /* The ST M25P10 has the same problem as the M25P05. */
2609 {
2610 .vendor = "ST",
2611 .name = "M25P10.RES",
2612 .bustype = CHIP_BUSTYPE_SPI,
2613 .manufacture_id = ST_ID,
2614 .model_id = ST_M25P10_RES,
2615 .total_size = 128,
2616 .page_size = 256,
2617 .tested = TEST_UNTESTED,
2618 .probe = probe_spi_res,
2619 .probe_timing = TIMING_ZERO,
2620 .erase = spi_chip_erase_c7,
2621 .write = spi_chip_write_1, /* 128 */
2622 .read = spi_chip_read,
2623 },
2624
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002625 {
2626 .vendor = "ST",
2627 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002628 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002629 .manufacture_id = ST_ID,
2630 .model_id = ST_M25P20,
2631 .total_size = 256,
2632 .page_size = 256,
2633 .tested = TEST_UNTESTED,
2634 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002635 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002636 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002637 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002638 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002639 },
2640
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002641 {
2642 .vendor = "ST",
2643 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002644 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002645 .manufacture_id = ST_ID,
2646 .model_id = ST_M25P40,
2647 .total_size = 512,
2648 .page_size = 256,
Uwe Hermann04d5dc42009-07-03 17:12:05 +00002649 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002650 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002651 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002652 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002653 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002654 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002655 },
2656
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002657 {
2658 .vendor = "ST",
2659 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002660 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002661 .manufacture_id = ST_ID,
2662 .model_id = ST_M25P40_RES,
2663 .total_size = 512,
2664 .page_size = 256,
2665 .tested = TEST_UNTESTED,
2666 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002667 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002668 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002669 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002670 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002671 },
2672
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002673 {
2674 .vendor = "ST",
2675 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002676 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002677 .manufacture_id = ST_ID,
2678 .model_id = ST_M25P80,
2679 .total_size = 1024,
2680 .page_size = 256,
Carl-Daniel Hailfinger5190ec12009-06-22 10:09:07 +00002681 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002682 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002683 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002684 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002685 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002686 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002687 },
2688
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002689 {
2690 .vendor = "ST",
2691 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002692 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002693 .manufacture_id = ST_ID,
2694 .model_id = ST_M25P16,
2695 .total_size = 2048,
2696 .page_size = 256,
2697 .tested = TEST_OK_PREW,
2698 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002699 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002700 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002701 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002702 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002703 },
2704
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002705 {
2706 .vendor = "ST",
2707 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002708 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002709 .manufacture_id = ST_ID,
2710 .model_id = ST_M25P32,
2711 .total_size = 4096,
2712 .page_size = 256,
2713 .tested = TEST_OK_PREW,
2714 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002715 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002716 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002717 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002718 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002719 },
2720
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002721 {
2722 .vendor = "ST",
2723 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002724 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002725 .manufacture_id = ST_ID,
2726 .model_id = ST_M25P64,
2727 .total_size = 8192,
2728 .page_size = 256,
2729 .tested = TEST_UNTESTED,
2730 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002731 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002732 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002733 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002734 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002735 },
2736
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002737 {
2738 .vendor = "ST",
2739 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002740 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002741 .manufacture_id = ST_ID,
2742 .model_id = ST_M25P128,
2743 .total_size = 16384,
2744 .page_size = 256,
2745 .tested = TEST_UNTESTED,
2746 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002747 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002748 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002749 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002750 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002751 },
2752
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002753 {
2754 .vendor = "ST",
2755 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002756 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002757 .manufacture_id = ST_ID,
2758 .model_id = ST_M29F002B,
2759 .total_size = 256,
2760 .page_size = 64 * 1024,
2761 .tested = TEST_UNTESTED,
2762 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002763 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Peter Stugeaf8ffac2009-01-26 06:42:02 +00002764 .erase = erase_m29f002,
2765 .write = write_m29f002b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002766 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002767 },
2768
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002769 {
2770 .vendor = "ST",
2771 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00002772 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002773 .manufacture_id = ST_ID,
2774 .model_id = ST_M29F002T,
2775 .total_size = 256,
2776 .page_size = 64 * 1024,
Peter Stugeaf8ffac2009-01-26 06:42:02 +00002777 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002778 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002779 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Peter Stugeaf8ffac2009-01-26 06:42:02 +00002780 .erase = erase_m29f002,
2781 .write = write_m29f002t,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002782 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002783 },
2784
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002785 {
2786 .vendor = "ST",
2787 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002788 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002789 .manufacture_id = ST_ID,
2790 .model_id = ST_M29F040B,
2791 .total_size = 512,
2792 .page_size = 64 * 1024,
2793 .tested = TEST_OK_PREW,
2794 .probe = probe_29f040b,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002795 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002796 .erase = erase_29f040b,
2797 .write = write_29f040b,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002798 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002799 },
2800
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002801 {
2802 .vendor = "ST",
2803 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00002804 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002805 .manufacture_id = ST_ID,
2806 .model_id = ST_M29F400BT,
2807 .total_size = 512,
2808 .page_size = 64 * 1024,
2809 .tested = TEST_UNTESTED,
2810 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002811 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002812 .erase = erase_m29f400bt,
2813 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002814 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002815 },
2816
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002817 {
2818 .vendor = "ST",
2819 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002820 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002821 .manufacture_id = ST_ID,
2822 .model_id = ST_M29W010B,
2823 .total_size = 128,
2824 .page_size = 16 * 1024,
2825 .tested = TEST_UNTESTED,
2826 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002827 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002828 .erase = erase_chip_jedec,
2829 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002830 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002831 },
2832
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002833 {
2834 .vendor = "ST",
2835 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002836 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002837 .manufacture_id = ST_ID,
2838 .model_id = ST_M29W040B,
2839 .total_size = 512,
2840 .page_size = 64 * 1024,
2841 .tested = TEST_UNTESTED,
2842 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002843 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002844 .erase = erase_chip_jedec,
2845 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002846 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002847 },
2848
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002849 {
2850 .vendor = "ST",
2851 .name = "M50FLW040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002852 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002853 .manufacture_id = ST_ID,
2854 .model_id = ST_M50FLW040A,
2855 .total_size = 512,
2856 .page_size = 64 * 1024,
2857 .tested = TEST_UNTESTED,
2858 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002859 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002860 .erase = erase_stm50flw0x0x,
2861 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002862 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002863 },
2864
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002865 {
2866 .vendor = "ST",
2867 .name = "M50FLW040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002868 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002869 .manufacture_id = ST_ID,
2870 .model_id = ST_M50FLW040B,
2871 .total_size = 512,
2872 .page_size = 64 * 1024,
2873 .tested = TEST_UNTESTED,
2874 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002875 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002876 .erase = erase_stm50flw0x0x,
2877 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002878 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002879 },
2880
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002881 {
2882 .vendor = "ST",
2883 .name = "M50FLW080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00002884 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002885 .manufacture_id = ST_ID,
2886 .model_id = ST_M50FLW080A,
2887 .total_size = 1024,
2888 .page_size = 64 * 1024,
2889 .tested = TEST_OK_PREW,
2890 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002891 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002892 .erase = erase_stm50flw0x0x,
2893 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002894 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002895 },
2896
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002897 {
2898 .vendor = "ST",
2899 .name = "M50FLW080B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002900 .bustype = CHIP_BUSTYPE_FWH|CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002901 .manufacture_id = ST_ID,
2902 .model_id = ST_M50FLW080B,
2903 .total_size = 1024,
2904 .page_size = 64 * 1024,
2905 .tested = TEST_UNTESTED,
2906 .probe = probe_stm50flw0x0x,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002907 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (stm50flw0x0x.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002908 .erase = erase_stm50flw0x0x,
2909 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002910 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002911 },
2912
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002913 {
2914 .vendor = "ST",
2915 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00002916 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002917 .manufacture_id = ST_ID,
2918 .model_id = ST_M50FW002,
2919 .total_size = 256,
2920 .page_size = 64 * 1024,
2921 .tested = TEST_UNTESTED,
2922 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002923 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002924 .erase = NULL,
2925 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002926 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002927 },
2928
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002929 {
2930 .vendor = "ST",
2931 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00002932 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002933 .manufacture_id = ST_ID,
2934 .model_id = ST_M50FW016,
2935 .total_size = 2048,
2936 .page_size = 64 * 1024,
2937 .tested = TEST_UNTESTED,
2938 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002939 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002940 .erase = erase_82802ab,
2941 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002942 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002943 },
2944
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002945 {
2946 .vendor = "ST",
2947 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002948 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002949 .manufacture_id = ST_ID,
2950 .model_id = ST_M50FW040,
2951 .total_size = 512,
2952 .page_size = 64 * 1024,
2953 .tested = TEST_OK_PREW,
2954 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002955 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002956 .erase = erase_82802ab,
2957 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002958 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002959 },
2960
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002961 {
2962 .vendor = "ST",
2963 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00002964 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002965 .manufacture_id = ST_ID,
2966 .model_id = ST_M50FW080,
2967 .total_size = 1024,
2968 .page_size = 64 * 1024,
Peter Stugea657e942009-01-24 23:01:08 +00002969 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002970 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002971 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002972 .erase = erase_82802ab,
2973 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002974 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002975 },
2976
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002977 {
2978 .vendor = "ST",
2979 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00002980 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002981 .manufacture_id = ST_ID,
2982 .model_id = ST_M50LPW116,
2983 .total_size = 2048,
2984 .page_size = 64 * 1024,
2985 .tested = TEST_UNTESTED,
2986 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002987 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002988 .erase = erase_chip_jedec,
2989 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002990 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002991 },
2992
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002993 {
2994 .vendor = "SyncMOS",
2995 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002996 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002997 .manufacture_id = SYNCMOS_ID,
2998 .model_id = S29C31004T,
2999 .total_size = 512,
3000 .page_size = 128,
3001 .tested = TEST_UNTESTED,
3002 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003003 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003004 .erase = erase_chip_jedec,
3005 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003006 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003007 },
3008
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003009 {
3010 .vendor = "SyncMOS",
3011 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003012 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003013 .manufacture_id = SYNCMOS_ID,
3014 .model_id = S29C51001T,
3015 .total_size = 128,
3016 .page_size = 128,
3017 .tested = TEST_UNTESTED,
3018 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003019 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003020 .erase = erase_chip_jedec,
3021 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003022 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003023 },
3024
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003025 {
3026 .vendor = "SyncMOS",
3027 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003028 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003029 .manufacture_id = SYNCMOS_ID,
3030 .model_id = S29C51002T,
3031 .total_size = 256,
3032 .page_size = 128,
3033 .tested = TEST_OK_PREW,
3034 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003035 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003036 .erase = erase_chip_jedec,
3037 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003038 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003039 },
3040
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003041 {
3042 .vendor = "SyncMOS",
3043 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003044 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003045 .manufacture_id = SYNCMOS_ID,
3046 .model_id = S29C51004T,
3047 .total_size = 512,
3048 .page_size = 128,
3049 .tested = TEST_UNTESTED,
3050 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003051 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003052 .erase = erase_chip_jedec,
3053 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003054 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003055 },
3056
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003057 {
Uwe Hermanna106d152009-05-27 23:17:40 +00003058 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003059 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00003060 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003061 .manufacture_id = TI_OLD_ID,
3062 .model_id = TI_TMS29F002RB,
3063 .total_size = 256,
3064 .page_size = 16384, /* Non-uniform sectors */
3065 .tested = TEST_UNTESTED,
3066 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003067 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003068 .erase = NULL,
3069 .write = NULL,
3070 .read = read_memmapped,
3071 },
3072
3073 {
Uwe Hermanna106d152009-05-27 23:17:40 +00003074 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003075 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00003076 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003077 .manufacture_id = TI_OLD_ID,
3078 .model_id = TI_TMS29F002RT,
3079 .total_size = 256,
3080 .page_size = 16384, /* Non-uniform sectors */
3081 .tested = TEST_UNTESTED,
3082 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003083 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00003084 .erase = NULL,
3085 .write = NULL,
3086 .read = read_memmapped,
3087 },
3088
3089 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003090 .vendor = "Winbond",
3091 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003092 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003093 .manufacture_id = WINBOND_NEX_ID,
3094 .model_id = W_25X10,
3095 .total_size = 128,
3096 .page_size = 256,
3097 .tested = TEST_UNTESTED,
3098 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003099 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003100 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003101 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003102 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003103 },
3104
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003105 {
3106 .vendor = "Winbond",
3107 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003108 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003109 .manufacture_id = WINBOND_NEX_ID,
3110 .model_id = W_25X20,
3111 .total_size = 256,
3112 .page_size = 256,
3113 .tested = TEST_UNTESTED,
3114 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003115 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003116 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003117 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003118 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003119 },
3120
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003121 {
3122 .vendor = "Winbond",
3123 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003124 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003125 .manufacture_id = WINBOND_NEX_ID,
3126 .model_id = W_25X40,
3127 .total_size = 512,
3128 .page_size = 256,
3129 .tested = TEST_OK_PREW,
3130 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003131 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003132 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003133 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003134 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003135 },
3136
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003137 {
3138 .vendor = "Winbond",
3139 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003140 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003141 .manufacture_id = WINBOND_NEX_ID,
3142 .model_id = W_25X80,
3143 .total_size = 1024,
3144 .page_size = 256,
3145 .tested = TEST_OK_PREW,
3146 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003147 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003148 .erase = spi_chip_erase_c7,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003149 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003150 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003151 },
3152
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003153 {
3154 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00003155 .name = "W25x16",
3156 .bustype = CHIP_BUSTYPE_SPI,
3157 .manufacture_id = WINBOND_NEX_ID,
3158 .model_id = W_25X16,
3159 .total_size = 2048,
3160 .page_size = 256,
3161 .tested = TEST_OK_PR,
3162 .probe = probe_spi_rdid,
3163 .probe_timing = TIMING_ZERO,
3164 .erase = spi_chip_erase_c7,
3165 .write = spi_chip_write_256,
3166 .read = spi_chip_read,
3167 },
3168
3169 {
3170 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00003171 .name = "W25x32",
3172 .bustype = CHIP_BUSTYPE_SPI,
3173 .manufacture_id = WINBOND_NEX_ID,
3174 .model_id = W_25X32,
3175 .total_size = 4096,
3176 .page_size = 256,
3177 .tested = TEST_OK_PROBE,
3178 .probe = probe_spi_rdid,
3179 .probe_timing = TIMING_ZERO,
3180 .erase = spi_chip_erase_c7,
3181 .write = spi_chip_write_256,
3182 .read = spi_chip_read,
3183 },
3184
3185 {
3186 .vendor = "Winbond",
3187 .name = "W25x64",
3188 .bustype = CHIP_BUSTYPE_SPI,
3189 .manufacture_id = WINBOND_NEX_ID,
3190 .model_id = W_25X64,
3191 .total_size = 8192,
3192 .page_size = 256,
3193 .tested = TEST_UNTESTED,
3194 .probe = probe_spi_rdid,
3195 .probe_timing = TIMING_ZERO,
3196 .erase = spi_chip_erase_c7,
3197 .write = spi_chip_write_256,
3198 .read = spi_chip_read,
3199 },
3200
3201 {
3202 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003203 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00003204 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003205 .manufacture_id = WINBOND_ID,
3206 .model_id = W_29C011,
3207 .total_size = 128,
3208 .page_size = 128,
3209 .tested = TEST_OK_PREW,
3210 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003211 .probe_timing = 10, /* used datasheet for the W29C011A */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003212 .erase = erase_chip_jedec,
3213 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003214 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003215 },
3216
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003217 {
3218 .vendor = "Winbond",
3219 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00003220 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003221 .manufacture_id = WINBOND_ID,
3222 .model_id = W_29C020C,
3223 .total_size = 256,
3224 .page_size = 128,
3225 .tested = TEST_OK_PREW,
3226 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003227 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003228 .erase = erase_chip_jedec,
3229 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003230 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003231 },
3232
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003233 {
3234 .vendor = "Winbond",
3235 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00003236 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003237 .manufacture_id = WINBOND_ID,
3238 .model_id = W_29C040P,
3239 .total_size = 512,
3240 .page_size = 256,
Carl-Daniel Hailfinger8a8a2262009-11-14 03:48:33 +00003241 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003242 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003243 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003244 .erase = erase_chip_jedec,
3245 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003246 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003247 },
3248
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003249 {
3250 .vendor = "Winbond",
3251 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00003252 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003253 .manufacture_id = WINBOND_ID,
3254 .model_id = W_29C011,
3255 .total_size = 128,
3256 .page_size = 128,
3257 .tested = TEST_OK_PREW,
3258 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003259 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003260 .erase = erase_chip_jedec,
3261 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003262 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003263 },
3264
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003265 {
3266 .vendor = "Winbond",
3267 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003268 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003269 .manufacture_id = WINBOND_ID,
3270 .model_id = W_39V040A,
3271 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003272 .page_size = 64 * 1024,
Uwe Hermann690bcba2009-05-21 17:11:25 +00003273 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003274 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003275 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003276 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003277 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003278 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003279 },
3280
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003281 {
3282 .vendor = "Winbond",
3283 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003284 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003285 .manufacture_id = WINBOND_ID,
3286 .model_id = W_39V040B,
3287 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003288 .page_size = 64 * 1024,
Luc Verhaegen8bfb59c2009-07-08 14:50:36 +00003289 .tested = TEST_OK_PR | TEST_BAD_ERASE | TEST_BAD_WRITE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003290 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003291 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003292 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003293 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003294 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003295 },
3296
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003297 {
3298 .vendor = "Winbond",
3299 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003300 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003301 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003302 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003303 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003304 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003305 .tested = TEST_OK_PREW,
3306 .probe = probe_w39v040c,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003307 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v040c.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003308 .erase = erase_w39v040c,
3309 .write = write_w39v040c,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003310 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003311 },
3312
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003313 {
3314 .vendor = "Winbond",
3315 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003316 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003317 .manufacture_id = WINBOND_ID,
3318 .model_id = W_39V040FA,
3319 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003320 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003321 .tested = TEST_OK_PREW,
3322 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003323 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003324 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003325 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003326 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003327 },
3328
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003329 {
3330 .vendor = "Winbond",
3331 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003332 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003333 .manufacture_id = WINBOND_ID,
3334 .model_id = W_39V080A,
3335 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00003336 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003337 .tested = TEST_OK_PREW,
3338 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003339 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003340 .erase = erase_chip_jedec,
Uwe Hermann24f9fbe2009-05-12 14:06:04 +00003341 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003342 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003343 },
3344
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003345 {
3346 .vendor = "Winbond",
3347 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00003348 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003349 .manufacture_id = WINBOND_ID,
3350 .model_id = W_49F002U,
3351 .total_size = 256,
3352 .page_size = 128,
3353 .tested = TEST_OK_PREW,
3354 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003355 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003356 .erase = erase_chip_jedec,
3357 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003358 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003359 },
3360
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003361 {
3362 .vendor = "Winbond",
3363 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003364 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003365 .manufacture_id = WINBOND_ID,
3366 .model_id = W_49V002A,
3367 .total_size = 256,
3368 .page_size = 128,
3369 .tested = TEST_OK_PREW,
3370 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003371 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003372 .erase = erase_chip_jedec,
3373 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003374 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003375 },
3376
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003377 {
3378 .vendor = "Winbond",
3379 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003380 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003381 .manufacture_id = WINBOND_ID,
3382 .model_id = W_49V002FA,
3383 .total_size = 256,
3384 .page_size = 128,
3385 .tested = TEST_UNTESTED,
3386 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003387 .probe_timing = 10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003388 .erase = erase_chip_jedec,
3389 .write = write_49f002,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003390 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003391 },
3392
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003393 {
3394 .vendor = "Winbond",
3395 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003396 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003397 .manufacture_id = WINBOND_ID,
3398 .model_id = W_39V080FA,
3399 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00003400 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003401 .tested = TEST_OK_PREW,
3402 .probe = probe_winbond_fwhub,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003403 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v080fa.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003404 .erase = erase_winbond_fwhub,
3405 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003406 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003407 },
3408
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003409 {
3410 .vendor = "Winbond",
3411 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00003412 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003413 .manufacture_id = WINBOND_ID,
3414 .model_id = W_39V080FA_DM,
3415 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00003416 .page_size = 64 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003417 .tested = TEST_UNTESTED,
3418 .probe = probe_winbond_fwhub,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003419 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w39v080fa.c) */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003420 .erase = erase_winbond_fwhub,
3421 .write = write_winbond_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003422 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003423 },
3424
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003425 {
3426 .vendor = "Atmel",
3427 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003428 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003429 .manufacture_id = ATMEL_ID,
3430 .model_id = GENERIC_DEVICE_ID,
3431 .total_size = 0,
3432 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003433 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003434 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003435 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003436 .erase = NULL,
3437 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003438 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003439 },
3440
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003441 {
3442 .vendor = "EON",
3443 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003444 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003445 .manufacture_id = EON_ID_NOPREFIX,
3446 .model_id = GENERIC_DEVICE_ID,
3447 .total_size = 0,
3448 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003449 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003450 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003451 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003452 .erase = NULL,
3453 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003454 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003455 },
3456
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003457 {
3458 .vendor = "Macronix",
3459 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003460 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003461 .manufacture_id = MX_ID,
3462 .model_id = GENERIC_DEVICE_ID,
3463 .total_size = 0,
3464 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003465 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003466 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003467 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003468 .erase = NULL,
3469 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003470 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003471 },
3472
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003473 {
3474 .vendor = "PMC",
3475 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003476 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003477 .manufacture_id = PMC_ID,
3478 .model_id = GENERIC_DEVICE_ID,
3479 .total_size = 0,
3480 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003481 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003482 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003483 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003484 .erase = NULL,
3485 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003486 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003487 },
3488
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003489 {
3490 .vendor = "SST",
3491 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003492 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003493 .manufacture_id = SST_ID,
3494 .model_id = GENERIC_DEVICE_ID,
3495 .total_size = 0,
3496 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003497 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003498 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003499 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003500 .erase = NULL,
3501 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003502 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003503 },
3504
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003505 {
3506 .vendor = "ST",
3507 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003508 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003509 .manufacture_id = ST_ID,
3510 .model_id = GENERIC_DEVICE_ID,
3511 .total_size = 0,
3512 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00003513 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003514 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003515 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003516 .erase = NULL,
3517 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003518 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00003519 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00003520
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00003521 {
Sean Nelson118e1d62009-11-24 02:08:11 +00003522 .vendor = "Sanyo",
3523 .name = "unknown Sanyo SPI chip",
3524 .bustype = CHIP_BUSTYPE_SPI,
3525 .manufacture_id = SANYO_ID,
3526 .model_id = GENERIC_DEVICE_ID,
3527 .total_size = 0,
3528 .page_size = 256,
3529 .tested = TEST_BAD_PREW,
3530 .probe = probe_spi_rdid,
3531 .probe_timing = TIMING_ZERO,
3532 .erase = NULL,
3533 .write = NULL,
3534 .read = NULL,
3535 },
3536
3537 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00003538 .vendor = "Generic",
3539 .name = "unknown SPI chip (RDID)",
3540 .bustype = CHIP_BUSTYPE_SPI,
3541 .manufacture_id = GENERIC_MANUF_ID,
3542 .model_id = GENERIC_DEVICE_ID,
3543 .total_size = 0,
3544 .page_size = 256,
3545 .tested = TEST_BAD_PREW,
3546 .probe = probe_spi_rdid,
3547 .erase = NULL,
3548 .write = NULL,
3549 },
3550 {
3551 .vendor = "Generic",
3552 .name = "unknown SPI chip (REMS)",
3553 .bustype = CHIP_BUSTYPE_SPI,
3554 .manufacture_id = GENERIC_MANUF_ID,
3555 .model_id = GENERIC_DEVICE_ID,
3556 .total_size = 0,
3557 .page_size = 256,
3558 .tested = TEST_BAD_PREW,
3559 .probe = probe_spi_rems,
3560 .erase = NULL,
3561 .write = NULL,
3562 },
3563
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003564 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00003565};