blob: db67a47bb33809f269803a7ee442414996f492bb [file] [log] [blame]
Ollie Lho184a4042005-11-26 21:55:36 +00001/*
Uwe Hermannd1107642007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
Ollie Lho184a4042005-11-26 21:55:36 +00003 *
Uwe Hermannd22a1d42007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
Stefan Reinauer4c390c82008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
Sean Nelsonc57a9202010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
Uwe Hermannd1107642007-08-29 17:52:32 +00009 *
Stefan Reinauerce532972007-05-23 17:20:56 +000010 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000014 *
Stefan Reinauerce532972007-05-23 17:20:56 +000015 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000019 *
Stefan Reinauerce532972007-05-23 17:20:56 +000020 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000026#include "flashchips.h"
Ollie Lho184a4042005-11-26 21:55:36 +000027
Uwe Hermannfc425e82008-03-16 02:06:25 +000028/**
Uwe Hermanna9720402009-05-21 15:55:46 +000029 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000030 *
31 * Please keep the list sorted by vendor name and chip name, so that
32 * the output of 'flashrom -L' is alphabetically sorted.
33 */
Ollie Lho184a4042005-11-26 21:55:36 +000034struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000035
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000036 /*
37 * .vendor = Vendor name
38 * .name = Chip name
39 * .bustype = Supported flash bus types (Parallel, LPC...)
40 * .manufacture_id = Manufacturer chip ID
41 * .model_id = Model chip ID
42 * .total_size = Total size in (binary) kbytes
43 * .page_size = Page or eraseblock(?) size in bytes
44 * .tested = Test status
45 * .probe = Probe function
46 * .probe_timing = Probe function delay
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 Nelson35727f72010-01-28 23:55:12 +000064 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
65 .tested = TEST_UNTESTED,
66 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000067 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000068 .block_erasers =
69 {
70 {
71 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000072 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000073 }, {
74 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000075 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000076 },
77 },
Sean Nelson35727f72010-01-28 23:55:12 +000078 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000079 .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,
Sean Nelson35727f72010-01-28 23:55:12 +000090 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000091 .tested = TEST_UNTESTED,
92 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000093 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000094 .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 Nelson35727f72010-01-28 23:55:12 +0000121 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
122 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000123 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000124 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000125 .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,
Sean Nelson35727f72010-01-28 23:55:12 +0000152 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000153 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000154 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000155 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000156 .block_erasers =
157 {
158 {
159 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000160 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000161 }, {
162 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000163 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000164 },
165 },
Sean Nelson35727f72010-01-28 23:55:12 +0000166 .write = write_jedec_1,
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 Nelson35727f72010-01-28 23:55:12 +0000178 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
179 .tested = TEST_UNTESTED,
180 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000181 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000182 .block_erasers =
183 {
184 {
185 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000186 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000187 }, {
188 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000189 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000190 },
191 },
Sean Nelson35727f72010-01-28 23:55:12 +0000192 .write = write_jedec_1,
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,
Sean Nelson35727f72010-01-28 23:55:12 +0000204 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000205 .tested = TEST_UNTESTED,
206 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000207 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000208 .block_erasers =
209 {
210 {
211 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000212 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000213 }, {
214 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000215 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000216 },
217 },
Sean Nelson35727f72010-01-28 23:55:12 +0000218 .write = write_jedec_1,
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,
Sean Nelson35727f72010-01-28 23:55:12 +0000230 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000231 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000232 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000233 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000234 .block_erasers =
235 {
236 {
237 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000238 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000239 }, {
240 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000241 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000242 },
243 },
Sean Nelson35727f72010-01-28 23:55:12 +0000244 .write = write_jedec_1,
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,
Sean Nelson35727f72010-01-28 23:55:12 +0000256 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000257 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000258 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000259 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000260 .block_erasers =
261 {
262 {
263 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000264 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000265 }, {
266 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000267 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000268 },
269 },
Sean Nelson35727f72010-01-28 23:55:12 +0000270 .write = write_jedec_1,
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,
Sean Nelson35727f72010-01-28 23:55:12 +0000282 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000283 .tested = TEST_UNTESTED,
284 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000285 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +0000286 .block_erasers =
287 {
288 {
289 .eraseblocks = {
290 {128 * 1024, 1},
291 {96 * 1024, 1},
292 {8 * 1024, 2},
293 {16 * 1024, 1},
294 },
295 .block_erase = erase_sector_jedec,
296 }, {
297 .eraseblocks = { {256 * 1024, 1} },
298 .block_erase = erase_chip_block_jedec,
299 }
300 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000301 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000302 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000303 },
304
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000305 {
306 .vendor = "Atmel",
307 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000308 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000309 .manufacture_id = ATMEL_ID,
310 .model_id = AT_25DF021,
311 .total_size = 256,
312 .page_size = 256,
313 .tested = TEST_UNTESTED,
314 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000315 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000316 .block_erasers =
317 {
318 {
319 .eraseblocks = { {4 * 1024, 64} },
320 .block_erase = spi_block_erase_20,
321 }, {
322 .eraseblocks = { {32 * 1024, 8} },
323 .block_erase = spi_block_erase_52,
324 }, {
325 .eraseblocks = { {64 * 1024, 4} },
326 .block_erase = spi_block_erase_d8,
327 }, {
328 .eraseblocks = { {256 * 1024, 1} },
329 .block_erase = spi_block_erase_60,
330 }, {
331 .eraseblocks = { {256 * 1024, 1} },
332 .block_erase = spi_block_erase_c7,
333 }
334 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000335 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000336 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000337 },
338
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000339 {
340 .vendor = "Atmel",
341 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000342 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000343 .manufacture_id = ATMEL_ID,
344 .model_id = AT_25DF041A,
345 .total_size = 512,
346 .page_size = 256,
347 .tested = TEST_UNTESTED,
348 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000349 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000350 .block_erasers =
351 {
352 {
353 .eraseblocks = { {4 * 1024, 128} },
354 .block_erase = spi_block_erase_20,
355 }, {
356 .eraseblocks = { {32 * 1024, 16} },
357 .block_erase = spi_block_erase_52,
358 }, {
359 .eraseblocks = { {64 * 1024, 8} },
360 .block_erase = spi_block_erase_d8,
361 }, {
362 .eraseblocks = { {512 * 1024, 1} },
363 .block_erase = spi_block_erase_60,
364 }, {
365 .eraseblocks = { {512 * 1024, 1} },
366 .block_erase = spi_block_erase_c7,
367 }
368 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000369 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000370 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000371 },
372
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000373 {
374 .vendor = "Atmel",
375 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000376 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000377 .manufacture_id = ATMEL_ID,
378 .model_id = AT_25DF081,
379 .total_size = 1024,
380 .page_size = 256,
381 .tested = TEST_UNTESTED,
382 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000383 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000384 .block_erasers =
385 {
386 {
387 .eraseblocks = { {4 * 1024, 256} },
388 .block_erase = spi_block_erase_20,
389 }, {
390 .eraseblocks = { {32 * 1024, 32} },
391 .block_erase = spi_block_erase_52,
392 }, {
393 .eraseblocks = { {64 * 1024, 16} },
394 .block_erase = spi_block_erase_d8,
395 }, {
396 .eraseblocks = { {1024 * 1024, 1} },
397 .block_erase = spi_block_erase_60,
398 }, {
399 .eraseblocks = { {1024 * 1024, 1} },
400 .block_erase = spi_block_erase_c7,
401 }
402 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000403 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000404 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000405 },
406
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000407 {
408 .vendor = "Atmel",
409 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000410 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000411 .manufacture_id = ATMEL_ID,
412 .model_id = AT_25DF161,
413 .total_size = 2048,
414 .page_size = 256,
415 .tested = TEST_UNTESTED,
416 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000417 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000418 .block_erasers =
419 {
420 {
421 .eraseblocks = { {4 * 1024, 512} },
422 .block_erase = spi_block_erase_20,
423 }, {
424 .eraseblocks = { {32 * 1024, 64} },
425 .block_erase = spi_block_erase_52,
426 }, {
427 .eraseblocks = { {64 * 1024, 32} },
428 .block_erase = spi_block_erase_d8,
429 }, {
430 .eraseblocks = { {2 * 1024 * 1024, 1} },
431 .block_erase = spi_block_erase_60,
432 }, {
433 .eraseblocks = { {2 * 1024 * 1024, 1} },
434 .block_erase = spi_block_erase_c7,
435 }
436 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000437 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000438 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000439 },
440
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000441 {
442 .vendor = "Atmel",
443 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000444 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000445 .manufacture_id = ATMEL_ID,
446 .model_id = AT_25DF321,
447 .total_size = 4096,
448 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000449 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000450 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000451 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000452 .block_erasers =
453 {
454 {
455 .eraseblocks = { {4 * 1024, 1024} },
456 .block_erase = spi_block_erase_20,
457 }, {
458 .eraseblocks = { {32 * 1024, 128} },
459 .block_erase = spi_block_erase_52,
460 }, {
461 .eraseblocks = { {64 * 1024, 64} },
462 .block_erase = spi_block_erase_d8,
463 }, {
464 .eraseblocks = { {4 * 1024 * 1024, 1} },
465 .block_erase = spi_block_erase_60,
466 }, {
467 .eraseblocks = { {4 * 1024 * 1024, 1} },
468 .block_erase = spi_block_erase_c7,
469 }
470 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000471 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000472 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000473 },
474
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000475 {
476 .vendor = "Atmel",
477 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000478 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000479 .manufacture_id = ATMEL_ID,
480 .model_id = AT_25DF321A,
481 .total_size = 4096,
482 .page_size = 256,
483 .tested = TEST_UNTESTED,
484 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000485 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000486 .block_erasers =
487 {
488 {
489 .eraseblocks = { {4 * 1024, 1024} },
490 .block_erase = spi_block_erase_20,
491 }, {
492 .eraseblocks = { {32 * 1024, 128} },
493 .block_erase = spi_block_erase_52,
494 }, {
495 .eraseblocks = { {64 * 1024, 64} },
496 .block_erase = spi_block_erase_d8,
497 }, {
498 .eraseblocks = { {4 * 1024 * 1024, 1} },
499 .block_erase = spi_block_erase_60,
500 }, {
501 .eraseblocks = { {4 * 1024 * 1024, 1} },
502 .block_erase = spi_block_erase_c7,
503 }
504 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000505 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000506 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000507 },
508
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000509 {
510 .vendor = "Atmel",
511 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000512 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000513 .manufacture_id = ATMEL_ID,
514 .model_id = AT_25DF641,
515 .total_size = 8192,
516 .page_size = 256,
517 .tested = TEST_UNTESTED,
518 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000519 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000520 .block_erasers =
521 {
522 {
523 .eraseblocks = { {4 * 1024, 2048} },
524 .block_erase = spi_block_erase_20,
525 }, {
526 .eraseblocks = { {32 * 1024, 256} },
527 .block_erase = spi_block_erase_52,
528 }, {
529 .eraseblocks = { {64 * 1024, 128} },
530 .block_erase = spi_block_erase_d8,
531 }, {
532 .eraseblocks = { {8 * 1024 * 1024, 1} },
533 .block_erase = spi_block_erase_60,
534 }, {
535 .eraseblocks = { {8 * 1024 * 1024, 1} },
536 .block_erase = spi_block_erase_c7,
537 }
538 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000539 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000540 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000541 },
542
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000543 {
544 .vendor = "Atmel",
545 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000546 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000547 .manufacture_id = ATMEL_ID,
548 .model_id = AT_25F512B,
549 .total_size = 64,
550 .page_size = 256,
551 .tested = TEST_UNTESTED,
552 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000553 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000554 .block_erasers =
555 {
556 {
557 .eraseblocks = { {4 * 1024, 16} },
558 .block_erase = spi_block_erase_20,
559 }, {
560 .eraseblocks = { {32 * 1024, 2} },
561 .block_erase = spi_block_erase_52,
562 }, {
563 .eraseblocks = { {32 * 1024, 2} },
564 .block_erase = spi_block_erase_d8,
565 }, {
566 .eraseblocks = { {64 * 1024, 1} },
567 .block_erase = spi_block_erase_60,
568 }, {
569 .eraseblocks = { {64 * 1024, 1} },
570 .block_erase = spi_block_erase_c7,
571 }
572 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000573 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000574 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000575 },
576
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000577 {
578 .vendor = "Atmel",
579 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000580 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000581 .manufacture_id = ATMEL_ID,
582 .model_id = AT_25FS010,
583 .total_size = 128,
584 .page_size = 256,
585 .tested = TEST_UNTESTED,
586 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000587 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000588 .block_erasers =
589 {
590 {
591 .eraseblocks = { {4 * 1024, 32} },
592 .block_erase = spi_block_erase_20,
593 }, {
594 .eraseblocks = { {32 * 1024, 4} },
595 .block_erase = spi_block_erase_52,
596 }, {
597 .eraseblocks = { {32 * 1024, 4} },
598 .block_erase = spi_block_erase_d8,
599 }, {
600 .eraseblocks = { {128 * 1024, 1} },
601 .block_erase = spi_block_erase_60,
602 }, {
603 .eraseblocks = { {128 * 1024, 1} },
604 .block_erase = spi_block_erase_c7,
605 }
606 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000607 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000608 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000609 },
610
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000611 {
612 .vendor = "Atmel",
613 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000614 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000615 .manufacture_id = ATMEL_ID,
616 .model_id = AT_25FS040,
617 .total_size = 512,
618 .page_size = 256,
619 .tested = TEST_UNTESTED,
620 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000621 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000622 .block_erasers =
623 {
624 {
625 .eraseblocks = { {4 * 1024, 128} },
626 .block_erase = spi_block_erase_20,
627 }, {
628 .eraseblocks = { {64 * 1024, 8} },
629 .block_erase = spi_block_erase_52,
630 }, {
631 .eraseblocks = { {64 * 1024, 8} },
632 .block_erase = spi_block_erase_d8,
633 }, {
634 .eraseblocks = { {512 * 1024, 1} },
635 .block_erase = spi_block_erase_60,
636 }, {
637 .eraseblocks = { {512 * 1024, 1} },
638 .block_erase = spi_block_erase_c7,
639 }
640 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000641 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000642 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000643 },
644
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000645 {
646 .vendor = "Atmel",
647 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000648 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000649 .manufacture_id = ATMEL_ID,
650 .model_id = AT_26DF041,
651 .total_size = 512,
652 .page_size = 256,
653 .tested = TEST_UNTESTED,
654 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000655 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000656 .block_erasers =
657 {
658 {
659 .eraseblocks = { {4 * 1024, 128} },
660 .block_erase = spi_block_erase_20,
661 }
662 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000663 .write = NULL /* Incompatible Page write */,
664 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000665 },
666
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000667 {
668 .vendor = "Atmel",
669 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000670 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000671 .manufacture_id = ATMEL_ID,
672 .model_id = AT_26DF081A,
673 .total_size = 1024,
674 .page_size = 256,
675 .tested = TEST_UNTESTED,
676 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000677 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000678 .block_erasers =
679 {
680 {
681 .eraseblocks = { {4 * 1024, 256} },
682 .block_erase = spi_block_erase_20,
683 }, {
684 .eraseblocks = { {32 * 1024, 32} },
685 .block_erase = spi_block_erase_52,
686 }, {
687 .eraseblocks = { {64 * 1024, 16} },
688 .block_erase = spi_block_erase_d8,
689 }, {
690 .eraseblocks = { {1024 * 1024, 1} },
691 .block_erase = spi_block_erase_60,
692 }, {
693 .eraseblocks = { {1024 * 1024, 1} },
694 .block_erase = spi_block_erase_c7,
695 }
696 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000697 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000698 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000699 },
700
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000701 {
702 .vendor = "Atmel",
703 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000704 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000705 .manufacture_id = ATMEL_ID,
706 .model_id = AT_26DF161,
707 .total_size = 2048,
708 .page_size = 256,
709 .tested = TEST_UNTESTED,
710 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000711 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000712 .block_erasers =
713 {
714 {
715 .eraseblocks = { {4 * 1024, 512} },
716 .block_erase = spi_block_erase_20,
717 }, {
718 .eraseblocks = { {32 * 1024, 64} },
719 .block_erase = spi_block_erase_52,
720 }, {
721 .eraseblocks = { {64 * 1024, 32} },
722 .block_erase = spi_block_erase_d8,
723 }, {
724 .eraseblocks = { {2 * 1024 * 1024, 1} },
725 .block_erase = spi_block_erase_60,
726 }, {
727 .eraseblocks = { {2 * 1024 * 1024, 1} },
728 .block_erase = spi_block_erase_c7,
729 }
730 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000731 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000732 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000733 },
734
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000735 {
736 .vendor = "Atmel",
737 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000738 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000739 .manufacture_id = ATMEL_ID,
740 .model_id = AT_26DF161A,
741 .total_size = 2048,
742 .page_size = 256,
743 .tested = TEST_UNTESTED,
744 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000745 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000746 .block_erasers =
747 {
748 {
749 .eraseblocks = { {4 * 1024, 512} },
750 .block_erase = spi_block_erase_20,
751 }, {
752 .eraseblocks = { {32 * 1024, 64} },
753 .block_erase = spi_block_erase_52,
754 }, {
755 .eraseblocks = { {64 * 1024, 32} },
756 .block_erase = spi_block_erase_d8,
757 }, {
758 .eraseblocks = { {2 * 1024 * 1024, 1} },
759 .block_erase = spi_block_erase_60,
760 }, {
761 .eraseblocks = { {2 * 1024 * 1024, 1} },
762 .block_erase = spi_block_erase_c7,
763 }
764 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000765 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000766 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000767 },
768
769 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000770 /*{
771 .vendor = "Atmel",
772 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000773 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000774 .manufacture_id = ATMEL_ID,
775 .model_id = AT_26DF321,
776 .total_size = 4096,
777 .page_size = 256,
778 .tested = TEST_UNTESTED,
779 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000780 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000781 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000782 .read = spi_chip_read,
783 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000784
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000785 {
786 .vendor = "Atmel",
787 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000788 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000789 .manufacture_id = ATMEL_ID,
790 .model_id = AT_26F004,
791 .total_size = 512,
792 .page_size = 256,
793 .tested = TEST_UNTESTED,
794 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000795 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000796 .block_erasers =
797 {
798 {
799 .eraseblocks = { {4 * 1024, 128} },
800 .block_erase = spi_block_erase_20,
801 }, {
802 .eraseblocks = { {32 * 1024, 16} },
803 .block_erase = spi_block_erase_52,
804 }, {
805 .eraseblocks = { {64 * 1024, 8} },
806 .block_erase = spi_block_erase_d8,
807 }, {
808 .eraseblocks = { {512 * 1024, 1} },
809 .block_erase = spi_block_erase_60,
810 }, {
811 .eraseblocks = { {512 * 1024, 1} },
812 .block_erase = spi_block_erase_c7,
813 }
814 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000815 .write = NULL /* Incompatible Page write */,
816 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000817 },
818
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000819 {
820 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000821 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000822 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000823 .manufacture_id = ATMEL_ID,
824 .model_id = AT_29C512,
825 .total_size = 64,
826 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000827 .feature_bits = FEATURE_LONG_RESET,
828 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000829 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000830 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000831 .block_erasers =
832 {
833 {
834 .eraseblocks = { {64 * 1024, 1} },
835 .block_erase = erase_chip_block_jedec,
836 }
837 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000838 .write = write_jedec,
839 .read = read_memmapped,
840
841 },
842
843 {
844 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000845 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000846 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000847 .manufacture_id = ATMEL_ID,
848 .model_id = AT_29C010A,
849 .total_size = 128,
850 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000851 .feature_bits = FEATURE_LONG_RESET,
852 .tested = TEST_UNTESTED,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000853 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000854 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000855 .block_erasers =
856 {
857 {
858 .eraseblocks = { {128 * 1024, 1} },
859 .block_erase = erase_chip_block_jedec,
860 }
861 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000862 .write = write_jedec, /* FIXME */
863 .read = read_memmapped,
864 },
865
866 {
867 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000868 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000869 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000870 .manufacture_id = ATMEL_ID,
871 .model_id = AT_29C020,
872 .total_size = 256,
873 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000874 .feature_bits = FEATURE_LONG_RESET,
875 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000876 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000877 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000878 .block_erasers =
879 {
880 {
881 .eraseblocks = { {256 * 1024, 1} },
882 .block_erase = erase_chip_block_jedec,
883 }
884 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000885 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000886 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000887 },
888
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000889 {
890 .vendor = "Atmel",
891 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000892 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000893 .manufacture_id = ATMEL_ID,
894 .model_id = AT_29C040A,
895 .total_size = 512,
896 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000897 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000898 .tested = TEST_UNTESTED,
899 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000900 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000901 .block_erasers =
902 {
903 {
904 .eraseblocks = { {512 * 1024, 1} },
905 .block_erase = erase_chip_block_jedec,
906 }
907 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000908 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000909 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000910 },
911
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000912 {
913 .vendor = "Atmel",
914 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000915 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000916 .manufacture_id = ATMEL_ID,
917 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000918 .total_size = 16896 /* No power of two sizes */,
919 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000920 .tested = TEST_BAD_READ,
921 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000922 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000923 .write = NULL /* Incompatible Page write */,
924 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000925 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000926
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000927 {
928 .vendor = "Atmel",
929 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000930 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000931 .manufacture_id = ATMEL_ID,
932 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000933 .total_size = 128 /* Size can only be determined from status register */,
934 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000935 .tested = TEST_BAD_READ,
936 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000937 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000938 .write = NULL,
939 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000940 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000941
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000942 {
943 .vendor = "Atmel",
944 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000945 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000946 .manufacture_id = ATMEL_ID,
947 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000948 .total_size = 256 /* Size can only be determined from status register */,
949 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000950 .tested = TEST_BAD_READ,
951 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000952 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000953 .write = NULL,
954 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000955 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000956
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000957 {
958 .vendor = "Atmel",
959 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000960 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000961 .manufacture_id = ATMEL_ID,
962 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000963 .total_size = 512 /* Size can only be determined from status register */,
964 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000965 .tested = TEST_BAD_READ,
966 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000967 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000968 .write = NULL,
969 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000970 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000971
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000972 {
973 .vendor = "Atmel",
974 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000975 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000976 .manufacture_id = ATMEL_ID,
977 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000978 .total_size = 1024 /* Size can only be determined from status register */,
979 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000980 .tested = TEST_BAD_READ,
981 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000982 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000983 .write = NULL,
984 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000985 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000986
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000987 {
988 .vendor = "Atmel",
989 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000990 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000991 .manufacture_id = ATMEL_ID,
992 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000993 .total_size = 2048 /* Size can only be determined from status register */,
994 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000995 .tested = TEST_BAD_READ,
996 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000997 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000998 .write = NULL,
999 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001000 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001001
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001002 {
1003 .vendor = "Atmel",
1004 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001005 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001006 .manufacture_id = ATMEL_ID,
1007 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001008 .total_size = 4224 /* No power of two sizes */,
1009 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001010 .tested = TEST_BAD_READ,
1011 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001012 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001013 .write = NULL,
1014 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001015 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001016
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001017 {
1018 .vendor = "Atmel",
1019 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001020 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001021 .manufacture_id = ATMEL_ID,
1022 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001023 .total_size = 4096 /* Size can only be determined from status register */,
1024 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001025 .tested = TEST_BAD_READ,
1026 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001027 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001028 .write = NULL,
1029 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001030 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001031
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001032 {
1033 .vendor = "Atmel",
1034 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001035 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001036 .manufacture_id = ATMEL_ID,
1037 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001038 .total_size = 8192 /* Size can only be determined from status register */,
1039 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001040 .tested = TEST_BAD_READ,
1041 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001042 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001043 .write = NULL,
1044 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001045 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001046
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001047 {
1048 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001049 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001050 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001051 .manufacture_id = ATMEL_ID,
1052 .model_id = AT_49BV512,
1053 .total_size = 64,
1054 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001055 .feature_bits = FEATURE_EITHER_RESET,
1056 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001057 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001058 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001059 .block_erasers =
1060 {
1061 {
1062 .eraseblocks = { {64 * 1024, 1} },
1063 .block_erase = erase_chip_block_jedec,
1064 }
1065 },
Sean Nelson35727f72010-01-28 23:55:12 +00001066 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001067 .read = read_memmapped,
1068 },
1069
1070 {
1071 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001072 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001073 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001074 .manufacture_id = ATMEL_ID,
1075 .model_id = AT_49F002N,
1076 .total_size = 256,
1077 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001078 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001079 .tested = TEST_UNTESTED,
1080 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001081 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001082 .block_erasers =
1083 {
1084 {
1085 .eraseblocks = {
1086 {16 * 1024, 1},
1087 {8 * 1024, 2},
1088 {96 * 1024, 1},
1089 {128 * 1024, 1},
1090 },
1091 .block_erase = erase_sector_jedec,
1092 }, {
1093 .eraseblocks = { {256 * 1024, 1} },
1094 .block_erase = erase_chip_block_jedec,
1095 }
1096 },
Sean Nelson35727f72010-01-28 23:55:12 +00001097 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001098 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001099 },
1100
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001101 {
1102 .vendor = "Atmel",
1103 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001104 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001105 .manufacture_id = ATMEL_ID,
1106 .model_id = AT_49F002NT,
1107 .total_size = 256,
1108 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001109 .feature_bits = FEATURE_EITHER_RESET,
1110 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001111 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001112 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001113 .block_erasers =
1114 {
1115 {
1116 .eraseblocks = {
1117 {128 * 1024, 1},
1118 {96 * 1024, 1},
1119 {8 * 1024, 2},
1120 {16 * 1024, 1},
1121 },
1122 .block_erase = erase_sector_jedec,
1123 }, {
1124 .eraseblocks = { {256 * 1024, 1} },
1125 .block_erase = erase_chip_block_jedec,
1126 }
1127 },
Sean Nelson35727f72010-01-28 23:55:12 +00001128 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001129 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001130 },
1131
Sean Nelson54596372010-01-09 05:30:14 +00001132 /* The next two chip definitions have top/bottom boot blocks, but has no
1133 device differenciation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001134 {
1135 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001136 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001137 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001138 .manufacture_id = AMIC_ID,
1139 .model_id = AMIC_A25L40P,
1140 .total_size = 512,
1141 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001142 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001143 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001144 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001145 .block_erasers =
1146 {
1147 {
1148 .eraseblocks = {
1149 {64 * 1024, 7},
1150 {32 * 1024, 1},
1151 {16 * 1024, 1},
1152 {8 * 1024, 1},
1153 {4 * 1024, 2},
1154 },
1155 .block_erase = spi_block_erase_d8,
1156 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001157 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001158 .block_erase = spi_block_erase_c7,
1159 }
1160 },
1161 .write = spi_chip_write_256,
1162 .read = spi_chip_read,
1163 },
1164
1165 {
1166 .vendor = "AMIC",
1167 .name = "A25L40PU",
1168 .bustype = CHIP_BUSTYPE_SPI,
1169 .manufacture_id = AMIC_ID,
1170 .model_id = AMIC_A25L40P,
1171 .total_size = 512,
1172 .page_size = 256,
1173 .tested = TEST_OK_PRW,
1174 .probe = probe_spi_rdid4,
1175 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001176 .block_erasers =
1177 {
1178 {
1179 .eraseblocks = {
1180 {4 * 1024, 2},
1181 {8 * 1024, 1},
1182 {16 * 1024, 1},
1183 {32 * 1024, 1},
1184 {64 * 1024, 7},
1185 },
1186 .block_erase = spi_block_erase_d8,
1187 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001188 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001189 .block_erase = spi_block_erase_c7,
1190 }
1191 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001192 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001193 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001194 },
1195
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001196 {
1197 .vendor = "AMIC",
1198 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001199 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001200 .manufacture_id = AMIC_ID_NOPREFIX,
1201 .model_id = AMIC_A29002B,
1202 .total_size = 256,
1203 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001204 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001205 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001206 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001207 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001208 .block_erasers =
1209 {
1210 {
1211 .eraseblocks = {
1212 {16 * 1024, 1},
1213 {8 * 1024, 2},
1214 {32 * 1024, 1},
1215 {64 * 1024, 3},
1216 },
Sean Nelson35727f72010-01-28 23:55:12 +00001217 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001218 }, {
1219 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001220 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001221 },
1222 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001223 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001224 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001225 },
1226
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001227 {
1228 .vendor = "AMIC",
1229 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001230 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001231 .manufacture_id = AMIC_ID_NOPREFIX,
1232 .model_id = AMIC_A29002T,
1233 .total_size = 256,
1234 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001235 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1236 .tested = TEST_UNTESTED,
1237 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001238 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001239 .block_erasers =
1240 {
1241 {
1242 .eraseblocks = {
1243 {64 * 1024, 3},
1244 {32 * 1024, 1},
1245 {8 * 1024, 2},
1246 {16 * 1024, 1},
1247 },
Sean Nelson35727f72010-01-28 23:55:12 +00001248 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001249 }, {
1250 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001251 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001252 },
1253 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001254 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001255 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001256 },
1257
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001258 {
1259 .vendor = "AMIC",
1260 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001261 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001262 .manufacture_id = AMIC_ID_NOPREFIX,
1263 .model_id = AMIC_A29040B,
1264 .total_size = 512,
1265 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001266 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1267 .tested = TEST_UNTESTED,
1268 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001269 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001270 .block_erasers =
1271 {
1272 {
1273 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001274 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001275 }, {
1276 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001277 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001278 },
1279 },
Sean Nelson35727f72010-01-28 23:55:12 +00001280 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001281 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001282 },
1283
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001284 {
1285 .vendor = "AMIC",
1286 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001287 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001288 .manufacture_id = AMIC_ID_NOPREFIX,
1289 .model_id = AMIC_A49LF040A,
1290 .total_size = 512,
1291 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001292 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
1293 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001294 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001295 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001296 .block_erasers =
1297 {
1298 {
1299 .eraseblocks = { {64 * 1024, 8} },
1300 .block_erase = erase_block_jedec,
1301 }, {
1302 .eraseblocks = { {512 * 1024, 1} },
1303 .block_erase = erase_chip_block_jedec,
1304 }
1305 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001306 .write = write_49fl00x,
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 = "EMST",
1312 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001313 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001314 .manufacture_id = EMST_ID,
1315 .model_id = EMST_F49B002UA,
1316 .total_size = 256,
1317 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001318 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001319 .tested = TEST_UNTESTED,
1320 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001321 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001322 .block_erasers =
1323 {
1324 {
1325 .eraseblocks = {
1326 {128 * 1024, 1},
1327 {96 * 1024, 1},
1328 {8 * 1024, 2},
1329 {16 * 1024, 1},
1330 },
1331 .block_erase = erase_sector_jedec,
1332 }, {
1333 .eraseblocks = { {256 * 1024, 1} },
1334 .block_erase = erase_chip_block_jedec,
1335 }
1336 },
Sean Nelson35727f72010-01-28 23:55:12 +00001337 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001338 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001339 },
1340
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001341 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001342 .vendor = "Eon",
1343 .name = "EN25B05",
1344 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001345 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001346 .model_id = EN_25B05,
1347 .total_size = 64,
1348 .page_size = 256,
1349 .tested = TEST_UNTESTED,
1350 .probe = probe_spi_rdid,
1351 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001352 .block_erasers =
1353 {
1354 {
1355 .eraseblocks = {
1356 {4 * 1024, 2},
1357 {8 * 1024, 1},
1358 {16 * 1024, 1},
1359 {32 * 1024, 1},
1360 },
1361 .block_erase = spi_block_erase_d8,
1362 }, {
1363 .eraseblocks = { {64 * 1024, 1} },
1364 .block_erase = spi_block_erase_c7,
1365 }
1366 },
1367 .write = spi_chip_write_256,
1368 .read = spi_chip_read,
1369 },
1370
1371 {
1372 .vendor = "Eon",
1373 .name = "EN25B05T",
1374 .bustype = CHIP_BUSTYPE_SPI,
1375 .manufacture_id = EON_ID_NOPREFIX,
1376 .model_id = EN_25B05,
1377 .total_size = 64,
1378 .page_size = 256,
1379 .tested = TEST_UNTESTED,
1380 .probe = probe_spi_rdid,
1381 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001382 .block_erasers =
1383 {
1384 {
1385 .eraseblocks = {
1386 {32 * 1024, 1},
1387 {16 * 1024, 1},
1388 {8 * 1024, 1},
1389 {4 * 1024, 2},
1390 },
1391 .block_erase = spi_block_erase_d8,
1392 }, {
1393 .eraseblocks = { {64 * 1024, 1} },
1394 .block_erase = spi_block_erase_c7,
1395 }
1396 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001397 .write = spi_chip_write_256,
1398 .read = spi_chip_read,
1399 },
1400
1401 {
1402 .vendor = "Eon",
1403 .name = "EN25B10",
1404 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001405 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001406 .model_id = EN_25B10,
1407 .total_size = 128,
1408 .page_size = 256,
1409 .tested = TEST_UNTESTED,
1410 .probe = probe_spi_rdid,
1411 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001412 .block_erasers =
1413 {
1414 {
1415 .eraseblocks = {
1416 {4 * 1024, 2},
1417 {8 * 1024, 1},
1418 {16 * 1024, 1},
1419 {32 * 1024, 3},
1420 },
1421 .block_erase = spi_block_erase_d8,
1422 }, {
1423 .eraseblocks = { {128 * 1024, 1} },
1424 .block_erase = spi_block_erase_c7,
1425 }
1426 },
1427 .write = spi_chip_write_256,
1428 .read = spi_chip_read,
1429 },
1430
1431 {
1432 .vendor = "Eon",
1433 .name = "EN25B10T",
1434 .bustype = CHIP_BUSTYPE_SPI,
1435 .manufacture_id = EON_ID_NOPREFIX,
1436 .model_id = EN_25B10,
1437 .total_size = 128,
1438 .page_size = 256,
1439 .tested = TEST_UNTESTED,
1440 .probe = probe_spi_rdid,
1441 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001442 .block_erasers =
1443 {
1444 {
1445 .eraseblocks = {
1446 {32 * 1024, 3},
1447 {16 * 1024, 1},
1448 {8 * 1024, 1},
1449 {4 * 1024, 2},
1450 },
1451 .block_erase = spi_block_erase_d8,
1452 }, {
1453 .eraseblocks = { {128 * 1024, 1} },
1454 .block_erase = spi_block_erase_c7,
1455 }
1456 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001457 .write = spi_chip_write_256,
1458 .read = spi_chip_read,
1459 },
1460
1461 {
1462 .vendor = "Eon",
1463 .name = "EN25B20",
1464 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001465 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001466 .model_id = EN_25B20,
1467 .total_size = 256,
1468 .page_size = 256,
1469 .tested = TEST_UNTESTED,
1470 .probe = probe_spi_rdid,
1471 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001472 .block_erasers =
1473 {
1474 {
1475 .eraseblocks = {
1476 {4 * 1024, 2},
1477 {8 * 1024, 1},
1478 {16 * 1024, 1},
1479 {32 * 1024, 1},
1480 {64 * 1024, 3}
1481 },
1482 .block_erase = spi_block_erase_d8,
1483 }, {
1484 .eraseblocks = { {256 * 1024, 1} },
1485 .block_erase = spi_block_erase_c7,
1486 }
1487 },
1488 .write = spi_chip_write_256,
1489 .read = spi_chip_read,
1490 },
1491
1492 {
1493 .vendor = "Eon",
1494 .name = "EN25B20T",
1495 .bustype = CHIP_BUSTYPE_SPI,
1496 .manufacture_id = EON_ID_NOPREFIX,
1497 .model_id = EN_25B20,
1498 .total_size = 256,
1499 .page_size = 256,
1500 .tested = TEST_UNTESTED,
1501 .probe = probe_spi_rdid,
1502 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001503 .block_erasers =
1504 {
1505 {
1506 .eraseblocks = {
1507 {64 * 1024, 3},
1508 {32 * 1024, 1},
1509 {16 * 1024, 1},
1510 {8 * 1024, 1},
1511 {4 * 1024, 2},
1512 },
1513 .block_erase = spi_block_erase_d8,
1514 }, {
1515 .eraseblocks = { {256 * 1024, 1} },
1516 .block_erase = spi_block_erase_c7,
1517 }
1518 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001519 .write = spi_chip_write_256,
1520 .read = spi_chip_read,
1521 },
1522
1523 {
1524 .vendor = "Eon",
1525 .name = "EN25B40",
1526 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001527 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001528 .model_id = EN_25B40,
1529 .total_size = 512,
1530 .page_size = 256,
1531 .tested = TEST_UNTESTED,
1532 .probe = probe_spi_rdid,
1533 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001534 .block_erasers =
1535 {
1536 {
1537 .eraseblocks = {
1538 {4 * 1024, 2},
1539 {8 * 1024, 1},
1540 {16 * 1024, 1},
1541 {32 * 1024, 1},
1542 {64 * 1024, 7}
1543 },
1544 .block_erase = spi_block_erase_d8,
1545 }, {
1546 .eraseblocks = { {512 * 1024, 1} },
1547 .block_erase = spi_block_erase_c7,
1548 }
1549 },
1550 .write = spi_chip_write_256,
1551 .read = spi_chip_read,
1552 },
1553
1554 {
1555 .vendor = "Eon",
1556 .name = "EN25B40T",
1557 .bustype = CHIP_BUSTYPE_SPI,
1558 .manufacture_id = EON_ID_NOPREFIX,
1559 .model_id = EN_25B40,
1560 .total_size = 512,
1561 .page_size = 256,
1562 .tested = TEST_UNTESTED,
1563 .probe = probe_spi_rdid,
1564 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001565 .block_erasers =
1566 {
1567 {
1568 .eraseblocks = {
1569 {64 * 1024, 7},
1570 {32 * 1024, 1},
1571 {16 * 1024, 1},
1572 {8 * 1024, 1},
1573 {4 * 1024, 2},
1574 },
1575 .block_erase = spi_block_erase_d8,
1576 }, {
1577 .eraseblocks = { {512 * 1024, 1} },
1578 .block_erase = spi_block_erase_c7,
1579 }
1580 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001581 .write = spi_chip_write_256,
1582 .read = spi_chip_read,
1583 },
1584
1585 {
1586 .vendor = "Eon",
1587 .name = "EN25B80",
1588 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001589 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001590 .model_id = EN_25B80,
1591 .total_size = 1024,
1592 .page_size = 256,
1593 .tested = TEST_UNTESTED,
1594 .probe = probe_spi_rdid,
1595 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001596 .block_erasers =
1597 {
1598 {
1599 .eraseblocks = {
1600 {4 * 1024, 2},
1601 {8 * 1024, 1},
1602 {16 * 1024, 1},
1603 {32 * 1024, 1},
1604 {64 * 1024, 15}
1605 },
1606 .block_erase = spi_block_erase_d8,
1607 }, {
1608 .eraseblocks = { {1024 * 1024, 1} },
1609 .block_erase = spi_block_erase_c7,
1610 }
1611 },
1612 .write = spi_chip_write_256,
1613 .read = spi_chip_read,
1614 },
1615
1616 {
1617 .vendor = "Eon",
1618 .name = "EN25B80T",
1619 .bustype = CHIP_BUSTYPE_SPI,
1620 .manufacture_id = EON_ID_NOPREFIX,
1621 .model_id = EN_25B80,
1622 .total_size = 1024,
1623 .page_size = 256,
1624 .tested = TEST_UNTESTED,
1625 .probe = probe_spi_rdid,
1626 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001627 .block_erasers =
1628 {
1629 {
1630 .eraseblocks = {
1631 {64 * 1024, 15},
1632 {32 * 1024, 1},
1633 {16 * 1024, 1},
1634 {8 * 1024, 1},
1635 {4 * 1024, 2},
1636 },
1637 .block_erase = spi_block_erase_d8,
1638 }, {
1639 .eraseblocks = { {1024 * 1024, 1} },
1640 .block_erase = spi_block_erase_c7,
1641 }
1642 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001643 .write = spi_chip_write_256,
1644 .read = spi_chip_read,
1645 },
1646
1647 {
1648 .vendor = "Eon",
1649 .name = "EN25B16",
1650 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001651 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001652 .model_id = EN_25B16,
1653 .total_size = 2048,
1654 .page_size = 256,
1655 .tested = TEST_UNTESTED,
1656 .probe = probe_spi_rdid,
1657 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001658 .block_erasers =
1659 {
1660 {
1661 .eraseblocks = {
1662 {4 * 1024, 2},
1663 {8 * 1024, 1},
1664 {16 * 1024, 1},
1665 {32 * 1024, 1},
1666 {64 * 1024, 31},
1667 },
1668 .block_erase = spi_block_erase_d8,
1669 }, {
1670 .eraseblocks = { {2 * 1024 * 1024, 1} },
1671 .block_erase = spi_block_erase_c7,
1672 }
1673 },
1674 .write = spi_chip_write_256,
1675 .read = spi_chip_read,
1676 },
1677
1678 {
1679 .vendor = "Eon",
1680 .name = "EN25B16T",
1681 .bustype = CHIP_BUSTYPE_SPI,
1682 .manufacture_id = EON_ID_NOPREFIX,
1683 .model_id = EN_25B16,
1684 .total_size = 2048,
1685 .page_size = 256,
1686 .tested = TEST_UNTESTED,
1687 .probe = probe_spi_rdid,
1688 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001689 .block_erasers =
1690 {
1691 {
1692 .eraseblocks = {
1693 {64 * 1024, 31},
1694 {32 * 1024, 1},
1695 {16 * 1024, 1},
1696 {8 * 1024, 1},
1697 {4 * 1024, 2},
1698 },
1699 .block_erase = spi_block_erase_d8,
1700 }, {
1701 .eraseblocks = { {2 * 1024 * 1024, 1} },
1702 .block_erase = spi_block_erase_c7,
1703 }
1704 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001705 .write = spi_chip_write_256,
1706 .read = spi_chip_read,
1707 },
1708
1709 {
1710 .vendor = "Eon",
1711 .name = "EN25B32",
1712 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001713 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001714 .model_id = EN_25B32,
1715 .total_size = 4096,
1716 .page_size = 256,
1717 .tested = TEST_UNTESTED,
1718 .probe = probe_spi_rdid,
1719 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001720 .block_erasers =
1721 {
1722 {
1723 .eraseblocks = {
1724 {4 * 1024, 2},
1725 {8 * 1024, 1},
1726 {16 * 1024, 1},
1727 {32 * 1024, 1},
1728 {64 * 1024, 63},
1729 },
1730 .block_erase = spi_block_erase_d8,
1731 }, {
1732 .eraseblocks = { {4 * 1024 * 1024, 1} },
1733 .block_erase = spi_block_erase_c7,
1734 }
1735 },
1736 .write = spi_chip_write_256,
1737 .read = spi_chip_read,
1738 },
1739
1740 {
1741 .vendor = "Eon",
1742 .name = "EN25B32T",
1743 .bustype = CHIP_BUSTYPE_SPI,
1744 .manufacture_id = EON_ID_NOPREFIX,
1745 .model_id = EN_25B32,
1746 .total_size = 4096,
1747 .page_size = 256,
1748 .tested = TEST_UNTESTED,
1749 .probe = probe_spi_rdid,
1750 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001751 .block_erasers =
1752 {
1753 {
1754 .eraseblocks = {
1755 {64 * 1024, 63},
1756 {32 * 1024, 1},
1757 {16 * 1024, 1},
1758 {8 * 1024, 1},
1759 {4 * 1024, 2},
1760 },
1761 .block_erase = spi_block_erase_d8,
1762 }, {
1763 .eraseblocks = { {4 * 1024 * 1024, 1} },
1764 .block_erase = spi_block_erase_c7,
1765 }
1766 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001767 .write = spi_chip_write_256,
1768 .read = spi_chip_read,
1769 },
1770
1771 {
1772 .vendor = "Eon",
1773 .name = "EN25B64",
1774 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001775 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001776 .model_id = EN_25B64,
1777 .total_size = 8192,
1778 .page_size = 256,
1779 .tested = TEST_UNTESTED,
1780 .probe = probe_spi_rdid,
1781 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001782 .block_erasers =
1783 {
1784 {
1785 .eraseblocks = {
1786 {4 * 1024, 2},
1787 {8 * 1024, 1},
1788 {16 * 1024, 1},
1789 {32 * 1024, 1},
1790 {64 * 1024, 127},
1791 },
1792 .block_erase = spi_block_erase_d8,
1793 }, {
1794 .eraseblocks = { {8 * 1024 * 1024, 1} },
1795 .block_erase = spi_block_erase_c7,
1796 }
1797 },
1798 .write = spi_chip_write_256,
1799 .read = spi_chip_read,
1800 },
1801
1802 {
1803 .vendor = "Eon",
1804 .name = "EN25B64T",
1805 .bustype = CHIP_BUSTYPE_SPI,
1806 .manufacture_id = EON_ID_NOPREFIX,
1807 .model_id = EN_25B64,
1808 .total_size = 8192,
1809 .page_size = 256,
1810 .tested = TEST_UNTESTED,
1811 .probe = probe_spi_rdid,
1812 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001813 .block_erasers =
1814 {
1815 {
1816 .eraseblocks = {
1817 {64 * 1024, 127},
1818 {32 * 1024, 1},
1819 {16 * 1024, 1},
1820 {8 * 1024, 1},
1821 {4 * 1024, 2},
1822 },
1823 .block_erase = spi_block_erase_d8,
1824 }, {
1825 .eraseblocks = { {8 * 1024 * 1024, 1} },
1826 .block_erase = spi_block_erase_c7,
1827 }
1828 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001829 .write = spi_chip_write_256,
1830 .read = spi_chip_read,
1831 },
1832
1833 {
1834 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001835 .name = "EN25D16",
1836 .bustype = CHIP_BUSTYPE_SPI,
1837 .manufacture_id = EON_ID_NOPREFIX,
1838 .model_id = EN_25D16,
1839 .total_size = 2048,
1840 .page_size = 256,
1841 .tested = TEST_UNTESTED,
1842 .probe = probe_spi_rdid,
1843 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001844 .block_erasers =
1845 {
1846 {
1847 .eraseblocks = { {4 * 1024, 512} },
1848 .block_erase = spi_block_erase_20,
1849 }, {
1850 .eraseblocks = { {64 * 1024, 32} },
1851 .block_erase = spi_block_erase_d8,
1852 }, {
1853 .eraseblocks = { {64 * 1024, 32} },
1854 .block_erase = spi_block_erase_52,
1855 }, {
1856 .eraseblocks = { {2 * 1024 * 1024, 1} },
1857 .block_erase = spi_block_erase_60,
1858 }, {
1859 .eraseblocks = { {2 * 1024 * 1024, 1} },
1860 .block_erase = spi_block_erase_c7,
1861 }
1862 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001863 .write = spi_chip_write_256,
1864 .read = spi_chip_read,
1865 },
1866
1867 {
1868 .vendor = "Eon",
1869 .name = "EN25F05",
1870 .bustype = CHIP_BUSTYPE_SPI,
1871 .manufacture_id = EON_ID_NOPREFIX,
1872 .model_id = EN_25F05,
1873 .total_size = 64,
1874 .page_size = 256,
1875 .tested = TEST_UNTESTED,
1876 .probe = probe_spi_rdid,
1877 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001878 .block_erasers =
1879 {
1880 {
1881 .eraseblocks = { {4 * 1024, 16} },
1882 .block_erase = spi_block_erase_20,
1883 }, {
1884 .eraseblocks = { {32 * 1024, 2} },
1885 .block_erase = spi_block_erase_d8,
1886 }, {
1887 .eraseblocks = { {32 * 1024, 2} },
1888 .block_erase = spi_block_erase_52,
1889 }, {
1890 .eraseblocks = { {64 * 1024, 1} },
1891 .block_erase = spi_block_erase_60,
1892 }, {
1893 .eraseblocks = { {64 * 1024, 1} },
1894 .block_erase = spi_block_erase_c7,
1895 }
1896 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001897 .write = spi_chip_write_256,
1898 .read = spi_chip_read,
1899 },
1900
1901 {
1902 .vendor = "Eon",
1903 .name = "EN25F10",
1904 .bustype = CHIP_BUSTYPE_SPI,
1905 .manufacture_id = EON_ID_NOPREFIX,
1906 .model_id = EN_25F10,
1907 .total_size = 128,
1908 .page_size = 256,
1909 .tested = TEST_UNTESTED,
1910 .probe = probe_spi_rdid,
1911 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001912 .block_erasers =
1913 {
1914 {
1915 .eraseblocks = { {4 * 1024, 32} },
1916 .block_erase = spi_block_erase_20,
1917 }, {
1918 .eraseblocks = { {32 * 1024, 4} },
1919 .block_erase = spi_block_erase_d8,
1920 }, {
1921 .eraseblocks = { {32 * 1024, 4} },
1922 .block_erase = spi_block_erase_52,
1923 }, {
1924 .eraseblocks = { {128 * 1024, 1} },
1925 .block_erase = spi_block_erase_60,
1926 }, {
1927 .eraseblocks = { {128 * 1024, 1} },
1928 .block_erase = spi_block_erase_c7,
1929 }
1930 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001931 .write = spi_chip_write_256,
1932 .read = spi_chip_read,
1933 },
1934
1935 {
1936 .vendor = "Eon",
1937 .name = "EN25F20",
1938 .bustype = CHIP_BUSTYPE_SPI,
1939 .manufacture_id = EON_ID_NOPREFIX,
1940 .model_id = EN_25F20,
1941 .total_size = 256,
1942 .page_size = 256,
1943 .tested = TEST_UNTESTED,
1944 .probe = probe_spi_rdid,
1945 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001946 .block_erasers =
1947 {
1948 {
1949 .eraseblocks = { {4 * 1024, 64} },
1950 .block_erase = spi_block_erase_20,
1951 }, {
1952 .eraseblocks = { {64 * 1024, 4} },
1953 .block_erase = spi_block_erase_d8,
1954 }, {
1955 .eraseblocks = { {64 * 1024, 4} },
1956 .block_erase = spi_block_erase_52,
1957 }, {
1958 .eraseblocks = { {256 * 1024, 1} },
1959 .block_erase = spi_block_erase_60,
1960 }, {
1961 .eraseblocks = { {256 * 1024, 1} },
1962 .block_erase = spi_block_erase_c7,
1963 }
1964 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001965 .write = spi_chip_write_256,
1966 .read = spi_chip_read,
1967 },
1968
1969 {
1970 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001971 .name = "EN25F40",
1972 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001973 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001974 .model_id = EN_25F40,
1975 .total_size = 512,
1976 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001977 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001978 .probe = probe_spi_rdid,
1979 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001980 .block_erasers =
1981 {
1982 {
Sean Nelson54596372010-01-09 05:30:14 +00001983 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001984 .block_erase = spi_block_erase_20,
1985 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001986 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001987 .block_erase = spi_block_erase_d8,
1988 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001989 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001990 .block_erase = spi_block_erase_60,
1991 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001992 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001993 .block_erase = spi_block_erase_c7,
1994 },
1995 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001996 .write = spi_chip_write_256,
1997 .read = spi_chip_read,
1998 },
1999
2000 {
2001 .vendor = "Eon",
2002 .name = "EN25F80",
2003 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002004 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002005 .model_id = EN_25F80,
2006 .total_size = 1024,
2007 .page_size = 256,
2008 .tested = TEST_UNTESTED,
2009 .probe = probe_spi_rdid,
2010 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002011 .block_erasers =
2012 {
2013 {
2014 .eraseblocks = { {4 * 1024, 256} },
2015 .block_erase = spi_block_erase_20,
2016 }, {
2017 .eraseblocks = { {64 * 1024, 16} },
2018 .block_erase = spi_block_erase_d8,
2019 }, {
2020 .eraseblocks = { {1024 * 1024, 1} },
2021 .block_erase = spi_block_erase_60,
2022 }, {
2023 .eraseblocks = { {1024 * 1024, 1} },
2024 .block_erase = spi_block_erase_c7,
2025 }
2026 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002027 .write = spi_chip_write_256,
2028 .read = spi_chip_read,
2029 },
2030
2031 {
2032 .vendor = "Eon",
2033 .name = "EN25F16",
2034 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002035 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002036 .model_id = EN_25F16,
2037 .total_size = 2048,
2038 .page_size = 256,
2039 .tested = TEST_UNTESTED,
2040 .probe = probe_spi_rdid,
2041 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002042 .block_erasers =
2043 {
2044 {
2045 .eraseblocks = { {4 * 1024, 512} },
2046 .block_erase = spi_block_erase_20,
2047 }, {
2048 .eraseblocks = { {64 * 1024, 32} },
2049 .block_erase = spi_block_erase_d8,
2050 }, {
2051 .eraseblocks = { {2 * 1024 * 1024, 1} },
2052 .block_erase = spi_block_erase_60,
2053 }, {
2054 .eraseblocks = { {2 * 1024 * 1024, 1} },
2055 .block_erase = spi_block_erase_c7,
2056 }
2057 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002058 .write = spi_chip_write_256,
2059 .read = spi_chip_read,
2060 },
2061
2062 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002063 .vendor = "Eon",
2064 .name = "EN25F32",
2065 .bustype = CHIP_BUSTYPE_SPI,
2066 .manufacture_id = EON_ID_NOPREFIX,
2067 .model_id = EN_25F32,
2068 .total_size = 4096,
2069 .page_size = 256,
2070 .tested = TEST_UNTESTED,
2071 .probe = probe_spi_rdid,
2072 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002073 .block_erasers =
2074 {
2075 {
2076 .eraseblocks = { {4 * 1024, 1024} },
2077 .block_erase = spi_block_erase_20,
2078 }, {
2079 .eraseblocks = { {64 * 1024, 64} },
2080 .block_erase = spi_block_erase_d8,
2081 }, {
2082 .eraseblocks = { {4 * 1024 * 1024, 1} },
2083 .block_erase = spi_block_erase_60,
2084 }, {
2085 .eraseblocks = { {4 * 1024 * 1024, 1} },
2086 .block_erase = spi_block_erase_c7,
2087 }
2088 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002089 .write = spi_chip_write_256,
2090 .read = spi_chip_read,
2091 },
2092
2093 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002094 .vendor = "EON",
2095 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002096 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002097 .manufacture_id = EON_ID,
2098 .model_id = EN_29F002B,
2099 .total_size = 256,
2100 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002101 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002102 .tested = TEST_UNTESTED,
2103 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002104 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002105 .block_erasers =
2106 {
2107 {
2108 .eraseblocks = {
2109 {64 * 1024, 3},
2110 {32 * 1024, 1},
2111 {8 * 1024, 2},
2112 {16 * 1024, 1},
2113 },
2114 .block_erase = erase_sector_jedec,
2115 }, {
2116 .eraseblocks = { {256 * 1024, 1} },
2117 .block_erase = erase_chip_block_jedec,
2118 },
2119 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002120 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002121 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002122 },
2123
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002124 {
2125 .vendor = "EON",
2126 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002127 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002128 .manufacture_id = EON_ID,
2129 .model_id = EN_29F002T,
2130 .total_size = 256,
2131 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002132 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
2133 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002134 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002135 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002136 .block_erasers =
2137 {
2138 {
2139 .eraseblocks = {
2140 {16 * 1024, 1},
2141 {8 * 1024, 2},
2142 {32 * 1024, 1},
2143 {64 * 1024, 3},
2144 },
2145 .block_erase = erase_sector_jedec,
2146 }, {
2147 .eraseblocks = { {256 * 1024, 1} },
2148 .block_erase = erase_chip_block_jedec,
2149 },
2150 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002151 .write = write_jedec_1,
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 = "Fujitsu",
2157 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002158 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002159 .manufacture_id = FUJITSU_ID,
2160 .model_id = MBM29F004BC,
2161 .total_size = 512,
2162 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002163 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002164 .tested = TEST_UNTESTED,
2165 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002166 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002167 .block_erasers =
2168 {
2169 {
2170 .eraseblocks = {
2171 {16 * 1024, 1},
2172 {8 * 1024, 2},
2173 {32 * 1024, 1},
2174 {64 * 1024, 7},
2175 },
Sean Nelson35727f72010-01-28 23:55:12 +00002176 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002177 }, {
2178 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002179 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002180 },
2181 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002182 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002183 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002184 },
2185
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002186 {
2187 .vendor = "Fujitsu",
2188 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002189 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002190 .manufacture_id = FUJITSU_ID,
2191 .model_id = MBM29F004TC,
2192 .total_size = 512,
2193 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002194 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002195 .tested = TEST_UNTESTED,
2196 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002197 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002198 .block_erasers =
2199 {
2200 {
2201 .eraseblocks = {
2202 {64 * 1024, 7},
2203 {32 * 1024, 1},
2204 {8 * 1024, 2},
2205 {16 * 1024, 1},
2206 },
Sean Nelson35727f72010-01-28 23:55:12 +00002207 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002208 }, {
2209 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002210 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002211 },
2212 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002214 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002215 },
2216
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002217 {
Sean Nelson35727f72010-01-28 23:55:12 +00002218 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002219 .vendor = "Fujitsu",
2220 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002221 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002222 .manufacture_id = FUJITSU_ID,
2223 .model_id = MBM29F400BC,
2224 .total_size = 512,
2225 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002226 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002227 .tested = TEST_UNTESTED,
2228 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002229 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002230 .block_erasers =
2231 {
2232 {
2233 .eraseblocks = {
2234 {16 * 1024, 1},
2235 {8 * 1024, 2},
2236 {32 * 1024, 1},
2237 {64 * 1024, 7},
2238 },
2239 .block_erase = block_erase_m29f400bt,
2240 }, {
2241 .eraseblocks = { {512 * 1024, 1} },
2242 .block_erase = block_erase_chip_m29f400bt,
2243 },
2244 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002245 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002246 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002247 },
2248
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002249 {
2250 .vendor = "Fujitsu",
2251 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002252 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002253 .manufacture_id = FUJITSU_ID,
2254 .model_id = MBM29F400TC,
2255 .total_size = 512,
2256 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002257 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002258 .tested = TEST_UNTESTED,
2259 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002260 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002261 .block_erasers =
2262 {
2263 {
2264 .eraseblocks = {
2265 {64 * 1024, 7},
2266 {32 * 1024, 1},
2267 {8 * 1024, 2},
2268 {16 * 1024, 1},
2269 },
2270 .block_erase = block_erase_m29f400bt,
2271 }, {
2272 .eraseblocks = { {512 * 1024, 1} },
2273 .block_erase = block_erase_chip_m29f400bt,
2274 },
2275 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002276 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002277 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002278 },
2279
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002280 {
2281 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002282 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002283 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002284 .manufacture_id = INTEL_ID,
2285 .model_id = P28F001BXB,
2286 .total_size = 128,
2287 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelson35727f72010-01-28 23:55:12 +00002288 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002289 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002290 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002291 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002292 .block_erasers =
2293 {
2294 {
2295 .eraseblocks = {
2296 {8 * 1024, 1},
2297 {4 * 1024, 2},
2298 {112 * 1024, 1},
2299 },
2300 .block_erase = erase_82802ab_block,
2301 },
2302 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002303 .write = NULL,
2304 .read = read_memmapped,
2305 },
2306
2307 {
2308 .vendor = "Intel",
2309 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002310 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002311 .manufacture_id = INTEL_ID,
2312 .model_id = P28F001BXT,
2313 .total_size = 128,
2314 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelson35727f72010-01-28 23:55:12 +00002315 .feature_bits = 0,
2316 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002317 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002318 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002319 .block_erasers =
2320 {
2321 {
2322 .eraseblocks = {
2323 {112 * 1024, 1},
2324 {4 * 1024, 2},
2325 {8 * 1024, 1},
2326 },
2327 .block_erase = erase_82802ab_block,
2328 },
2329 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002330 .write = NULL,
2331 .read = read_memmapped,
2332 },
2333
2334 {
2335 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002336 .name = "28F004S5",
2337 .bustype = CHIP_BUSTYPE_PARALLEL,
2338 .manufacture_id = INTEL_ID,
2339 .model_id = E_28F004S5,
2340 .total_size = 512,
2341 .page_size = 256,
2342 .tested = TEST_UNTESTED,
2343 .probe = probe_82802ab,
2344 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2345 .erase = NULL,
2346 .block_erasers =
2347 {
2348 {
2349 .eraseblocks = { {64 * 1024, 8} },
2350 .block_erase = erase_82802ab_block,
2351 },
2352 },
2353 .write = write_82802ab,
2354 .read = read_memmapped,
2355 },
2356
2357 {
2358 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002359 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002360 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002361 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002362 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002363 .total_size = 512,
2364 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002365 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002366 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002367 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002368 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002369 .block_erasers =
2370 {
2371 {
2372 .eraseblocks = { {64 * 1024, 8} },
2373 .block_erase = erase_82802ab_block,
2374 },
2375 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002376 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002377 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002378 },
2379
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002380 {
2381 .vendor = "Intel",
2382 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002383 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002384 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002385 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002386 .total_size = 1024,
2387 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002388 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002389 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002390 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002391 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002392 .block_erasers =
2393 {
2394 {
2395 .eraseblocks = { {64 * 1024, 16} },
2396 .block_erase = erase_82802ab_block,
2397 },
2398 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002399 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002400 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002401 },
2402
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002403 {
2404 .vendor = "Macronix",
2405 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002406 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002407 .manufacture_id = MX_ID,
2408 .model_id = MX_25L512,
2409 .total_size = 64,
2410 .page_size = 256,
2411 .tested = TEST_UNTESTED,
2412 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002413 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002414 .block_erasers =
2415 {
2416 {
2417 .eraseblocks = { {4 * 1024, 16} },
2418 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002419 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002420 .eraseblocks = { {64 * 1024, 1} },
2421 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002422 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002423 .eraseblocks = { {64 * 1024, 1} },
2424 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002425 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002426 .eraseblocks = { {64 * 1024, 1} },
2427 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002428 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002429 .eraseblocks = { {64 * 1024, 1} },
2430 .block_erase = spi_block_erase_c7,
2431 },
2432 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002433 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002434 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002435 },
2436
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002437 {
2438 .vendor = "Macronix",
2439 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002440 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002441 .manufacture_id = MX_ID,
2442 .model_id = MX_25L1005,
2443 .total_size = 128,
2444 .page_size = 256,
2445 .tested = TEST_UNTESTED,
2446 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002447 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002448 .block_erasers =
2449 {
2450 {
2451 .eraseblocks = { {4 * 1024, 32} },
2452 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002453 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002454 .eraseblocks = { {64 * 1024, 2} },
2455 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002456 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002457 .eraseblocks = { {128 * 1024, 1} },
2458 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002459 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002460 .eraseblocks = { {128 * 1024, 1} },
2461 .block_erase = spi_block_erase_c7,
2462 },
2463 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002464 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002465 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002466 },
2467
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002468 {
2469 .vendor = "Macronix",
2470 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002471 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002472 .manufacture_id = MX_ID,
2473 .model_id = MX_25L2005,
2474 .total_size = 256,
2475 .page_size = 256,
2476 .tested = TEST_UNTESTED,
2477 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002478 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002479 .block_erasers =
2480 {
2481 {
2482 .eraseblocks = { {4 * 1024, 64} },
2483 .block_erase = spi_block_erase_20,
2484 }, {
2485 .eraseblocks = { {64 * 1024, 4} },
2486 .block_erase = spi_block_erase_52,
2487 }, {
2488 .eraseblocks = { {64 * 1024, 4} },
2489 .block_erase = spi_block_erase_d8,
2490 }, {
2491 .eraseblocks = { {256 * 1024, 1} },
2492 .block_erase = spi_block_erase_60,
2493 }, {
2494 .eraseblocks = { {256 * 1024, 1} },
2495 .block_erase = spi_block_erase_c7,
2496 },
2497 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002498 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002499 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002500 },
2501
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002502 {
2503 .vendor = "Macronix",
2504 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002505 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002506 .manufacture_id = MX_ID,
2507 .model_id = MX_25L4005,
2508 .total_size = 512,
2509 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002510 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002511 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002512 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002513 .block_erasers =
2514 {
2515 {
2516 .eraseblocks = { {4 * 1024, 128} },
2517 .block_erase = spi_block_erase_20,
2518 }, {
2519 .eraseblocks = { {64 * 1024, 8} },
2520 .block_erase = spi_block_erase_52,
2521 }, {
2522 .eraseblocks = { {64 * 1024, 8} },
2523 .block_erase = spi_block_erase_d8,
2524 }, {
2525 .eraseblocks = { {512 * 1024, 1} },
2526 .block_erase = spi_block_erase_60,
2527 }, {
2528 .eraseblocks = { {512 * 1024, 1} },
2529 .block_erase = spi_block_erase_c7,
2530 },
2531 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002532 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002533 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002534 },
2535
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002536 {
2537 .vendor = "Macronix",
2538 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002539 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002540 .manufacture_id = MX_ID,
2541 .model_id = MX_25L8005,
2542 .total_size = 1024,
2543 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002544 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002545 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002546 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002547 .block_erasers =
2548 {
2549 {
2550 .eraseblocks = { {4 * 1024, 256} },
2551 .block_erase = spi_block_erase_20,
2552 }, {
2553 .eraseblocks = { {64 * 1024, 16} },
2554 .block_erase = spi_block_erase_52,
2555 }, {
2556 .eraseblocks = { {64 * 1024, 16} },
2557 .block_erase = spi_block_erase_d8,
2558 }, {
2559 .eraseblocks = { {1024 * 1024, 1} },
2560 .block_erase = spi_block_erase_60,
2561 }, {
2562 .eraseblocks = { {1024 * 1024, 1} },
2563 .block_erase = spi_block_erase_c7,
2564 },
2565 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002566 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002567 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002568 },
2569
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002570 {
2571 .vendor = "Macronix",
2572 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002573 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002574 .manufacture_id = MX_ID,
2575 .model_id = MX_25L1605,
2576 .total_size = 2048,
2577 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002578 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002579 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002580 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002581 .block_erasers =
2582 {
2583 {
2584 .eraseblocks = { {4 * 1024, 512} },
2585 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2586 }, {
2587 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2588 .block_erase = spi_block_erase_52,
2589 }, {
2590 .eraseblocks = { {64 * 1024, 32} },
2591 .block_erase = spi_block_erase_d8,
2592 }, {
2593 .eraseblocks = { {2 * 1024 * 1024, 1} },
2594 .block_erase = spi_block_erase_60,
2595 }, {
2596 .eraseblocks = { {2 * 1024 * 1024, 1} },
2597 .block_erase = spi_block_erase_c7,
2598 },
2599 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002600 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002601 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002602 },
2603
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002604 {
2605 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002606 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002607 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002608 .manufacture_id = MX_ID,
2609 .model_id = MX_25L1635D,
2610 .total_size = 2048,
2611 .page_size = 256,
2612 .tested = TEST_UNTESTED,
2613 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002614 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002615 .block_erasers =
2616 {
2617 {
2618 .eraseblocks = { {4 * 1024, 512} },
2619 .block_erase = spi_block_erase_20,
2620 }, {
2621 .eraseblocks = { {64 * 1024, 32} },
2622 .block_erase = spi_block_erase_d8,
2623 }, {
2624 .eraseblocks = { {2 * 1024 * 1024, 1} },
2625 .block_erase = spi_block_erase_60,
2626 }, {
2627 .eraseblocks = { {2 * 1024 * 1024, 1} },
2628 .block_erase = spi_block_erase_c7,
2629 }
2630 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002631 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002632 .read = spi_chip_read,
2633 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002634
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002635 {
2636 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002637 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002638 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002639 .manufacture_id = MX_ID,
2640 .model_id = MX_25L3205,
2641 .total_size = 4096,
2642 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002643 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002644 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002645 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002646 .block_erasers =
2647 {
2648 {
2649 .eraseblocks = { {4 * 1024, 1024} },
2650 .block_erase = spi_block_erase_20,
2651 }, {
2652 .eraseblocks = { {4 * 1024, 1024} },
2653 .block_erase = spi_block_erase_d8,
2654 }, {
2655 .eraseblocks = { {4 * 1024 * 1024, 1} },
2656 .block_erase = spi_block_erase_60,
2657 }, {
2658 .eraseblocks = { {4 * 1024 * 1024, 1} },
2659 .block_erase = spi_block_erase_c7,
2660 },
2661 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002662 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002663 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002664 },
2665
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002666 {
2667 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002668 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002669 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002670 .manufacture_id = MX_ID,
2671 .model_id = MX_25L3235D,
2672 .total_size = 4096,
2673 .page_size = 256,
2674 .tested = TEST_UNTESTED,
2675 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002676 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002677 .block_erasers =
2678 {
2679 {
2680 .eraseblocks = { {4 * 1024, 1024} },
2681 .block_erase = spi_block_erase_20,
2682 }, {
2683 .eraseblocks = { {64 * 1024, 64} },
2684 .block_erase = spi_block_erase_d8,
2685 }, {
2686 .eraseblocks = { {4 * 1024 * 1024, 1} },
2687 .block_erase = spi_block_erase_60,
2688 }, {
2689 .eraseblocks = { {4 * 1024 * 1024, 1} },
2690 .block_erase = spi_block_erase_c7,
2691 }
2692 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002693 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002694 .read = spi_chip_read,
2695 },
2696
2697 {
2698 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002699 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002700 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002701 .manufacture_id = MX_ID,
2702 .model_id = MX_25L6405,
2703 .total_size = 8192,
2704 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002705 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002706 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002707 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002708 .block_erasers =
2709 {
2710 {
2711 .eraseblocks = { {64 * 1024, 128} },
2712 .block_erase = spi_block_erase_20,
2713 }, {
2714 .eraseblocks = { {64 * 1024, 128} },
2715 .block_erase = spi_block_erase_d8,
2716 }, {
2717 .eraseblocks = { {8 * 1024 * 1024, 1} },
2718 .block_erase = spi_block_erase_60,
2719 }, {
2720 .eraseblocks = { {8 * 1024 * 1024, 1} },
2721 .block_erase = spi_block_erase_c7,
2722 }
2723 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002724 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002725 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002726 },
2727
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002728 {
2729 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002730 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002731 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002732 .manufacture_id = MX_ID,
2733 .model_id = MX_25L12805,
2734 .total_size = 16384,
2735 .page_size = 256,
2736 .tested = TEST_UNTESTED,
2737 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002738 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002739 .block_erasers =
2740 {
2741 {
2742 .eraseblocks = { {4 * 1024, 4096} },
2743 .block_erase = spi_block_erase_20,
2744 }, {
2745 .eraseblocks = { {64 * 1024, 256} },
2746 .block_erase = spi_block_erase_d8,
2747 }, {
2748 .eraseblocks = { {16 * 1024 * 1024, 1} },
2749 .block_erase = spi_block_erase_60,
2750 }, {
2751 .eraseblocks = { {16 * 1024 * 1024, 1} },
2752 .block_erase = spi_block_erase_c7,
2753 }
2754 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002755 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002756 .read = spi_chip_read,
2757 },
2758
2759 {
2760 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002761 .name = "MX29F001B",
2762 .bustype = CHIP_BUSTYPE_PARALLEL,
2763 .manufacture_id = MX_ID,
2764 .model_id = MX_29F001B,
2765 .total_size = 128,
2766 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002767 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2768 .tested = TEST_UNTESTED,
2769 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002770 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002771 .block_erasers =
2772 {
2773 {
2774 .eraseblocks = {
2775 {8 * 1024, 1},
2776 {4 * 1024, 2},
2777 {8 * 1024, 2},
2778 {32 * 1024, 1},
2779 {64 * 1024, 1},
2780 },
Sean Nelson35727f72010-01-28 23:55:12 +00002781 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002782 }, {
2783 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002784 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002785 }
2786 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002787 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002788 .read = read_memmapped,
2789 },
2790
2791 {
2792 .vendor = "Macronix",
2793 .name = "MX29F001T",
2794 .bustype = CHIP_BUSTYPE_PARALLEL,
2795 .manufacture_id = MX_ID,
2796 .model_id = MX_29F001T,
2797 .total_size = 128,
2798 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002799 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2800 .tested = TEST_UNTESTED,
2801 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002802 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002803 .block_erasers =
2804 {
2805 {
2806 .eraseblocks = {
2807 {64 * 1024, 1},
2808 {32 * 1024, 1},
2809 {8 * 1024, 2},
2810 {4 * 1024, 2},
2811 {8 * 1024, 1},
2812 },
Sean Nelson35727f72010-01-28 23:55:12 +00002813 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002814 }, {
2815 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002816 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002817 }
2818 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002819 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002820 .read = read_memmapped,
2821 },
2822
2823 {
2824 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002825 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002826 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002827 .manufacture_id = MX_ID,
2828 .model_id = MX_29F002B,
2829 .total_size = 256,
2830 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002831 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002832 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002833 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002834 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002835 .block_erasers =
2836 {
2837 {
2838 .eraseblocks = {
2839 {16 * 1024, 1},
2840 {8 * 1024, 2},
2841 {32 * 1024, 1},
2842 {64 * 1024, 3},
2843 },
Sean Nelson35727f72010-01-28 23:55:12 +00002844 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002845 }, {
2846 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002847 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002848 },
2849 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002850 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002851 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002852 },
2853
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002854 {
2855 .vendor = "Macronix",
2856 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002857 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002858 .manufacture_id = MX_ID,
2859 .model_id = MX_29F002T,
2860 .total_size = 256,
2861 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002862 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2863 .tested = TEST_UNTESTED,
2864 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002865 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002866 .block_erasers =
2867 {
2868 {
2869 .eraseblocks = {
2870 {64 * 1024, 3},
2871 {32 * 1024, 1},
2872 {8 * 1024, 2},
2873 {16 * 1024, 1},
2874 },
Sean Nelson35727f72010-01-28 23:55:12 +00002875 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002876 }, {
2877 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002878 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002879 },
2880 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002881 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002882 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002883 },
2884
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002885 {
2886 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002887 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002888 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002889 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002890 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002891 .total_size = 512,
2892 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002893 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2894 .tested = TEST_UNTESTED,
2895 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002896 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002897 .block_erasers =
2898 {
2899 {
2900 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00002901 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002902 }, {
2903 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002904 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002905 },
2906 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002907 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002908 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002909 },
2910
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002911 {
2912 .vendor = "Numonyx",
2913 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002914 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002915 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002916 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002917 .total_size = 128,
2918 .page_size = 256,
2919 .tested = TEST_UNTESTED,
2920 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002921 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002922 .block_erasers =
2923 {
2924 {
2925 .eraseblocks = { {4 * 1024, 32} },
2926 .block_erase = spi_block_erase_20,
2927 }, {
2928 .eraseblocks = { {64 * 1024, 2} },
2929 .block_erase = spi_block_erase_d8,
2930 }, {
2931 .eraseblocks = { {128 * 1024, 1} },
2932 .block_erase = spi_block_erase_c7,
2933 }
2934 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002935 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002936 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002937 },
2938
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002939 {
2940 .vendor = "Numonyx",
2941 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002942 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002943 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002944 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002945 .total_size = 256,
2946 .page_size = 256,
2947 .tested = TEST_UNTESTED,
2948 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002949 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002950 .block_erasers =
2951 {
2952 {
2953 .eraseblocks = { {4 * 1024, 64} },
2954 .block_erase = spi_block_erase_20,
2955 }, {
2956 .eraseblocks = { {64 * 1024, 4} },
2957 .block_erase = spi_block_erase_d8,
2958 }, {
2959 .eraseblocks = { {256 * 1024, 1} },
2960 .block_erase = spi_block_erase_c7,
2961 }
2962 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002963 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002964 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002965 },
2966
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002967 {
2968 .vendor = "Numonyx",
2969 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002970 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002971 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002972 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00002973 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002974 .page_size = 256,
2975 .tested = TEST_UNTESTED,
2976 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002977 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002978 .block_erasers =
2979 {
2980 {
2981 .eraseblocks = { {4 * 1024, 128} },
2982 .block_erase = spi_block_erase_20,
2983 }, {
2984 .eraseblocks = { {64 * 1024, 8} },
2985 .block_erase = spi_block_erase_d8,
2986 }, {
2987 .eraseblocks = { {512 * 1024, 1} },
2988 .block_erase = spi_block_erase_c7,
2989 }
2990 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002991 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002992 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002993 },
2994
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002995 {
2996 .vendor = "Numonyx",
2997 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002998 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002999 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003000 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003001 .total_size = 1024,
3002 .page_size = 256,
3003 .tested = TEST_OK_PREW,
3004 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003005 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003006 .block_erasers =
3007 {
3008 {
3009 .eraseblocks = { {4 * 1024, 256} },
3010 .block_erase = spi_block_erase_20,
3011 }, {
3012 .eraseblocks = { {64 * 1024, 16} },
3013 .block_erase = spi_block_erase_d8,
3014 }, {
3015 .eraseblocks = { {1024 * 1024, 1} },
3016 .block_erase = spi_block_erase_c7,
3017 }
3018 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003019 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003020 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003021 },
3022
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003023 {
3024 .vendor = "Numonyx",
3025 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003026 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003027 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003028 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003029 .total_size = 2048,
3030 .page_size = 256,
3031 .tested = TEST_UNTESTED,
3032 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003033 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003034 .block_erasers =
3035 {
3036 {
3037 .eraseblocks = { {4 * 1024, 512} },
3038 .block_erase = spi_block_erase_20,
3039 }, {
3040 .eraseblocks = { {64 * 1024, 32} },
3041 .block_erase = spi_block_erase_d8,
3042 }, {
3043 .eraseblocks = { {2 * 1024 * 1024, 1} },
3044 .block_erase = spi_block_erase_c7,
3045 }
3046 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003047 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003048 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003049 },
3050
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003051 {
3052 .vendor = "PMC",
3053 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003054 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003055 .manufacture_id = PMC_ID,
3056 .model_id = PMC_25LV010,
3057 .total_size = 128,
3058 .page_size = 256,
3059 .tested = TEST_UNTESTED,
3060 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003061 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003062 .block_erasers =
3063 {
3064 {
3065 .eraseblocks = { {4 * 1024, 32} },
3066 .block_erase = spi_block_erase_d7,
3067 }, {
3068 .eraseblocks = { {32 * 1024, 4} },
3069 .block_erase = spi_block_erase_d8,
3070 }, {
3071 .eraseblocks = { {128 * 1024, 1} },
3072 .block_erase = spi_block_erase_c7,
3073 }
3074 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003075 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003076 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003077 },
3078
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003079 {
3080 .vendor = "PMC",
3081 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003082 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003083 .manufacture_id = PMC_ID,
3084 .model_id = PMC_25LV016B,
3085 .total_size = 2048,
3086 .page_size = 256,
3087 .tested = TEST_UNTESTED,
3088 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003089 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003090 .block_erasers =
3091 {
3092 {
3093 .eraseblocks = { {4 * 1024, 512} },
3094 .block_erase = spi_block_erase_d7,
3095 }, {
3096 .eraseblocks = { {4 * 1024, 512} },
3097 .block_erase = spi_block_erase_20,
3098 }, {
3099 .eraseblocks = { {64 * 1024, 32} },
3100 .block_erase = spi_block_erase_d8,
3101 }, {
3102 .eraseblocks = { {2 * 1024 * 1024, 1} },
3103 .block_erase = spi_block_erase_60,
3104 }, {
3105 .eraseblocks = { {2 * 1024 * 1024, 1} },
3106 .block_erase = spi_block_erase_c7,
3107 }
3108 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003109 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003110 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003111 },
3112
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003113 {
3114 .vendor = "PMC",
3115 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003116 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003117 .manufacture_id = PMC_ID,
3118 .model_id = PMC_25LV020,
3119 .total_size = 256,
3120 .page_size = 256,
3121 .tested = TEST_UNTESTED,
3122 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003123 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003124 .block_erasers =
3125 {
3126 {
3127 .eraseblocks = { {4 * 1024, 64} },
3128 .block_erase = spi_block_erase_d7,
3129 }, {
3130 .eraseblocks = { {64 * 1024, 4} },
3131 .block_erase = spi_block_erase_d8,
3132 }, {
3133 .eraseblocks = { {256 * 1024, 1} },
3134 .block_erase = spi_block_erase_c7,
3135 }
3136 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003137 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003138 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003139 },
3140
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003141 {
3142 .vendor = "PMC",
3143 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003144 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003145 .manufacture_id = PMC_ID,
3146 .model_id = PMC_25LV040,
3147 .total_size = 512,
3148 .page_size = 256,
3149 .tested = TEST_UNTESTED,
3150 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003151 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003152 .block_erasers =
3153 {
3154 {
3155 .eraseblocks = { {4 * 1024, 128} },
3156 .block_erase = spi_block_erase_d7,
3157 }, {
3158 .eraseblocks = { {64 * 1024, 8} },
3159 .block_erase = spi_block_erase_d8,
3160 }, {
3161 .eraseblocks = { {512 * 1024, 1} },
3162 .block_erase = spi_block_erase_c7,
3163 }
3164 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003165 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003166 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003167 },
3168
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003169 {
3170 .vendor = "PMC",
3171 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003172 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003173 .manufacture_id = PMC_ID,
3174 .model_id = PMC_25LV080B,
3175 .total_size = 1024,
3176 .page_size = 256,
3177 .tested = TEST_UNTESTED,
3178 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003179 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003180 .block_erasers =
3181 {
3182 {
3183 .eraseblocks = { {4 * 1024, 256} },
3184 .block_erase = spi_block_erase_d7,
3185 }, {
3186 .eraseblocks = { {4 * 1024, 256} },
3187 .block_erase = spi_block_erase_20,
3188 }, {
3189 .eraseblocks = { {64 * 1024, 16} },
3190 .block_erase = spi_block_erase_d8,
3191 }, {
3192 .eraseblocks = { {1024 * 1024, 1} },
3193 .block_erase = spi_block_erase_60,
3194 }, {
3195 .eraseblocks = { {1024 * 1024, 1} },
3196 .block_erase = spi_block_erase_c7,
3197 }
3198 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003199 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003200 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003201 },
3202
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003203 {
3204 .vendor = "PMC",
3205 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003206 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003207 .manufacture_id = PMC_ID,
3208 .model_id = PMC_25LV512,
3209 .total_size = 64,
3210 .page_size = 256,
3211 .tested = TEST_UNTESTED,
3212 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003213 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003214 .block_erasers =
3215 {
3216 {
3217 .eraseblocks = { {4 * 1024, 16} },
3218 .block_erase = spi_block_erase_d7,
3219 }, {
3220 .eraseblocks = { {32 * 1024, 2} },
3221 .block_erase = spi_block_erase_d8,
3222 }, {
3223 .eraseblocks = { {64 * 1024, 1} },
3224 .block_erase = spi_block_erase_c7,
3225 }
3226 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003227 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003228 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003229 },
3230
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003231 {
3232 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003233 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003234 .bustype = CHIP_BUSTYPE_PARALLEL,
3235 .manufacture_id = PMC_ID_NOPREFIX,
3236 .model_id = PMC_29F002T,
3237 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003238 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003239 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3240 .tested = TEST_UNTESTED,
3241 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003242 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003243 .block_erasers =
3244 {
3245 {
3246 .eraseblocks = {
3247 {128 * 1024, 1},
3248 {96 * 1024, 1},
3249 {8 * 1024, 2},
3250 {16 * 1024, 1},
3251 },
Sean Nelson35727f72010-01-28 23:55:12 +00003252 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003253 }, {
3254 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003255 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003256 },
3257 },
Sean Nelson35727f72010-01-28 23:55:12 +00003258 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003259 .read = read_memmapped,
3260 },
3261
3262 {
3263 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003264 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003265 .bustype = CHIP_BUSTYPE_PARALLEL,
3266 .manufacture_id = PMC_ID_NOPREFIX,
3267 .model_id = PMC_29F002B,
3268 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003269 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003270 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003271 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003272 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003273 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003274 .block_erasers =
3275 {
3276 {
3277 .eraseblocks = {
3278 {16 * 1024, 1},
3279 {8 * 1024, 2},
3280 {96 * 1024, 1},
3281 {128 * 1024, 1},
3282 },
Sean Nelson35727f72010-01-28 23:55:12 +00003283 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003284 }, {
3285 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003286 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003287 },
3288 },
Sean Nelson35727f72010-01-28 23:55:12 +00003289 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003290 .read = read_memmapped,
3291 },
3292
3293 {
3294 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003295 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003296 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003297 .manufacture_id = PMC_ID_NOPREFIX,
3298 .model_id = PMC_39F010,
3299 .total_size = 128,
3300 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003301 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3302 .tested = TEST_UNTESTED,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003303 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003304 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003305 .block_erasers =
3306 {
3307 {
3308 .eraseblocks = { {4 * 1024, 32} },
3309 .block_erase = erase_sector_jedec,
3310 }, {
3311 .eraseblocks = { {64 * 1024, 2} },
3312 .block_erase = erase_block_jedec,
3313 }, {
3314 .eraseblocks = { {128 * 1024, 1} },
3315 .block_erase = erase_chip_block_jedec,
3316 }
3317 },
Sean Nelson35727f72010-01-28 23:55:12 +00003318 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003319 .read = read_memmapped,
3320 },
3321
3322 {
3323 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003324 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003325 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003326 .manufacture_id = PMC_ID_NOPREFIX,
3327 .model_id = PMC_49FL002,
3328 .total_size = 256,
3329 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003330 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3331 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003332 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003333 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00003334 /* .erase = NULL, Was: erase_49fl00x */
Sean Nelson5643c072010-01-19 03:23:07 +00003335 .block_erasers =
3336 {
3337 {
3338 .eraseblocks = { {4 * 1024, 64} },
3339 .block_erase = erase_sector_jedec,
3340 }, {
3341 .eraseblocks = { {16 * 1024, 16} },
3342 .block_erase = erase_block_jedec,
3343 }, {
3344 .eraseblocks = { {256 * 1024, 1} },
3345 .block_erase = erase_chip_block_jedec,
3346 }
3347 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003348 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003349 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003350 },
3351
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003352 {
3353 .vendor = "PMC",
3354 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003355 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003356 .manufacture_id = PMC_ID_NOPREFIX,
3357 .model_id = PMC_49FL004,
3358 .total_size = 512,
3359 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003360 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3361 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003362 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003363 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00003364 /* .erase = NULL, Was: erase_49fl00x */
Sean Nelson5643c072010-01-19 03:23:07 +00003365 .block_erasers =
3366 {
3367 {
3368 .eraseblocks = { {4 * 1024, 128} },
3369 .block_erase = erase_sector_jedec,
3370 }, {
3371 .eraseblocks = { {64 * 1024, 8} },
3372 .block_erase = erase_block_jedec,
3373 }, {
3374 .eraseblocks = { {512 * 1024, 1} },
3375 .block_erase = erase_chip_block_jedec,
3376 }
3377 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003378 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003379 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003380 },
3381
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003382 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003383 .vendor = "Sanyo",
3384 .name = "LF25FW203A",
3385 .bustype = CHIP_BUSTYPE_SPI,
3386 .manufacture_id = SANYO_ID,
3387 .model_id = SANYO_LE25FW203A,
3388 .total_size = 2048,
3389 .page_size = 256,
3390 .tested = TEST_UNTESTED,
3391 .probe = probe_spi_rdid,
3392 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003393 .block_erasers =
3394 {
3395 {
3396 .eraseblocks = { {64 * 1024, 32} },
3397 .block_erase = spi_block_erase_d8,
3398 }, {
3399 .eraseblocks = { {2 * 1024 * 1024, 1} },
3400 .block_erase = spi_block_erase_c7,
3401 }
3402 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003403 .write = spi_chip_write_256,
3404 .read = spi_chip_read,
3405 },
3406
3407 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003408 .vendor = "Sharp",
3409 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003410 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003411 .manufacture_id = SHARP_ID,
3412 .model_id = SHARP_LHF00L04,
3413 .total_size = 1024,
3414 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003415 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003416 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003417 .probe = probe_49lfxxxc,
3418 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003419 .block_erasers =
3420 {
3421 {
3422 .eraseblocks = {
3423 {64 * 1024, 15},
3424 {8 * 1024, 8}
3425 },
3426 .block_erase = erase_lhf00l04_block,
3427 }, {
3428 .eraseblocks = {
3429 {1024 * 1024, 1}
3430 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003431 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003432 },
3433 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003434 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003435 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003436 },
3437
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003438 {
3439 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003440 .name = "S25FL008A",
3441 .bustype = CHIP_BUSTYPE_SPI,
3442 .manufacture_id = SPANSION_ID,
3443 .model_id = SPANSION_S25FL008A,
3444 .total_size = 1024,
3445 .page_size = 256,
3446 .tested = TEST_OK_PREW,
3447 .probe = probe_spi_rdid,
3448 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003449 .block_erasers =
3450 {
3451 {
3452 .eraseblocks = { {64 * 1024, 16} },
3453 .block_erase = spi_block_erase_d8,
3454 }, {
3455 .eraseblocks = { {1024 * 1024, 1} },
3456 .block_erase = spi_block_erase_c7,
3457 }
3458 },
3459 .write = spi_chip_write_256,
3460 .read = spi_chip_read,
3461 },
3462
3463 {
3464 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003465 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003466 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003467 .manufacture_id = SPANSION_ID,
3468 .model_id = SPANSION_S25FL016A,
3469 .total_size = 2048,
3470 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003471 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003472 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003473 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003474 .block_erasers =
3475 {
3476 {
3477 .eraseblocks = { {64 * 1024, 32} },
3478 .block_erase = spi_block_erase_d8,
3479 }, {
3480 .eraseblocks = { {2 * 1024 * 1024, 1} },
3481 .block_erase = spi_block_erase_c7,
3482 }
3483 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003484 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003485 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003486 },
3487
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003488 {
3489 .vendor = "SST",
3490 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003491 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003492 .manufacture_id = SST_ID,
3493 .model_id = SST_25VF016B,
3494 .total_size = 2048,
3495 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003496 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003497 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003498 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003499 .block_erasers =
3500 {
3501 {
3502 .eraseblocks = { {4 * 1024, 512} },
3503 .block_erase = spi_block_erase_20,
3504 }, {
3505 .eraseblocks = { {32 * 1024, 64} },
3506 .block_erase = spi_block_erase_52,
3507 }, {
3508 .eraseblocks = { {64 * 1024, 32} },
3509 .block_erase = spi_block_erase_d8,
3510 }, {
3511 .eraseblocks = { {2 * 1024 * 1024, 1} },
3512 .block_erase = spi_block_erase_60,
3513 }, {
3514 .eraseblocks = { {2 * 1024 * 1024, 1} },
3515 .block_erase = spi_block_erase_c7,
3516 },
3517 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003518 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003519 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003520 },
3521
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003522 {
3523 .vendor = "SST",
3524 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003525 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003526 .manufacture_id = SST_ID,
3527 .model_id = SST_25VF032B,
3528 .total_size = 4096,
3529 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003530 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003531 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003532 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003533 .block_erasers =
3534 {
3535 {
3536 .eraseblocks = { {4 * 1024, 1024} },
3537 .block_erase = spi_block_erase_20,
3538 }, {
3539 .eraseblocks = { {32 * 1024, 128} },
3540 .block_erase = spi_block_erase_52,
3541 }, {
3542 .eraseblocks = { {64 * 1024, 64} },
3543 .block_erase = spi_block_erase_d8,
3544 }, {
3545 .eraseblocks = { {4 * 1024 * 1024, 1} },
3546 .block_erase = spi_block_erase_60,
3547 }, {
3548 .eraseblocks = { {4 * 1024 * 1024, 1} },
3549 .block_erase = spi_block_erase_c7,
3550 },
3551 },
3552 .write = spi_chip_write_1,
3553 .read = spi_chip_read,
3554 },
3555
3556 {
3557 .vendor = "SST",
3558 .name = "SST25VF040.REMS",
3559 .bustype = CHIP_BUSTYPE_SPI,
3560 .manufacture_id = SST_ID,
3561 .model_id = SST_25VF040_REMS,
3562 .total_size = 512,
3563 .page_size = 256,
3564 .tested = TEST_OK_PR,
3565 .probe = probe_spi_rems,
3566 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003567 .block_erasers =
3568 {
3569 {
3570 .eraseblocks = { {4 * 1024, 128} },
3571 .block_erase = spi_block_erase_20,
3572 }, {
3573 .eraseblocks = { {32 * 1024, 16} },
3574 .block_erase = spi_block_erase_52,
3575 }, {
3576 .eraseblocks = { {512 * 1024, 1} },
3577 .block_erase = spi_block_erase_60,
3578 },
3579 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003580 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003581 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003582 },
3583
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003584 {
3585 .vendor = "SST",
3586 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003587 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003588 .manufacture_id = SST_ID,
3589 .model_id = SST_25VF040B,
3590 .total_size = 512,
3591 .page_size = 256,
3592 .tested = TEST_UNTESTED,
3593 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003594 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003595 .block_erasers =
3596 {
3597 {
3598 .eraseblocks = { {4 * 1024, 128} },
3599 .block_erase = spi_block_erase_20,
3600 }, {
3601 .eraseblocks = { {32 * 1024, 16} },
3602 .block_erase = spi_block_erase_52,
3603 }, {
3604 .eraseblocks = { {64 * 1024, 8} },
3605 .block_erase = spi_block_erase_d8,
3606 }, {
3607 .eraseblocks = { {512 * 1024, 1} },
3608 .block_erase = spi_block_erase_60,
3609 }, {
3610 .eraseblocks = { {512 * 1024, 1} },
3611 .block_erase = spi_block_erase_c7,
3612 },
3613 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003614 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003615 .read = spi_chip_read,
3616 },
3617
3618 {
3619 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003620 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003621 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003622 .manufacture_id = SST_ID,
3623 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003624 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003625 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003626 .tested = TEST_OK_PR,
3627 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003628 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003629 .block_erasers =
3630 {
3631 {
3632 .eraseblocks = { {4 * 1024, 128} },
3633 .block_erase = spi_block_erase_20,
3634 }, {
3635 .eraseblocks = { {32 * 1024, 16} },
3636 .block_erase = spi_block_erase_52,
3637 }, {
3638 .eraseblocks = { {64 * 1024, 8} },
3639 .block_erase = spi_block_erase_d8,
3640 }, {
3641 .eraseblocks = { {512 * 1024, 1} },
3642 .block_erase = spi_block_erase_60,
3643 }, {
3644 .eraseblocks = { {512 * 1024, 1} },
3645 .block_erase = spi_block_erase_c7,
3646 },
3647 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003648 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003649 .read = spi_chip_read,
3650 },
3651
3652 {
3653 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003654 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003655 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003656 .manufacture_id = SST_ID,
3657 .model_id = SST_25VF080B,
3658 .total_size = 1024,
3659 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003660 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003661 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003662 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003663 .block_erasers =
3664 {
3665 {
3666 .eraseblocks = { {4 * 1024, 256} },
3667 .block_erase = spi_block_erase_20,
3668 }, {
3669 .eraseblocks = { {32 * 1024, 32} },
3670 .block_erase = spi_block_erase_52,
3671 }, {
3672 .eraseblocks = { {64 * 1024, 16} },
3673 .block_erase = spi_block_erase_d8,
3674 }, {
3675 .eraseblocks = { {1024 * 1024, 1} },
3676 .block_erase = spi_block_erase_60,
3677 }, {
3678 .eraseblocks = { {1024 * 1024, 1} },
3679 .block_erase = spi_block_erase_c7,
3680 },
3681 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003682 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003683 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003684 },
3685
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003686 {
3687 .vendor = "SST",
3688 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003689 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003690 .manufacture_id = SST_ID,
3691 .model_id = SST_28SF040,
3692 .total_size = 512,
3693 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003694 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003695 .tested = TEST_UNTESTED,
3696 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003697 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003698 .block_erasers =
3699 {
3700 {
3701 .eraseblocks = { {128, 4096} },
3702 .block_erase = erase_sector_28sf040,
3703 }, {
3704 .eraseblocks = { {512 * 1024, 1} },
3705 .block_erase = erase_chip_28sf040,
3706 }
3707 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003708 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003709 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003710 },
3711
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003712 {
3713 .vendor = "SST",
3714 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003715 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003716 .manufacture_id = SST_ID,
3717 .model_id = SST_29EE010,
3718 .total_size = 128,
3719 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003720 .feature_bits = FEATURE_LONG_RESET,
3721 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003722 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003723 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003724 .block_erasers =
3725 {
3726 {
3727 .eraseblocks = { {128 * 1024, 1} },
3728 .block_erase = erase_chip_block_jedec,
3729 }
3730 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003731 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003732 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003733 },
3734
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003735 {
3736 .vendor = "SST",
3737 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003738 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003739 .manufacture_id = SST_ID,
3740 .model_id = SST_29LE010,
3741 .total_size = 128,
3742 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003743 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003744 .tested = TEST_UNTESTED,
3745 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003746 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003747 .block_erasers =
3748 {
3749 {
3750 .eraseblocks = { {128 * 1024, 1} },
3751 .block_erase = erase_chip_block_jedec,
3752 }
3753 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003754 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003755 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003756 },
3757
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003758 {
3759 .vendor = "SST",
3760 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003761 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003762 .manufacture_id = SST_ID,
3763 .model_id = SST_29EE020A,
3764 .total_size = 256,
3765 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003766 .feature_bits = FEATURE_LONG_RESET,
3767 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003768 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003769 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003770 .block_erasers =
3771 {
3772 {
3773 .eraseblocks = { {256 * 1024, 1} },
3774 .block_erase = erase_chip_block_jedec,
3775 }
3776 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003777 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003778 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003779 },
3780
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003781 {
3782 .vendor = "SST",
3783 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003784 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003785 .manufacture_id = SST_ID,
3786 .model_id = SST_29LE020,
3787 .total_size = 256,
3788 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003789 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003790 .tested = TEST_UNTESTED,
3791 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003792 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003793 .block_erasers =
3794 {
3795 {
3796 .eraseblocks = { {256 * 1024, 1} },
3797 .block_erase = erase_chip_block_jedec,
3798 }
3799 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003800 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003801 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003802 },
3803
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003804 {
3805 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00003806 .name = "SST39SF512",
3807 .bustype = CHIP_BUSTYPE_PARALLEL,
3808 .manufacture_id = SST_ID,
3809 .model_id = SST_39SF512,
3810 .total_size = 64,
3811 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003812 .feature_bits = FEATURE_EITHER_RESET,
3813 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003814 .probe = probe_jedec,
3815 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00003816 .block_erasers =
3817 {
3818 {
3819 .eraseblocks = { {4 * 1024, 16} },
3820 .block_erase = erase_sector_jedec,
3821 }, {
3822 .eraseblocks = { {64 * 1024, 1} },
3823 .block_erase = erase_chip_block_jedec,
3824 }
3825 },
Sean Nelson35727f72010-01-28 23:55:12 +00003826 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003827 .read = read_memmapped,
3828 },
3829
3830 {
3831 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003832 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003833 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003834 .manufacture_id = SST_ID,
3835 .model_id = SST_39SF010,
3836 .total_size = 128,
3837 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003838 .feature_bits = FEATURE_EITHER_RESET,
3839 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003840 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003841 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003842 .block_erasers =
3843 {
3844 {
3845 .eraseblocks = { {4 * 1024, 32} },
3846 .block_erase = erase_sector_jedec,
3847 }, {
3848 .eraseblocks = { {128 * 1024, 1} },
3849 .block_erase = erase_chip_block_jedec,
3850 }
3851 },
Sean Nelson35727f72010-01-28 23:55:12 +00003852 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003853 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003854 },
3855
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003856 {
3857 .vendor = "SST",
3858 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003859 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003860 .manufacture_id = SST_ID,
3861 .model_id = SST_39SF020,
3862 .total_size = 256,
3863 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003864 .feature_bits = FEATURE_EITHER_RESET,
3865 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003866 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003867 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003868 .block_erasers =
3869 {
3870 {
3871 .eraseblocks = { {4 * 1024, 64} },
3872 .block_erase = erase_sector_jedec,
3873 }, {
3874 .eraseblocks = { {256 * 1024, 1} },
3875 .block_erase = erase_chip_block_jedec,
3876 }
3877 },
Sean Nelson35727f72010-01-28 23:55:12 +00003878 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003879 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003880 },
3881
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003882 {
3883 .vendor = "SST",
3884 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003885 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003886 .manufacture_id = SST_ID,
3887 .model_id = SST_39SF040,
3888 .total_size = 512,
3889 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003890 .feature_bits = FEATURE_EITHER_RESET,
3891 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003892 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003893 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003894 .block_erasers =
3895 {
3896 {
3897 .eraseblocks = { {4 * 1024, 128} },
3898 .block_erase = erase_sector_jedec,
3899 }, {
3900 .eraseblocks = { {512 * 1024, 1} },
3901 .block_erase = erase_chip_block_jedec,
3902 }
3903 },
Sean Nelson35727f72010-01-28 23:55:12 +00003904 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003905 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003906 },
3907
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003908 {
3909 .vendor = "SST",
3910 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00003911 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003912 .manufacture_id = SST_ID,
3913 .model_id = SST_39VF512,
3914 .total_size = 64,
3915 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003916 .feature_bits = FEATURE_EITHER_RESET,
3917 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003918 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003919 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00003920 .block_erasers =
3921 {
3922 {
3923 .eraseblocks = { {4 * 1024, 16} },
3924 .block_erase = erase_sector_jedec,
3925 }, {
3926 .eraseblocks = { {64 * 1024, 1} },
3927 .block_erase = erase_chip_block_jedec,
3928 }
3929 },
Sean Nelson35727f72010-01-28 23:55:12 +00003930 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003931 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003932 },
3933
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003934 {
3935 .vendor = "SST",
3936 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003937 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003938 .manufacture_id = SST_ID,
3939 .model_id = SST_39VF010,
3940 .total_size = 128,
3941 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003942 .feature_bits = FEATURE_EITHER_RESET,
3943 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003944 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003945 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003946 .block_erasers =
3947 {
3948 {
3949 .eraseblocks = { {4 * 1024, 32} },
3950 .block_erase = erase_sector_jedec,
3951 }, {
3952 .eraseblocks = { {128 * 1024, 1} },
3953 .block_erase = erase_chip_block_jedec,
3954 }
3955 },
Sean Nelson35727f72010-01-28 23:55:12 +00003956 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003957 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003958 },
3959
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003960 {
3961 .vendor = "SST",
3962 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003963 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003964 .manufacture_id = SST_ID,
3965 .model_id = SST_39VF020,
3966 .total_size = 256,
3967 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003968 .feature_bits = FEATURE_EITHER_RESET,
3969 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003970 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003971 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003972 .block_erasers =
3973 {
3974 {
3975 .eraseblocks = { {4 * 1024, 64} },
3976 .block_erase = erase_sector_jedec,
3977 }, {
3978 .eraseblocks = { {256 * 1024, 1} },
3979 .block_erase = erase_chip_block_jedec,
3980 }
3981 },
Sean Nelson35727f72010-01-28 23:55:12 +00003982 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003983 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003984 },
3985
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003986 {
3987 .vendor = "SST",
3988 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003989 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003990 .manufacture_id = SST_ID,
3991 .model_id = SST_39VF040,
3992 .total_size = 512,
3993 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003994 .feature_bits = FEATURE_EITHER_RESET,
3995 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003996 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003997 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003998 .block_erasers =
3999 {
4000 {
4001 .eraseblocks = { {4 * 1024, 128} },
4002 .block_erase = erase_sector_jedec,
4003 }, {
4004 .eraseblocks = { {512 * 1024, 1} },
4005 .block_erase = erase_chip_block_jedec,
4006 }
4007 },
Sean Nelson35727f72010-01-28 23:55:12 +00004008 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004009 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004010 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004011
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004012 {
4013 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004014 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004015 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004016 .manufacture_id = SST_ID,
4017 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004018 .total_size = 1024,
4019 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004020 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004021 .tested = TEST_UNTESTED,
4022 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004023 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004024 .block_erasers =
4025 {
4026 {
4027 .eraseblocks = { {4 * 1024, 256} },
4028 .block_erase = erase_sector_jedec,
4029 }, {
4030 .eraseblocks = { {64 * 1024, 16} },
4031 .block_erase = erase_block_jedec,
4032 }, {
4033 .eraseblocks = { {1024 * 1024, 1} },
4034 .block_erase = erase_chip_block_jedec,
4035 }
4036 },
Sean Nelson35727f72010-01-28 23:55:12 +00004037 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004038 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004039 },
4040
4041 {
4042 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004043 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004044 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004045 .manufacture_id = SST_ID,
4046 .model_id = SST_49LF002A,
4047 .total_size = 256,
4048 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004049 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004050 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004051 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004052 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004053 .block_erasers =
4054 {
4055 {
4056 .eraseblocks = { {4 * 1024, 64} },
4057 .block_erase = erase_sst_fwhub_sector,
4058 }, {
4059 .eraseblocks = { {16 * 1024, 16} },
4060 .block_erase = erase_sst_fwhub_block,
4061 }, {
4062 .eraseblocks = { {256 * 1024, 1} },
4063 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4064 }
4065 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004066 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004067 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004068 },
4069
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004070 {
4071 .vendor = "SST",
4072 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004073 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004074 .manufacture_id = SST_ID,
4075 .model_id = SST_49LF003A,
4076 .total_size = 384,
4077 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004078 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004079 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004080 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004081 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004082 .block_erasers =
4083 {
4084 {
4085 .eraseblocks = { {4 * 1024, 96} },
4086 .block_erase = erase_sst_fwhub_sector,
4087 }, {
4088 .eraseblocks = { {64 * 1024, 6} },
4089 .block_erase = erase_sst_fwhub_block,
4090 }, {
4091 .eraseblocks = { {384 * 1024, 1} },
4092 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4093 }
4094 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004095 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004096 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004097 },
4098
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004099 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004100 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4101 * and is only honored for 64k block erase, but not 4k sector erase.
4102 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004103 .vendor = "SST",
4104 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004105 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004106 .manufacture_id = SST_ID,
4107 .model_id = SST_49LF004A,
4108 .total_size = 512,
4109 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004110 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004111 .tested = TEST_OK_PREW,
4112 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004113 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004114 .block_erasers =
4115 {
4116 {
4117 .eraseblocks = { {4 * 1024, 128} },
4118 .block_erase = erase_sector_jedec, /* missing unlock */
4119 }, {
4120 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00004121 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004122 }, {
4123 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004124 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004125 },
4126 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004127 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004128 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004129 },
4130
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004131 {
4132 .vendor = "SST",
4133 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004134 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004135 .manufacture_id = SST_ID,
4136 .model_id = SST_49LF004C,
4137 .total_size = 512,
4138 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004139 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004140 .tested = TEST_UNTESTED,
4141 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004142 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004143 .block_erasers =
4144 {
4145 {
4146 .eraseblocks = { {4 * 1024, 128} },
4147 .block_erase = erase_sector_49lfxxxc,
4148 }, {
4149 .eraseblocks = {
4150 {64 * 1024, 7},
4151 {32 * 1024, 1},
4152 {8 * 1024, 2},
4153 {16 * 1024, 1},
4154 },
4155 .block_erase = erase_block_49lfxxxc,
4156 }
4157 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004158 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004159 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004160 },
4161
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004162 {
4163 .vendor = "SST",
4164 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004165 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004166 .manufacture_id = SST_ID,
4167 .model_id = SST_49LF008A,
4168 .total_size = 1024,
4169 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004170 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004171 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004172 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004173 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004174 .block_erasers =
4175 {
4176 {
4177 .eraseblocks = { {4 * 1024, 256} },
4178 .block_erase = erase_sst_fwhub_sector,
4179 }, {
4180 .eraseblocks = { {64 * 1024, 16} },
4181 .block_erase = erase_sst_fwhub_block,
4182 }, {
4183 .eraseblocks = { {1024 * 1024, 1} },
4184 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4185 }
4186 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004187 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004188 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004189 },
4190
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004191 {
4192 .vendor = "SST",
4193 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004194 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004195 .manufacture_id = SST_ID,
4196 .model_id = SST_49LF008C,
4197 .total_size = 1024,
4198 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004199 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004200 .tested = TEST_UNTESTED,
4201 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004202 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004203 .block_erasers =
4204 {
4205 {
4206 .eraseblocks = { {4 * 1024, 256} },
4207 .block_erase = erase_sector_49lfxxxc,
4208 }, {
4209 .eraseblocks = {
4210 {64 * 1024, 15},
4211 {32 * 1024, 1},
4212 {8 * 1024, 2},
4213 {16 * 1024, 1},
4214 },
4215 .block_erase = erase_block_49lfxxxc,
4216 }
4217 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004218 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004219 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004220 },
4221
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004222 {
4223 .vendor = "SST",
4224 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004225 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004226 .manufacture_id = SST_ID,
4227 .model_id = SST_49LF016C,
4228 .total_size = 2048,
4229 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004230 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004231 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004232 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004233 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004234 .block_erasers =
4235 {
4236 {
4237 .eraseblocks = { {4 * 1024, 512} },
4238 .block_erase = erase_sector_49lfxxxc,
4239 }, {
4240 .eraseblocks = {
4241 {64 * 1024, 31},
4242 {32 * 1024, 1},
4243 {8 * 1024, 2},
4244 {16 * 1024, 1},
4245 },
4246 .block_erase = erase_block_49lfxxxc,
4247 }
4248 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004249 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004250 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004251 },
4252
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004253 {
4254 .vendor = "SST",
4255 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004256 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004257 .manufacture_id = SST_ID,
4258 .model_id = SST_49LF020,
4259 .total_size = 256,
4260 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004261 .feature_bits = FEATURE_EITHER_RESET,
4262 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004263 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004264 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004265 .block_erasers =
4266 {
4267 {
4268 .eraseblocks = { {4 * 1024, 64} },
4269 .block_erase = erase_sector_jedec,
4270 }, {
4271 .eraseblocks = { {16 * 1024, 16} },
4272 .block_erase = erase_block_jedec,
4273 }, {
4274 .eraseblocks = { {256 * 1024, 1} },
4275 .block_erase = NULL,
4276 }
4277 },
Sean Nelson35727f72010-01-28 23:55:12 +00004278 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004279 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004280 },
4281
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004282 {
4283 .vendor = "SST",
4284 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004285 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004286 .manufacture_id = SST_ID,
4287 .model_id = SST_49LF020A,
4288 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004289 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004290 .feature_bits = FEATURE_EITHER_RESET,
4291 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004292 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004293 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004294 .block_erasers =
4295 {
4296 {
4297 .eraseblocks = { {4 * 1024, 64} },
4298 .block_erase = erase_sector_jedec,
4299 }, {
4300 .eraseblocks = { {16 * 1024, 16} },
4301 .block_erase = erase_block_jedec,
4302 }, {
4303 .eraseblocks = { {256 * 1024, 1} },
4304 .block_erase = NULL,
4305 }
4306 },
Sean Nelson35727f72010-01-28 23:55:12 +00004307 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004308 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004309 },
4310
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004311 {
4312 .vendor = "SST",
4313 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004314 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004315 .manufacture_id = SST_ID,
4316 .model_id = SST_49LF040,
4317 .total_size = 512,
4318 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004319 .feature_bits = FEATURE_EITHER_RESET,
4320 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004321 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004322 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004323 .block_erasers =
4324 {
4325 {
4326 .eraseblocks = { {4 * 1024, 128} },
4327 .block_erase = erase_sector_jedec,
4328 }, {
4329 .eraseblocks = { {64 * 1024, 8} },
4330 .block_erase = erase_block_jedec,
4331 }, {
4332 .eraseblocks = { {512 * 1024, 1} },
4333 .block_erase = NULL,
4334 }
4335 },
Sean Nelson35727f72010-01-28 23:55:12 +00004336 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004337 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004338 },
4339
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004340 {
4341 .vendor = "SST",
4342 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004343 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004344 .manufacture_id = SST_ID,
4345 .model_id = SST_49LF040B,
4346 .total_size = 512,
4347 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004348 .feature_bits = FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004349 .tested = TEST_UNTESTED,
4350 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004351 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004352 .block_erasers =
4353 {
4354 {
4355 .eraseblocks = { {4 * 1024, 128} },
4356 .block_erase = erase_sector_jedec,
4357 }, {
4358 .eraseblocks = { {64 * 1024, 8} },
4359 .block_erase = erase_block_jedec,
4360 }, {
4361 .eraseblocks = { {512 * 1024, 1} },
4362 .block_erase = NULL,
4363 }
4364 },
Sean Nelson35727f72010-01-28 23:55:12 +00004365 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004366 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004367 },
4368
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004369 {
4370 .vendor = "SST",
4371 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004372 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004373 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004374 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004375 .total_size = 1024,
4376 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004377 .feature_bits = FEATURE_EITHER_RESET,
4378 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004379 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004380 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004381 .block_erasers =
4382 {
4383 {
4384 .eraseblocks = { {4 * 1024, 256} },
4385 .block_erase = erase_sector_jedec,
4386 }, {
4387 .eraseblocks = { {64 * 1024, 16} },
4388 .block_erase = erase_block_jedec,
4389 }, {
4390 .eraseblocks = { {1024 * 1024, 1} },
4391 .block_erase = NULL,
4392 }
4393 },
Sean Nelson35727f72010-01-28 23:55:12 +00004394 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004395 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004396 },
4397
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004398 {
4399 .vendor = "SST",
4400 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004401 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004402 .manufacture_id = SST_ID,
4403 .model_id = SST_49LF160C,
4404 .total_size = 2048,
4405 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004406 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004407 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004408 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004409 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00004410 /* .erase = NULL, Was: erase_49flxxxc */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004411 .block_erasers =
4412 {
4413 {
4414 .eraseblocks = { {4 * 1024, 512} },
4415 .block_erase = erase_sector_49lfxxxc,
4416 }, {
4417 .eraseblocks = {
4418 {64 * 1024, 31},
4419 {32 * 1024, 1},
4420 {8 * 1024, 2},
4421 {16 * 1024, 1},
4422 },
4423 .block_erase = erase_block_49lfxxxc,
4424 }
4425 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004426 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004427 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004428 },
4429
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004430 {
4431 .vendor = "ST",
4432 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004433 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004434 .manufacture_id = ST_ID,
4435 .model_id = ST_M25P05A,
4436 .total_size = 64,
4437 .page_size = 256,
4438 .tested = TEST_UNTESTED,
4439 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004440 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004441 .block_erasers =
4442 {
4443 {
4444 .eraseblocks = { {32 * 1024, 2} },
4445 .block_erase = spi_block_erase_d8,
4446 }, {
4447 .eraseblocks = { {64 * 1024, 1} },
4448 .block_erase = spi_block_erase_c7,
4449 }
4450 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004451 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004452 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004453 },
4454
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004455 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4456 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
4457 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
4458 * only is successful if RDID does not work.
4459 */
4460 {
4461 .vendor = "ST",
4462 .name = "M25P05.RES",
4463 .bustype = CHIP_BUSTYPE_SPI,
4464 .manufacture_id = ST_ID,
4465 .model_id = ST_M25P05_RES,
4466 .total_size = 64,
4467 .page_size = 256,
4468 .tested = TEST_UNTESTED,
4469 .probe = probe_spi_res,
4470 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004471 .block_erasers =
4472 {
4473 {
4474 .eraseblocks = { {32 * 1024, 2} },
4475 .block_erase = spi_block_erase_d8,
4476 }, {
4477 .eraseblocks = { {64 * 1024, 1} },
4478 .block_erase = spi_block_erase_c7,
4479 }
4480 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004481 .write = spi_chip_write_1, /* 128 */
4482 .read = spi_chip_read,
4483 },
4484
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004485 {
4486 .vendor = "ST",
4487 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004488 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004489 .manufacture_id = ST_ID,
4490 .model_id = ST_M25P10A,
4491 .total_size = 128,
4492 .page_size = 256,
4493 .tested = TEST_UNTESTED,
4494 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004495 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004496 .block_erasers =
4497 {
4498 {
4499 .eraseblocks = { {32 * 1024, 4} },
4500 .block_erase = spi_block_erase_d8,
4501 }, {
4502 .eraseblocks = { {128 * 1024, 1} },
4503 .block_erase = spi_block_erase_c7,
4504 }
4505 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004506 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004507 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004508 },
4509
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004510 /* The ST M25P10 has the same problem as the M25P05. */
4511 {
4512 .vendor = "ST",
4513 .name = "M25P10.RES",
4514 .bustype = CHIP_BUSTYPE_SPI,
4515 .manufacture_id = ST_ID,
4516 .model_id = ST_M25P10_RES,
4517 .total_size = 128,
4518 .page_size = 256,
4519 .tested = TEST_UNTESTED,
4520 .probe = probe_spi_res,
4521 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004522 .block_erasers =
4523 {
4524 {
4525 .eraseblocks = { {32 * 1024, 4} },
4526 .block_erase = spi_block_erase_d8,
4527 }, {
4528 .eraseblocks = { {128 * 1024, 1} },
4529 .block_erase = spi_block_erase_c7,
4530 }
4531 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004532 .write = spi_chip_write_1, /* 128 */
4533 .read = spi_chip_read,
4534 },
4535
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004536 {
4537 .vendor = "ST",
4538 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004539 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004540 .manufacture_id = ST_ID,
4541 .model_id = ST_M25P20,
4542 .total_size = 256,
4543 .page_size = 256,
4544 .tested = TEST_UNTESTED,
4545 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004546 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004547 .block_erasers =
4548 {
4549 {
4550 .eraseblocks = { {64 * 1024, 4} },
4551 .block_erase = spi_block_erase_d8,
4552 }, {
4553 .eraseblocks = { {256 * 1024, 1} },
4554 .block_erase = spi_block_erase_c7,
4555 }
4556 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004557 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004558 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004559 },
4560
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004561 {
4562 .vendor = "ST",
4563 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004564 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004565 .manufacture_id = ST_ID,
4566 .model_id = ST_M25P40,
4567 .total_size = 512,
4568 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004569 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004570 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004571 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004572 .block_erasers =
4573 {
4574 {
4575 .eraseblocks = { {64 * 1024, 8} },
4576 .block_erase = spi_block_erase_d8,
4577 }, {
4578 .eraseblocks = { {512 * 1024, 1} },
4579 .block_erase = spi_block_erase_c7,
4580 }
4581 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004582 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004583 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004584 },
4585
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004586 {
4587 .vendor = "ST",
4588 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004589 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004590 .manufacture_id = ST_ID,
4591 .model_id = ST_M25P40_RES,
4592 .total_size = 512,
4593 .page_size = 256,
4594 .tested = TEST_UNTESTED,
4595 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004596 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004597 .block_erasers =
4598 {
4599 {
4600 .eraseblocks = { {64 * 1024, 8} },
4601 .block_erase = spi_block_erase_d8,
4602 }, {
4603 .eraseblocks = { {512 * 1024, 1} },
4604 .block_erase = spi_block_erase_c7,
4605 }
4606 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004607 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004608 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004609 },
4610
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004611 {
4612 .vendor = "ST",
4613 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004614 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004615 .manufacture_id = ST_ID,
4616 .model_id = ST_M25P80,
4617 .total_size = 1024,
4618 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004619 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004620 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004621 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004622 .block_erasers =
4623 {
4624 {
4625 .eraseblocks = { {64 * 1024, 16} },
4626 .block_erase = spi_block_erase_d8,
4627 }, {
4628 .eraseblocks = { {1024 * 1024, 1} },
4629 .block_erase = spi_block_erase_c7,
4630 }
4631 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004632 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004633 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004634 },
4635
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004636 {
4637 .vendor = "ST",
4638 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004639 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004640 .manufacture_id = ST_ID,
4641 .model_id = ST_M25P16,
4642 .total_size = 2048,
4643 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004644 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004645 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004646 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004647 .block_erasers =
4648 {
4649 {
4650 .eraseblocks = { {64 * 1024, 32} },
4651 .block_erase = spi_block_erase_d8,
4652 }, {
4653 .eraseblocks = { {2 * 1024 * 1024, 1} },
4654 .block_erase = spi_block_erase_c7,
4655 }
4656 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004657 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004658 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004659 },
4660
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004661 {
4662 .vendor = "ST",
4663 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004664 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004665 .manufacture_id = ST_ID,
4666 .model_id = ST_M25P32,
4667 .total_size = 4096,
4668 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004669 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004670 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004671 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004672 .block_erasers =
4673 {
4674 {
4675 .eraseblocks = { {64 * 1024, 64} },
4676 .block_erase = spi_block_erase_d8,
4677 }, {
4678 .eraseblocks = { {4 * 1024 * 1024, 1} },
4679 .block_erase = spi_block_erase_c7,
4680 }
4681 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004682 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004683 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004684 },
4685
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004686 {
4687 .vendor = "ST",
4688 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004689 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004690 .manufacture_id = ST_ID,
4691 .model_id = ST_M25P64,
4692 .total_size = 8192,
4693 .page_size = 256,
4694 .tested = TEST_UNTESTED,
4695 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004696 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004697 .block_erasers =
4698 {
4699 {
4700 .eraseblocks = { {64 * 1024, 128} },
4701 .block_erase = spi_block_erase_d8,
4702 }, {
4703 .eraseblocks = { {8 * 1024 * 1024, 1} },
4704 .block_erase = spi_block_erase_c7,
4705 }
4706 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004707 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004708 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004709 },
4710
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004711 {
4712 .vendor = "ST",
4713 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004714 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004715 .manufacture_id = ST_ID,
4716 .model_id = ST_M25P128,
4717 .total_size = 16384,
4718 .page_size = 256,
4719 .tested = TEST_UNTESTED,
4720 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004721 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004722 .block_erasers =
4723 {
4724 {
4725 .eraseblocks = { {256 * 1024, 64} },
4726 .block_erase = spi_block_erase_d8,
4727 }, {
4728 .eraseblocks = { {16 * 1024 * 1024, 1} },
4729 .block_erase = spi_block_erase_c7,
4730 }
4731 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004732 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004733 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004734 },
4735
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004736 {
4737 .vendor = "ST",
4738 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004739 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004740 .manufacture_id = ST_ID,
4741 .model_id = ST_M29F002B,
4742 .total_size = 256,
4743 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004744 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004745 .tested = TEST_UNTESTED,
4746 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004747 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004748 .block_erasers =
4749 {
4750 {
4751 .eraseblocks = {
4752 {16 * 1024, 1},
4753 {8 * 1024, 2},
4754 {32 * 1024, 1},
4755 {64 * 1024, 3},
4756 },
4757 .block_erase = erase_sector_jedec,
4758 }, {
4759 .eraseblocks = { {256 * 1024, 1} },
4760 .block_erase = erase_chip_block_jedec,
4761 }
4762 },
Sean Nelson35727f72010-01-28 23:55:12 +00004763 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004764 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004765 },
4766
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004767 {
4768 .vendor = "ST",
4769 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004770 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004771 .manufacture_id = ST_ID,
4772 .model_id = ST_M29F002T,
4773 .total_size = 256,
4774 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004775 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
4776 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004777 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004778 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004779 .block_erasers =
4780 {
4781 {
4782 .eraseblocks = {
4783 {64 * 1024, 3},
4784 {32 * 1024, 1},
4785 {8 * 1024, 2},
4786 {16 * 1024, 1},
4787 },
4788 .block_erase = erase_sector_jedec,
4789 }, {
4790 .eraseblocks = { {256 * 1024, 1} },
4791 .block_erase = erase_chip_block_jedec,
4792 }
4793 },
Sean Nelson35727f72010-01-28 23:55:12 +00004794 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004795 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004796 },
4797
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004798 {
4799 .vendor = "ST",
4800 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004801 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004802 .manufacture_id = ST_ID,
4803 .model_id = ST_M29F040B,
4804 .total_size = 512,
4805 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004806 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4807 .tested = TEST_UNTESTED,
4808 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004809 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004810 .block_erasers =
4811 {
4812 {
4813 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004814 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004815 }, {
4816 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004817 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004818 }
4819 },
Sean Nelson35727f72010-01-28 23:55:12 +00004820 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004821 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004822 },
4823
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004824 {
Sean Nelson35727f72010-01-28 23:55:12 +00004825 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004826 .vendor = "ST",
4827 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004828 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004829 .manufacture_id = ST_ID,
4830 .model_id = ST_M29F400BT,
4831 .total_size = 512,
4832 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004833 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004834 .tested = TEST_UNTESTED,
4835 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004836 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004837 .block_erasers =
4838 {
4839 {
4840 .eraseblocks = {
4841 {64 * 1024, 7},
4842 {32 * 1024, 1},
4843 {8 * 1024, 2},
4844 {16 * 1024, 1},
4845 },
4846 .block_erase = block_erase_m29f400bt,
4847 }, {
4848 .eraseblocks = { {512 * 1024, 1} },
4849 .block_erase = block_erase_chip_m29f400bt,
4850 }
4851 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004852 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004853 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004854 },
4855
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004856 {
4857 .vendor = "ST",
4858 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004859 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004860 .manufacture_id = ST_ID,
4861 .model_id = ST_M29W010B,
4862 .total_size = 128,
4863 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004864 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004865 .tested = TEST_UNTESTED,
4866 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004867 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004868 .block_erasers =
4869 {
4870 {
4871 .eraseblocks = { {16 * 1024, 8}, },
4872 .block_erase = erase_sector_jedec,
4873 }, {
4874 .eraseblocks = { {128 * 1024, 1} },
4875 .block_erase = erase_chip_block_jedec,
4876 }
4877 },
Sean Nelson35727f72010-01-28 23:55:12 +00004878 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004879 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004880 },
4881
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004882 {
4883 .vendor = "ST",
4884 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004885 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004886 .manufacture_id = ST_ID,
4887 .model_id = ST_M29W040B,
4888 .total_size = 512,
4889 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004890 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004891 .tested = TEST_UNTESTED,
4892 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004893 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004894 .block_erasers =
4895 {
4896 {
4897 .eraseblocks = { {64 * 1024, 8}, },
4898 .block_erase = erase_sector_jedec,
4899 }, {
4900 .eraseblocks = { {512 * 1024, 1} },
4901 .block_erase = erase_chip_block_jedec,
4902 }
4903 },
Sean Nelson35727f72010-01-28 23:55:12 +00004904 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004905 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004906 },
4907
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004908 {
4909 .vendor = "ST",
4910 .name = "M29W512B",
4911 .bustype = CHIP_BUSTYPE_PARALLEL,
4912 .manufacture_id = ST_ID,
4913 .model_id = ST_M29W512B,
4914 .total_size = 64,
4915 .page_size = 64 * 1024,
4916 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4917 .tested = TEST_OK_PREW,
4918 .probe = probe_jedec,
4919 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004920 .block_erasers =
4921 {
4922 {
4923 .eraseblocks = { {64 * 1024, 1} },
4924 .block_erase = erase_chip_block_jedec,
4925 }
4926 },
4927 .write = write_jedec_1,
4928 .read = read_memmapped,
4929 },
4930
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004931 {
4932 .vendor = "ST",
4933 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00004934 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004935 .manufacture_id = ST_ID,
4936 .model_id = ST_M50FLW040A,
4937 .total_size = 512,
4938 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004939 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004940 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004941 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004942 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004943 .block_erasers =
4944 {
4945 {
Sean Nelson329bde72010-01-19 16:39:19 +00004946 .eraseblocks = {
4947 {4 * 1024, 16}, /* sector */
4948 {64 * 1024, 5}, /* block */
4949 {4 * 1024, 16}, /* sector */
4950 {4 * 1024, 16}, /* sector */
4951 },
4952 .block_erase = NULL,
4953 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004954 .eraseblocks = { {64 * 1024, 8}, },
4955 .block_erase = erase_block_stm50flw0x0x,
4956 }, {
4957 .eraseblocks = { {512 * 1024, 1} },
4958 .block_erase = erase_chip_stm50flw0x0x,
4959 }
4960 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004961 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004962 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004963 },
4964
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004965 {
4966 .vendor = "ST",
4967 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00004968 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004969 .manufacture_id = ST_ID,
4970 .model_id = ST_M50FLW040B,
4971 .total_size = 512,
4972 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004973 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004974 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004975 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004976 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004977 .block_erasers =
4978 {
4979 {
Sean Nelson329bde72010-01-19 16:39:19 +00004980 .eraseblocks = {
4981 {4 * 1024, 16}, /* sector */
4982 {4 * 1024, 16}, /* sector */
4983 {64 * 1024, 5}, /* block */
4984 {4 * 1024, 16}, /* sector */
4985 },
4986 .block_erase = NULL,
4987 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004988 .eraseblocks = { {64 * 1024, 8}, },
4989 .block_erase = erase_block_stm50flw0x0x,
4990 }, {
4991 .eraseblocks = { {512 * 1024, 1} },
4992 .block_erase = erase_chip_stm50flw0x0x,
4993 }
4994 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004995 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004996 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004997 },
4998
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004999 {
5000 .vendor = "ST",
5001 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005002 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005003 .manufacture_id = ST_ID,
5004 .model_id = ST_M50FLW080A,
5005 .total_size = 1024,
5006 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005007 .feature_bits = 0,
5008 .tested = TEST_UNTESTED,
5009 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005010 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005011 .block_erasers =
5012 {
5013 {
Sean Nelson329bde72010-01-19 16:39:19 +00005014 .eraseblocks = {
5015 {4 * 1024, 16}, /* sector */
5016 {64 * 1024, 13}, /* block */
5017 {4 * 1024, 16}, /* sector */
5018 {4 * 1024, 16}, /* sector */
5019 },
5020 .block_erase = NULL,
5021 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005022 .eraseblocks = { {64 * 1024, 16}, },
5023 .block_erase = erase_block_stm50flw0x0x,
5024 }, {
5025 .eraseblocks = { {1024 * 1024, 1} },
5026 .block_erase = erase_chip_stm50flw0x0x,
5027 }
5028 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005029 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005030 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005031 },
5032
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005033 {
5034 .vendor = "ST",
5035 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005036 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005037 .manufacture_id = ST_ID,
5038 .model_id = ST_M50FLW080B,
5039 .total_size = 1024,
5040 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005041 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005042 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005043 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005044 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005045 .block_erasers =
5046 {
5047 {
Sean Nelson329bde72010-01-19 16:39:19 +00005048 .eraseblocks = {
5049 {4 * 1024, 16}, /* sector */
5050 {4 * 1024, 16}, /* sector */
5051 {64 * 1024, 13}, /* block */
5052 {4 * 1024, 16}, /* sector */
5053 },
5054 .block_erase = NULL,
5055 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005056 .eraseblocks = { {64 * 1024, 16}, },
5057 .block_erase = erase_block_stm50flw0x0x,
5058 }, {
5059 .eraseblocks = { {1024 * 1024, 1} },
5060 .block_erase = erase_chip_stm50flw0x0x,
5061 }
5062 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005063 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005064 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005065 },
5066
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005067 {
5068 .vendor = "ST",
5069 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005070 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005071 .manufacture_id = ST_ID,
5072 .model_id = ST_M50FW002,
5073 .total_size = 256,
5074 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005075 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005076 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005077 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005078 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005079 .block_erasers =
5080 {
5081 {
5082 .eraseblocks = {
5083 {64 * 1024, 3},
5084 {32 * 1024, 1},
5085 {8 * 1024, 2},
5086 {16 * 1024, 1},
5087 },
5088 .block_erase = erase_block_stm50flw0x0x,
5089 }, {
5090 .eraseblocks = { {256 * 1024, 1} },
5091 .block_erase = erase_chip_stm50flw0x0x,
5092 }
5093 },
Sean Nelson35727f72010-01-28 23:55:12 +00005094 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005095 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005096 },
5097
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005098 {
5099 .vendor = "ST",
5100 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005101 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005102 .manufacture_id = ST_ID,
5103 .model_id = ST_M50FW016,
5104 .total_size = 2048,
5105 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005106 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005107 .tested = TEST_UNTESTED,
5108 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005109 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005110 .block_erasers =
5111 {
5112 {
5113 .eraseblocks = { {64 * 1024, 32}, },
5114 .block_erase = erase_block_stm50flw0x0x,
5115 }, {
5116 .eraseblocks = { {2 * 1024 * 1024, 1} },
5117 .block_erase = erase_chip_stm50flw0x0x,
5118 }
5119 },
5120 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005121 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005122 },
5123
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005124 {
5125 .vendor = "ST",
5126 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005127 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005128 .manufacture_id = ST_ID,
5129 .model_id = ST_M50FW040,
5130 .total_size = 512,
5131 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005132 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005133 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005134 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005135 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005136 .block_erasers =
5137 {
5138 {
5139 .eraseblocks = { {64 * 1024, 8}, },
5140 .block_erase = erase_block_stm50flw0x0x,
5141 }, {
5142 .eraseblocks = { {512 * 1024, 1} },
5143 .block_erase = erase_chip_stm50flw0x0x,
5144 }
5145 },
5146 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005147 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005148 },
5149
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005150 {
5151 .vendor = "ST",
5152 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005153 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005154 .manufacture_id = ST_ID,
5155 .model_id = ST_M50FW080,
5156 .total_size = 1024,
5157 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005158 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005159 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005160 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005161 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005162 .block_erasers =
5163 {
5164 {
5165 .eraseblocks = { {64 * 1024, 16}, },
5166 .block_erase = erase_block_stm50flw0x0x,
5167 }, {
5168 .eraseblocks = { {1024 * 1024, 1} },
5169 .block_erase = erase_chip_stm50flw0x0x,
5170 }
5171 },
5172 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005173 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005174 },
5175
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005176 {
5177 .vendor = "ST",
5178 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005179 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005180 .manufacture_id = ST_ID,
5181 .model_id = ST_M50LPW116,
5182 .total_size = 2048,
5183 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005184 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005185 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005186 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005187 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005188 .block_erasers =
5189 {
5190 {
5191 .eraseblocks = {
5192 {4 * 1024, 16},
5193 {64 * 1024, 30},
5194 {32 * 1024, 1},
5195 {8 * 1024, 2},
5196 {16 * 1024, 1},
5197 },
5198 .block_erase = erase_block_stm50flw0x0x,
5199 }, {
5200 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005201 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005202 }
5203 },
Sean Nelson35727f72010-01-28 23:55:12 +00005204 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005205 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005206 },
5207
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005208 {
5209 .vendor = "SyncMOS",
5210 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005211 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005212 .manufacture_id = SYNCMOS_ID,
5213 .model_id = S29C31004T,
5214 .total_size = 512,
5215 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005216 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005217 .tested = TEST_UNTESTED,
5218 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005219 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005220 .block_erasers =
5221 {
5222 {
5223 .eraseblocks = { {1 * 1024, 512} },
5224 .block_erase = erase_sector_jedec,
5225 }, {
5226 .eraseblocks = { {512 * 1024, 1} },
5227 .block_erase = erase_chip_block_jedec,
5228 },
5229 },
Sean Nelson35727f72010-01-28 23:55:12 +00005230 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005231 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005232 },
5233
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005234 {
5235 .vendor = "SyncMOS",
5236 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005237 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005238 .manufacture_id = SYNCMOS_ID,
5239 .model_id = S29C51001T,
5240 .total_size = 128,
5241 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005242 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005243 .tested = TEST_UNTESTED,
5244 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005245 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005246 .block_erasers =
5247 {
5248 {
5249 .eraseblocks = { {512, 256} },
5250 .block_erase = erase_sector_jedec,
5251 }, {
5252 .eraseblocks = { {128 * 1024, 1} },
5253 .block_erase = erase_chip_block_jedec,
5254 },
5255 },
Sean Nelson35727f72010-01-28 23:55:12 +00005256 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005257 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005258 },
5259
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005260 {
5261 .vendor = "SyncMOS",
5262 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005263 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005264 .manufacture_id = SYNCMOS_ID,
5265 .model_id = S29C51002T,
5266 .total_size = 256,
5267 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005268 .feature_bits = FEATURE_EITHER_RESET,
5269 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005270 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005271 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005272 .block_erasers =
5273 {
5274 {
5275 .eraseblocks = { {512, 512} },
5276 .block_erase = erase_sector_jedec,
5277 }, {
5278 .eraseblocks = { {256 * 1024, 1} },
5279 .block_erase = erase_chip_block_jedec,
5280 },
5281 },
Sean Nelson35727f72010-01-28 23:55:12 +00005282 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005283 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005284 },
5285
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005286 {
5287 .vendor = "SyncMOS",
5288 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005289 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005290 .manufacture_id = SYNCMOS_ID,
5291 .model_id = S29C51004T,
5292 .total_size = 512,
5293 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005294 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005295 .tested = TEST_UNTESTED,
5296 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005297 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005298 .block_erasers =
5299 {
5300 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005301 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005302 .block_erase = erase_sector_jedec,
5303 }, {
5304 .eraseblocks = { {512 * 1024, 1} },
5305 .block_erase = erase_chip_block_jedec,
5306 },
5307 },
Sean Nelson35727f72010-01-28 23:55:12 +00005308 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005309 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005310 },
5311
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005312 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005313 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005314 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005315 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005316 .manufacture_id = TI_OLD_ID,
5317 .model_id = TI_TMS29F002RB,
5318 .total_size = 256,
5319 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005320 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005321 .tested = TEST_UNTESTED,
5322 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005323 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005324 .block_erasers =
5325 {
5326 {
5327 .eraseblocks = {
5328 {16 * 1024, 1},
5329 {8 * 1024, 2},
5330 {32 * 1024, 1},
5331 {64 * 1024, 3},
5332 },
5333 .block_erase = erase_sector_jedec,
5334 }, {
5335 .eraseblocks = { {256 * 1024, 1} },
5336 .block_erase = erase_chip_block_jedec,
5337 },
5338 },
Sean Nelson35727f72010-01-28 23:55:12 +00005339 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005340 .read = read_memmapped,
5341 },
5342
5343 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005344 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005345 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005346 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005347 .manufacture_id = TI_OLD_ID,
5348 .model_id = TI_TMS29F002RT,
5349 .total_size = 256,
5350 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005351 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005352 .tested = TEST_UNTESTED,
5353 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005354 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005355 .block_erasers =
5356 {
5357 {
5358 .eraseblocks = {
5359 {64 * 1024, 3},
5360 {32 * 1024, 1},
5361 {8 * 1024, 2},
5362 {16 * 1024, 1},
5363 },
5364 .block_erase = erase_sector_jedec,
5365 }, {
5366 .eraseblocks = { {256 * 1024, 1} },
5367 .block_erase = erase_chip_block_jedec,
5368 },
5369 },
Sean Nelson35727f72010-01-28 23:55:12 +00005370 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005371 .read = read_memmapped,
5372 },
5373
5374 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005375 .vendor = "Winbond",
5376 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005377 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005378 .manufacture_id = WINBOND_NEX_ID,
5379 .model_id = W_25X10,
5380 .total_size = 128,
5381 .page_size = 256,
5382 .tested = TEST_UNTESTED,
5383 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005384 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005385 .block_erasers =
5386 {
5387 {
5388 .eraseblocks = { {4 * 1024, 32} },
5389 .block_erase = spi_block_erase_20,
5390 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005391 .eraseblocks = { {64 * 1024, 2} },
5392 .block_erase = spi_block_erase_d8,
5393 }, {
5394 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005395 .block_erase = spi_block_erase_c7,
5396 }
5397 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005398 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005399 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005400 },
5401
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005402 {
5403 .vendor = "Winbond",
5404 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005405 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005406 .manufacture_id = WINBOND_NEX_ID,
5407 .model_id = W_25X20,
5408 .total_size = 256,
5409 .page_size = 256,
5410 .tested = TEST_UNTESTED,
5411 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005412 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005413 .block_erasers =
5414 {
5415 {
5416 .eraseblocks = { {4 * 1024, 64} },
5417 .block_erase = spi_block_erase_20,
5418 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005419 .eraseblocks = { {64 * 1024, 4} },
5420 .block_erase = spi_block_erase_d8,
5421 }, {
5422 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005423 .block_erase = spi_block_erase_c7,
5424 }
5425 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005426 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005427 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005428 },
5429
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005430 {
5431 .vendor = "Winbond",
5432 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005433 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005434 .manufacture_id = WINBOND_NEX_ID,
5435 .model_id = W_25X40,
5436 .total_size = 512,
5437 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005438 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005439 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005440 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005441 .block_erasers =
5442 {
5443 {
5444 .eraseblocks = { {4 * 1024, 128} },
5445 .block_erase = spi_block_erase_20,
5446 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005447 .eraseblocks = { {64 * 1024, 8} },
5448 .block_erase = spi_block_erase_d8,
5449 }, {
5450 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005451 .block_erase = spi_block_erase_c7,
5452 }
5453 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005454 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005455 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005456 },
5457
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005458 {
5459 .vendor = "Winbond",
5460 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005461 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005462 .manufacture_id = WINBOND_NEX_ID,
5463 .model_id = W_25X80,
5464 .total_size = 1024,
5465 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005466 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005467 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005468 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005469 .block_erasers =
5470 {
5471 {
5472 .eraseblocks = { {4 * 1024, 256} },
5473 .block_erase = spi_block_erase_20,
5474 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005475 .eraseblocks = { {64 * 1024, 16} },
5476 .block_erase = spi_block_erase_d8,
5477 }, {
5478 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005479 .block_erase = spi_block_erase_c7,
5480 }
5481 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005482 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005483 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005484 },
5485
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005486 {
5487 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005488 .name = "W25x16",
5489 .bustype = CHIP_BUSTYPE_SPI,
5490 .manufacture_id = WINBOND_NEX_ID,
5491 .model_id = W_25X16,
5492 .total_size = 2048,
5493 .page_size = 256,
5494 .tested = TEST_OK_PR,
5495 .probe = probe_spi_rdid,
5496 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005497 .block_erasers =
5498 {
5499 {
5500 .eraseblocks = { {4 * 1024, 512} },
5501 .block_erase = spi_block_erase_20,
5502 }, {
5503 .eraseblocks = { {32 * 1024, 64} },
5504 .block_erase = spi_block_erase_52,
5505 }, {
5506 .eraseblocks = { {64 * 1024, 32} },
5507 .block_erase = spi_block_erase_d8,
5508 }, {
5509 .eraseblocks = { {2 * 1024 * 1024, 1} },
5510 .block_erase = spi_block_erase_60,
5511 }, {
5512 .eraseblocks = { {2 * 1024 * 1024, 1} },
5513 .block_erase = spi_block_erase_c7,
5514 }
5515 },
Hector Martina721ae22009-07-11 19:39:11 +00005516 .write = spi_chip_write_256,
5517 .read = spi_chip_read,
5518 },
5519
5520 {
5521 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005522 .name = "W25x32",
5523 .bustype = CHIP_BUSTYPE_SPI,
5524 .manufacture_id = WINBOND_NEX_ID,
5525 .model_id = W_25X32,
5526 .total_size = 4096,
5527 .page_size = 256,
5528 .tested = TEST_OK_PROBE,
5529 .probe = probe_spi_rdid,
5530 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005531 .block_erasers =
5532 {
5533 {
5534 .eraseblocks = { {4 * 1024, 1024} },
5535 .block_erase = spi_block_erase_20,
5536 }, {
5537 .eraseblocks = { {32 * 1024, 128} },
5538 .block_erase = spi_block_erase_52,
5539 }, {
5540 .eraseblocks = { {64 * 1024, 64} },
5541 .block_erase = spi_block_erase_d8,
5542 }, {
5543 .eraseblocks = { {4 * 1024 * 1024, 1} },
5544 .block_erase = spi_block_erase_60,
5545 }, {
5546 .eraseblocks = { {4 * 1024 * 1024, 1} },
5547 .block_erase = spi_block_erase_c7,
5548 }
5549 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005550 .write = spi_chip_write_256,
5551 .read = spi_chip_read,
5552 },
5553
5554 {
5555 .vendor = "Winbond",
5556 .name = "W25x64",
5557 .bustype = CHIP_BUSTYPE_SPI,
5558 .manufacture_id = WINBOND_NEX_ID,
5559 .model_id = W_25X64,
5560 .total_size = 8192,
5561 .page_size = 256,
5562 .tested = TEST_UNTESTED,
5563 .probe = probe_spi_rdid,
5564 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005565 .block_erasers =
5566 {
5567 {
5568 .eraseblocks = { {4 * 1024, 2048} },
5569 .block_erase = spi_block_erase_20,
5570 }, {
5571 .eraseblocks = { {32 * 1024, 256} },
5572 .block_erase = spi_block_erase_52,
5573 }, {
5574 .eraseblocks = { {64 * 1024, 128} },
5575 .block_erase = spi_block_erase_d8,
5576 }, {
5577 .eraseblocks = { {8 * 1024 * 1024, 1} },
5578 .block_erase = spi_block_erase_60,
5579 }, {
5580 .eraseblocks = { {8 * 1024 * 1024, 1} },
5581 .block_erase = spi_block_erase_c7,
5582 }
5583 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005584 .write = spi_chip_write_256,
5585 .read = spi_chip_read,
5586 },
5587
5588 {
5589 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005590 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005591 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005592 .manufacture_id = WINBOND_ID,
5593 .model_id = W_29C011,
5594 .total_size = 128,
5595 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005596 .feature_bits = FEATURE_LONG_RESET,
5597 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005598 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005599 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005600 .block_erasers =
5601 {
5602 {
5603 .eraseblocks = { {128 * 1024, 1} },
5604 .block_erase = erase_chip_block_jedec,
5605 }
5606 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005607 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005608 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005609 },
5610
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005611 {
5612 .vendor = "Winbond",
5613 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005614 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005615 .manufacture_id = WINBOND_ID,
5616 .model_id = W_29C020C,
5617 .total_size = 256,
5618 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005619 .feature_bits = FEATURE_LONG_RESET,
5620 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005621 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005622 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005623 .block_erasers =
5624 {
5625 {
5626 .eraseblocks = { {256 * 1024, 1} },
5627 .block_erase = erase_chip_block_jedec,
5628 }
5629 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005630 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005631 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005632 },
5633
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005634 {
5635 .vendor = "Winbond",
5636 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005637 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005638 .manufacture_id = WINBOND_ID,
5639 .model_id = W_29C040P,
5640 .total_size = 512,
5641 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005642 .feature_bits = FEATURE_LONG_RESET,
5643 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005644 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005645 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005646 .block_erasers =
5647 {
5648 {
5649 .eraseblocks = { {512 * 1024, 1} },
5650 .block_erase = erase_chip_block_jedec,
5651 }
5652 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005653 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005654 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005655 },
5656
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005657 {
5658 .vendor = "Winbond",
5659 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005660 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005661 .manufacture_id = WINBOND_ID,
5662 .model_id = W_29C011,
5663 .total_size = 128,
5664 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005665 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005666 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005667 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005668 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005669 .block_erasers =
5670 {
5671 {
5672 .eraseblocks = { {128 * 1024, 1} },
5673 .block_erase = erase_chip_block_jedec,
5674 }
5675 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005676 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005677 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005678 },
5679
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005680 {
5681 .vendor = "Winbond",
5682 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005683 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005684 .manufacture_id = WINBOND_ID,
5685 .model_id = W_39V040A,
5686 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005687 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005688 .feature_bits = FEATURE_EITHER_RESET,
5689 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005690 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005691 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005692 .block_erasers =
5693 {
5694 {
5695 .eraseblocks = { {64 * 1024, 8} },
5696 .block_erase = erase_sector_jedec,
5697 }, {
5698 .eraseblocks = { {512 * 1024, 1} },
5699 .block_erase = erase_chip_block_jedec,
5700 }
5701 },
Sean Nelson35727f72010-01-28 23:55:12 +00005702 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005703 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005704 },
5705
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005706 {
5707 .vendor = "Winbond",
5708 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005709 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005710 .manufacture_id = WINBOND_ID,
5711 .model_id = W_39V040B,
5712 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005713 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005714 .feature_bits = FEATURE_EITHER_RESET,
5715 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005716 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005717 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005718 .block_erasers =
5719 {
5720 {
5721 .eraseblocks = { {64 * 1024, 8} },
5722 .block_erase = erase_sector_jedec,
5723 }, {
5724 .eraseblocks = { {512 * 1024, 1} },
5725 .block_erase = erase_chip_block_jedec,
5726 }
5727 },
Sean Nelson35727f72010-01-28 23:55:12 +00005728 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005729 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005730 },
5731
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005732 {
5733 .vendor = "Winbond",
5734 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005735 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005736 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005737 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005738 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005739 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005740 .feature_bits = FEATURE_EITHER_RESET,
5741 .tested = TEST_UNTESTED,
5742 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005743 .probe_timing = TIMING_FIXME,
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00005744 /* .erase = NULL, Was erase_w39v040c */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005745 .block_erasers =
5746 {
5747 {
5748 .eraseblocks = { {64 * 1024, 8} },
5749 .block_erase = erase_sector_jedec,
5750 }, {
5751 .eraseblocks = { {512 * 1024, 1} },
5752 .block_erase = erase_chip_block_jedec,
5753 }
5754 },
Sean Nelson35727f72010-01-28 23:55:12 +00005755 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005756 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005757 },
5758
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005759 {
5760 .vendor = "Winbond",
5761 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005762 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005763 .manufacture_id = WINBOND_ID,
5764 .model_id = W_39V040FA,
5765 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005766 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005767 .feature_bits = FEATURE_EITHER_RESET,
5768 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005769 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005770 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005771 .block_erasers =
5772 {
5773 {
5774 .eraseblocks = { {4 * 1024, 128} },
5775 .block_erase = erase_block_jedec,
5776 }, {
5777 .eraseblocks = { {64 * 1024, 8} },
5778 .block_erase = erase_sector_jedec,
5779 }, {
5780 .eraseblocks = { {512 * 1024, 1} },
5781 .block_erase = erase_chip_block_jedec,
5782 }
5783 },
Sean Nelson35727f72010-01-28 23:55:12 +00005784 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005785 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005786 },
5787
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005788 {
5789 .vendor = "Winbond",
5790 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005791 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005792 .manufacture_id = WINBOND_ID,
5793 .model_id = W_39V080A,
5794 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005795 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005796 .feature_bits = FEATURE_EITHER_RESET,
5797 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005798 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005799 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005800 .block_erasers =
5801 {
5802 {
5803 .eraseblocks = { {64 * 1024, 16} },
5804 .block_erase = erase_sector_jedec,
5805 }, {
5806 .eraseblocks = { {1024 * 1024, 1} },
5807 .block_erase = erase_chip_block_jedec,
5808 }
5809 },
Sean Nelson35727f72010-01-28 23:55:12 +00005810 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005811 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005812 },
5813
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005814 {
5815 .vendor = "Winbond",
5816 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00005817 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005818 .manufacture_id = WINBOND_ID,
5819 .model_id = W_49F002U,
5820 .total_size = 256,
5821 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005822 .feature_bits = FEATURE_EITHER_RESET,
5823 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005824 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005825 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005826 .block_erasers =
5827 {
5828 {
5829 .eraseblocks = {
5830 {128 * 1024, 1},
5831 {96 * 1024, 1},
5832 {8 * 1024, 2},
5833 {16 * 1024, 1},
5834 },
5835 .block_erase = erase_sector_jedec,
5836 }, {
5837 .eraseblocks = { {256 * 1024, 1} },
5838 .block_erase = erase_chip_block_jedec,
5839 }
5840 },
Sean Nelson35727f72010-01-28 23:55:12 +00005841 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005842 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005843 },
5844
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005845 {
5846 .vendor = "Winbond",
5847 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005848 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005849 .manufacture_id = WINBOND_ID,
5850 .model_id = W_49V002A,
5851 .total_size = 256,
5852 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005853 .feature_bits = FEATURE_EITHER_RESET,
5854 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005855 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005856 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005857 .block_erasers =
5858 {
5859 {
5860 .eraseblocks = {
5861 {64 * 1024, 3},
5862 {32 * 1024, 1},
5863 {8 * 1024, 2},
5864 {16 * 1024, 1},
5865 },
5866 .block_erase = erase_sector_jedec,
5867 }, {
5868 .eraseblocks = { {256 * 1024, 1} },
5869 .block_erase = erase_chip_block_jedec,
5870 }
5871 },
Sean Nelson35727f72010-01-28 23:55:12 +00005872 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005873 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005874 },
5875
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005876 {
5877 .vendor = "Winbond",
5878 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005879 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005880 .manufacture_id = WINBOND_ID,
5881 .model_id = W_49V002FA,
5882 .total_size = 256,
5883 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005884 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005885 .tested = TEST_UNTESTED,
5886 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005887 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005888 .block_erasers =
5889 {
5890 {
5891 .eraseblocks = {
5892 {64 * 1024, 3},
5893 {32 * 1024, 1},
5894 {8 * 1024, 2},
5895 {16 * 1024, 1},
5896 },
5897 .block_erase = erase_sector_jedec,
5898 }, {
5899 .eraseblocks = { {256 * 1024, 1} },
5900 .block_erase = erase_chip_block_jedec,
5901 }
5902 },
Sean Nelson35727f72010-01-28 23:55:12 +00005903 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005904 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005905 },
5906
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005907 {
5908 .vendor = "Winbond",
5909 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005910 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005911 .manufacture_id = WINBOND_ID,
5912 .model_id = W_39V080FA,
5913 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005914 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005915 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
5916 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005917 .probe = probe_jedec,
5918 .probe_timing = TIMING_FIXME,
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00005919 /* .erase = NULL, Was erase_winbond_fwhub */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005920 .block_erasers =
5921 {
5922 {
5923 .eraseblocks = { {64 * 1024, 16}, },
5924 .block_erase = erase_sector_jedec,
5925 }, {
5926 .eraseblocks = { {1024 * 1024, 1} },
5927 .block_erase = erase_chip_block_jedec,
5928 }
5929 },
Sean Nelson35727f72010-01-28 23:55:12 +00005930 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005931 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005932 },
5933
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005934 {
5935 .vendor = "Winbond",
5936 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005937 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005938 .manufacture_id = WINBOND_ID,
5939 .model_id = W_39V080FA_DM,
5940 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005941 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005942 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005943 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005944 .probe = probe_jedec,
5945 .probe_timing = TIMING_FIXME,
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00005946 /* .erase = NULL, Was erase_winbond_fwhub */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005947 .block_erasers =
5948 {
5949 {
5950 .eraseblocks = { {64 * 1024, 8}, },
5951 .block_erase = erase_sector_jedec,
5952 }, {
5953 .eraseblocks = { {512 * 1024, 1} },
5954 .block_erase = erase_chip_block_jedec,
5955 }
5956 },
Sean Nelson35727f72010-01-28 23:55:12 +00005957 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005958 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005959 },
5960
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005961 {
5962 .vendor = "Atmel",
5963 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005964 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005965 .manufacture_id = ATMEL_ID,
5966 .model_id = GENERIC_DEVICE_ID,
5967 .total_size = 0,
5968 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005969 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005970 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005971 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005972 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005973 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005974 },
5975
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005976 {
5977 .vendor = "EON",
5978 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005979 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005980 .manufacture_id = EON_ID_NOPREFIX,
5981 .model_id = GENERIC_DEVICE_ID,
5982 .total_size = 0,
5983 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005984 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005985 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005986 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005987 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005988 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005989 },
5990
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005991 {
5992 .vendor = "Macronix",
5993 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005994 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005995 .manufacture_id = MX_ID,
5996 .model_id = GENERIC_DEVICE_ID,
5997 .total_size = 0,
5998 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005999 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006000 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006001 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006002 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006003 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006004 },
6005
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006006 {
6007 .vendor = "PMC",
6008 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006009 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006010 .manufacture_id = PMC_ID,
6011 .model_id = GENERIC_DEVICE_ID,
6012 .total_size = 0,
6013 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006014 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006015 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006016 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006017 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006018 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006019 },
6020
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006021 {
6022 .vendor = "SST",
6023 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006024 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006025 .manufacture_id = SST_ID,
6026 .model_id = GENERIC_DEVICE_ID,
6027 .total_size = 0,
6028 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006029 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006030 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006031 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006032 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006033 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006034 },
6035
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006036 {
6037 .vendor = "ST",
6038 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006039 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006040 .manufacture_id = ST_ID,
6041 .model_id = GENERIC_DEVICE_ID,
6042 .total_size = 0,
6043 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006044 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006045 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006046 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006047 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006048 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006049 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006050
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006051 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006052 .vendor = "Sanyo",
6053 .name = "unknown Sanyo SPI chip",
6054 .bustype = CHIP_BUSTYPE_SPI,
6055 .manufacture_id = SANYO_ID,
6056 .model_id = GENERIC_DEVICE_ID,
6057 .total_size = 0,
6058 .page_size = 256,
6059 .tested = TEST_BAD_PREW,
6060 .probe = probe_spi_rdid,
6061 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006062 .write = NULL,
6063 .read = NULL,
6064 },
6065
6066 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006067 .vendor = "Generic",
6068 .name = "unknown SPI chip (RDID)",
6069 .bustype = CHIP_BUSTYPE_SPI,
6070 .manufacture_id = GENERIC_MANUF_ID,
6071 .model_id = GENERIC_DEVICE_ID,
6072 .total_size = 0,
6073 .page_size = 256,
6074 .tested = TEST_BAD_PREW,
6075 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006076 .write = NULL,
6077 },
6078 {
6079 .vendor = "Generic",
6080 .name = "unknown SPI chip (REMS)",
6081 .bustype = CHIP_BUSTYPE_SPI,
6082 .manufacture_id = GENERIC_MANUF_ID,
6083 .model_id = GENERIC_DEVICE_ID,
6084 .total_size = 0,
6085 .page_size = 256,
6086 .tested = TEST_BAD_PREW,
6087 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006088 .write = NULL,
6089 },
6090
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006091 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006092};