blob: 2d29f5704a931a2642b5d03240566d78352c5fcc [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",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002336 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002337 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002338 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002339 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002340 .total_size = 512,
2341 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002342 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002343 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002344 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002345 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002346 .block_erasers =
2347 {
2348 {
2349 .eraseblocks = { {64 * 1024, 8} },
2350 .block_erase = erase_82802ab_block,
2351 },
2352 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002353 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002354 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002355 },
2356
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002357 {
2358 .vendor = "Intel",
2359 .name = "82802AC",
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_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002363 .total_size = 1024,
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, 16} },
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 = "Macronix",
2382 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002383 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002384 .manufacture_id = MX_ID,
2385 .model_id = MX_25L512,
2386 .total_size = 64,
2387 .page_size = 256,
2388 .tested = TEST_UNTESTED,
2389 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002390 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002391 .block_erasers =
2392 {
2393 {
2394 .eraseblocks = { {4 * 1024, 16} },
2395 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002396 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002397 .eraseblocks = { {64 * 1024, 1} },
2398 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002399 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002400 .eraseblocks = { {64 * 1024, 1} },
2401 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002402 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002403 .eraseblocks = { {64 * 1024, 1} },
2404 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002405 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002406 .eraseblocks = { {64 * 1024, 1} },
2407 .block_erase = spi_block_erase_c7,
2408 },
2409 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002410 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002411 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002412 },
2413
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002414 {
2415 .vendor = "Macronix",
2416 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002417 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002418 .manufacture_id = MX_ID,
2419 .model_id = MX_25L1005,
2420 .total_size = 128,
2421 .page_size = 256,
2422 .tested = TEST_UNTESTED,
2423 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002424 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002425 .block_erasers =
2426 {
2427 {
2428 .eraseblocks = { {4 * 1024, 32} },
2429 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002430 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002431 .eraseblocks = { {64 * 1024, 2} },
2432 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002433 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002434 .eraseblocks = { {128 * 1024, 1} },
2435 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002436 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002437 .eraseblocks = { {128 * 1024, 1} },
2438 .block_erase = spi_block_erase_c7,
2439 },
2440 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002441 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002442 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002443 },
2444
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002445 {
2446 .vendor = "Macronix",
2447 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002448 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002449 .manufacture_id = MX_ID,
2450 .model_id = MX_25L2005,
2451 .total_size = 256,
2452 .page_size = 256,
2453 .tested = TEST_UNTESTED,
2454 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002455 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002456 .block_erasers =
2457 {
2458 {
2459 .eraseblocks = { {4 * 1024, 64} },
2460 .block_erase = spi_block_erase_20,
2461 }, {
2462 .eraseblocks = { {64 * 1024, 4} },
2463 .block_erase = spi_block_erase_52,
2464 }, {
2465 .eraseblocks = { {64 * 1024, 4} },
2466 .block_erase = spi_block_erase_d8,
2467 }, {
2468 .eraseblocks = { {256 * 1024, 1} },
2469 .block_erase = spi_block_erase_60,
2470 }, {
2471 .eraseblocks = { {256 * 1024, 1} },
2472 .block_erase = spi_block_erase_c7,
2473 },
2474 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002475 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002476 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002477 },
2478
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002479 {
2480 .vendor = "Macronix",
2481 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002482 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002483 .manufacture_id = MX_ID,
2484 .model_id = MX_25L4005,
2485 .total_size = 512,
2486 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002487 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002488 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002489 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002490 .block_erasers =
2491 {
2492 {
2493 .eraseblocks = { {4 * 1024, 128} },
2494 .block_erase = spi_block_erase_20,
2495 }, {
2496 .eraseblocks = { {64 * 1024, 8} },
2497 .block_erase = spi_block_erase_52,
2498 }, {
2499 .eraseblocks = { {64 * 1024, 8} },
2500 .block_erase = spi_block_erase_d8,
2501 }, {
2502 .eraseblocks = { {512 * 1024, 1} },
2503 .block_erase = spi_block_erase_60,
2504 }, {
2505 .eraseblocks = { {512 * 1024, 1} },
2506 .block_erase = spi_block_erase_c7,
2507 },
2508 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002509 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002510 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002511 },
2512
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002513 {
2514 .vendor = "Macronix",
2515 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002516 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002517 .manufacture_id = MX_ID,
2518 .model_id = MX_25L8005,
2519 .total_size = 1024,
2520 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002521 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002522 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002523 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002524 .block_erasers =
2525 {
2526 {
2527 .eraseblocks = { {4 * 1024, 256} },
2528 .block_erase = spi_block_erase_20,
2529 }, {
2530 .eraseblocks = { {64 * 1024, 16} },
2531 .block_erase = spi_block_erase_52,
2532 }, {
2533 .eraseblocks = { {64 * 1024, 16} },
2534 .block_erase = spi_block_erase_d8,
2535 }, {
2536 .eraseblocks = { {1024 * 1024, 1} },
2537 .block_erase = spi_block_erase_60,
2538 }, {
2539 .eraseblocks = { {1024 * 1024, 1} },
2540 .block_erase = spi_block_erase_c7,
2541 },
2542 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002543 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002544 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002545 },
2546
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002547 {
2548 .vendor = "Macronix",
2549 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002550 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002551 .manufacture_id = MX_ID,
2552 .model_id = MX_25L1605,
2553 .total_size = 2048,
2554 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002555 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002556 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002557 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002558 .block_erasers =
2559 {
2560 {
2561 .eraseblocks = { {4 * 1024, 512} },
2562 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2563 }, {
2564 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2565 .block_erase = spi_block_erase_52,
2566 }, {
2567 .eraseblocks = { {64 * 1024, 32} },
2568 .block_erase = spi_block_erase_d8,
2569 }, {
2570 .eraseblocks = { {2 * 1024 * 1024, 1} },
2571 .block_erase = spi_block_erase_60,
2572 }, {
2573 .eraseblocks = { {2 * 1024 * 1024, 1} },
2574 .block_erase = spi_block_erase_c7,
2575 },
2576 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002577 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002578 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002579 },
2580
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002581 {
2582 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002583 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002584 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002585 .manufacture_id = MX_ID,
2586 .model_id = MX_25L1635D,
2587 .total_size = 2048,
2588 .page_size = 256,
2589 .tested = TEST_UNTESTED,
2590 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002591 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002592 .block_erasers =
2593 {
2594 {
2595 .eraseblocks = { {4 * 1024, 512} },
2596 .block_erase = spi_block_erase_20,
2597 }, {
2598 .eraseblocks = { {64 * 1024, 32} },
2599 .block_erase = spi_block_erase_d8,
2600 }, {
2601 .eraseblocks = { {2 * 1024 * 1024, 1} },
2602 .block_erase = spi_block_erase_60,
2603 }, {
2604 .eraseblocks = { {2 * 1024 * 1024, 1} },
2605 .block_erase = spi_block_erase_c7,
2606 }
2607 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002608 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002609 .read = spi_chip_read,
2610 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002611
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002612 {
2613 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002614 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002615 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002616 .manufacture_id = MX_ID,
2617 .model_id = MX_25L3205,
2618 .total_size = 4096,
2619 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002620 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002621 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002622 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002623 .block_erasers =
2624 {
2625 {
2626 .eraseblocks = { {4 * 1024, 1024} },
2627 .block_erase = spi_block_erase_20,
2628 }, {
2629 .eraseblocks = { {4 * 1024, 1024} },
2630 .block_erase = spi_block_erase_d8,
2631 }, {
2632 .eraseblocks = { {4 * 1024 * 1024, 1} },
2633 .block_erase = spi_block_erase_60,
2634 }, {
2635 .eraseblocks = { {4 * 1024 * 1024, 1} },
2636 .block_erase = spi_block_erase_c7,
2637 },
2638 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002639 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002640 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002641 },
2642
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002643 {
2644 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002645 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002646 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002647 .manufacture_id = MX_ID,
2648 .model_id = MX_25L3235D,
2649 .total_size = 4096,
2650 .page_size = 256,
2651 .tested = TEST_UNTESTED,
2652 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002653 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002654 .block_erasers =
2655 {
2656 {
2657 .eraseblocks = { {4 * 1024, 1024} },
2658 .block_erase = spi_block_erase_20,
2659 }, {
2660 .eraseblocks = { {64 * 1024, 64} },
2661 .block_erase = spi_block_erase_d8,
2662 }, {
2663 .eraseblocks = { {4 * 1024 * 1024, 1} },
2664 .block_erase = spi_block_erase_60,
2665 }, {
2666 .eraseblocks = { {4 * 1024 * 1024, 1} },
2667 .block_erase = spi_block_erase_c7,
2668 }
2669 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002670 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002671 .read = spi_chip_read,
2672 },
2673
2674 {
2675 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002676 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002677 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002678 .manufacture_id = MX_ID,
2679 .model_id = MX_25L6405,
2680 .total_size = 8192,
2681 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002682 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002683 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002684 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002685 .block_erasers =
2686 {
2687 {
2688 .eraseblocks = { {64 * 1024, 128} },
2689 .block_erase = spi_block_erase_20,
2690 }, {
2691 .eraseblocks = { {64 * 1024, 128} },
2692 .block_erase = spi_block_erase_d8,
2693 }, {
2694 .eraseblocks = { {8 * 1024 * 1024, 1} },
2695 .block_erase = spi_block_erase_60,
2696 }, {
2697 .eraseblocks = { {8 * 1024 * 1024, 1} },
2698 .block_erase = spi_block_erase_c7,
2699 }
2700 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002701 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002702 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002703 },
2704
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002705 {
2706 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002707 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002708 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002709 .manufacture_id = MX_ID,
2710 .model_id = MX_25L12805,
2711 .total_size = 16384,
2712 .page_size = 256,
2713 .tested = TEST_UNTESTED,
2714 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002715 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002716 .block_erasers =
2717 {
2718 {
2719 .eraseblocks = { {4 * 1024, 4096} },
2720 .block_erase = spi_block_erase_20,
2721 }, {
2722 .eraseblocks = { {64 * 1024, 256} },
2723 .block_erase = spi_block_erase_d8,
2724 }, {
2725 .eraseblocks = { {16 * 1024 * 1024, 1} },
2726 .block_erase = spi_block_erase_60,
2727 }, {
2728 .eraseblocks = { {16 * 1024 * 1024, 1} },
2729 .block_erase = spi_block_erase_c7,
2730 }
2731 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002732 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002733 .read = spi_chip_read,
2734 },
2735
2736 {
2737 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002738 .name = "MX29F001B",
2739 .bustype = CHIP_BUSTYPE_PARALLEL,
2740 .manufacture_id = MX_ID,
2741 .model_id = MX_29F001B,
2742 .total_size = 128,
2743 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002744 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2745 .tested = TEST_UNTESTED,
2746 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002747 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002748 .block_erasers =
2749 {
2750 {
2751 .eraseblocks = {
2752 {8 * 1024, 1},
2753 {4 * 1024, 2},
2754 {8 * 1024, 2},
2755 {32 * 1024, 1},
2756 {64 * 1024, 1},
2757 },
Sean Nelson35727f72010-01-28 23:55:12 +00002758 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002759 }, {
2760 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002761 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002762 }
2763 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002764 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002765 .read = read_memmapped,
2766 },
2767
2768 {
2769 .vendor = "Macronix",
2770 .name = "MX29F001T",
2771 .bustype = CHIP_BUSTYPE_PARALLEL,
2772 .manufacture_id = MX_ID,
2773 .model_id = MX_29F001T,
2774 .total_size = 128,
2775 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002776 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2777 .tested = TEST_UNTESTED,
2778 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002779 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002780 .block_erasers =
2781 {
2782 {
2783 .eraseblocks = {
2784 {64 * 1024, 1},
2785 {32 * 1024, 1},
2786 {8 * 1024, 2},
2787 {4 * 1024, 2},
2788 {8 * 1024, 1},
2789 },
Sean Nelson35727f72010-01-28 23:55:12 +00002790 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002791 }, {
2792 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002793 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002794 }
2795 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002796 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002797 .read = read_memmapped,
2798 },
2799
2800 {
2801 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002802 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002803 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002804 .manufacture_id = MX_ID,
2805 .model_id = MX_29F002B,
2806 .total_size = 256,
2807 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002808 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002809 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002810 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002811 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002812 .block_erasers =
2813 {
2814 {
2815 .eraseblocks = {
2816 {16 * 1024, 1},
2817 {8 * 1024, 2},
2818 {32 * 1024, 1},
2819 {64 * 1024, 3},
2820 },
Sean Nelson35727f72010-01-28 23:55:12 +00002821 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002822 }, {
2823 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002824 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002825 },
2826 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002827 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002828 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002829 },
2830
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002831 {
2832 .vendor = "Macronix",
2833 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002834 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002835 .manufacture_id = MX_ID,
2836 .model_id = MX_29F002T,
2837 .total_size = 256,
2838 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002839 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2840 .tested = TEST_UNTESTED,
2841 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002842 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002843 .block_erasers =
2844 {
2845 {
2846 .eraseblocks = {
2847 {64 * 1024, 3},
2848 {32 * 1024, 1},
2849 {8 * 1024, 2},
2850 {16 * 1024, 1},
2851 },
Sean Nelson35727f72010-01-28 23:55:12 +00002852 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002853 }, {
2854 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002855 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002856 },
2857 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002858 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002859 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002860 },
2861
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002862 {
2863 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002864 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002865 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002866 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002867 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002868 .total_size = 512,
2869 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002870 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2871 .tested = TEST_UNTESTED,
2872 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002873 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002874 .block_erasers =
2875 {
2876 {
2877 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00002878 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002879 }, {
2880 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002881 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002882 },
2883 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002884 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002885 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002886 },
2887
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002888 {
2889 .vendor = "Numonyx",
2890 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002891 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002892 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002893 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002894 .total_size = 128,
2895 .page_size = 256,
2896 .tested = TEST_UNTESTED,
2897 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002898 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002899 .block_erasers =
2900 {
2901 {
2902 .eraseblocks = { {4 * 1024, 32} },
2903 .block_erase = spi_block_erase_20,
2904 }, {
2905 .eraseblocks = { {64 * 1024, 2} },
2906 .block_erase = spi_block_erase_d8,
2907 }, {
2908 .eraseblocks = { {128 * 1024, 1} },
2909 .block_erase = spi_block_erase_c7,
2910 }
2911 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002912 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002913 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002914 },
2915
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002916 {
2917 .vendor = "Numonyx",
2918 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002919 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002920 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002921 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002922 .total_size = 256,
2923 .page_size = 256,
2924 .tested = TEST_UNTESTED,
2925 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002926 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002927 .block_erasers =
2928 {
2929 {
2930 .eraseblocks = { {4 * 1024, 64} },
2931 .block_erase = spi_block_erase_20,
2932 }, {
2933 .eraseblocks = { {64 * 1024, 4} },
2934 .block_erase = spi_block_erase_d8,
2935 }, {
2936 .eraseblocks = { {256 * 1024, 1} },
2937 .block_erase = spi_block_erase_c7,
2938 }
2939 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002940 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002941 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002942 },
2943
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002944 {
2945 .vendor = "Numonyx",
2946 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002947 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002948 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002949 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00002950 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002951 .page_size = 256,
2952 .tested = TEST_UNTESTED,
2953 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002954 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002955 .block_erasers =
2956 {
2957 {
2958 .eraseblocks = { {4 * 1024, 128} },
2959 .block_erase = spi_block_erase_20,
2960 }, {
2961 .eraseblocks = { {64 * 1024, 8} },
2962 .block_erase = spi_block_erase_d8,
2963 }, {
2964 .eraseblocks = { {512 * 1024, 1} },
2965 .block_erase = spi_block_erase_c7,
2966 }
2967 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002968 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002969 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002970 },
2971
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002972 {
2973 .vendor = "Numonyx",
2974 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002975 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002976 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002977 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002978 .total_size = 1024,
2979 .page_size = 256,
2980 .tested = TEST_OK_PREW,
2981 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002982 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002983 .block_erasers =
2984 {
2985 {
2986 .eraseblocks = { {4 * 1024, 256} },
2987 .block_erase = spi_block_erase_20,
2988 }, {
2989 .eraseblocks = { {64 * 1024, 16} },
2990 .block_erase = spi_block_erase_d8,
2991 }, {
2992 .eraseblocks = { {1024 * 1024, 1} },
2993 .block_erase = spi_block_erase_c7,
2994 }
2995 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002996 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002997 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002998 },
2999
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003000 {
3001 .vendor = "Numonyx",
3002 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003003 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003004 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003005 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003006 .total_size = 2048,
3007 .page_size = 256,
3008 .tested = TEST_UNTESTED,
3009 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003010 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003011 .block_erasers =
3012 {
3013 {
3014 .eraseblocks = { {4 * 1024, 512} },
3015 .block_erase = spi_block_erase_20,
3016 }, {
3017 .eraseblocks = { {64 * 1024, 32} },
3018 .block_erase = spi_block_erase_d8,
3019 }, {
3020 .eraseblocks = { {2 * 1024 * 1024, 1} },
3021 .block_erase = spi_block_erase_c7,
3022 }
3023 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003024 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003025 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003026 },
3027
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003028 {
3029 .vendor = "PMC",
3030 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003031 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003032 .manufacture_id = PMC_ID,
3033 .model_id = PMC_25LV010,
3034 .total_size = 128,
3035 .page_size = 256,
3036 .tested = TEST_UNTESTED,
3037 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003038 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003039 .block_erasers =
3040 {
3041 {
3042 .eraseblocks = { {4 * 1024, 32} },
3043 .block_erase = spi_block_erase_d7,
3044 }, {
3045 .eraseblocks = { {32 * 1024, 4} },
3046 .block_erase = spi_block_erase_d8,
3047 }, {
3048 .eraseblocks = { {128 * 1024, 1} },
3049 .block_erase = spi_block_erase_c7,
3050 }
3051 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003052 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003053 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003054 },
3055
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003056 {
3057 .vendor = "PMC",
3058 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003059 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003060 .manufacture_id = PMC_ID,
3061 .model_id = PMC_25LV016B,
3062 .total_size = 2048,
3063 .page_size = 256,
3064 .tested = TEST_UNTESTED,
3065 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003066 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003067 .block_erasers =
3068 {
3069 {
3070 .eraseblocks = { {4 * 1024, 512} },
3071 .block_erase = spi_block_erase_d7,
3072 }, {
3073 .eraseblocks = { {4 * 1024, 512} },
3074 .block_erase = spi_block_erase_20,
3075 }, {
3076 .eraseblocks = { {64 * 1024, 32} },
3077 .block_erase = spi_block_erase_d8,
3078 }, {
3079 .eraseblocks = { {2 * 1024 * 1024, 1} },
3080 .block_erase = spi_block_erase_60,
3081 }, {
3082 .eraseblocks = { {2 * 1024 * 1024, 1} },
3083 .block_erase = spi_block_erase_c7,
3084 }
3085 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003086 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003087 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003088 },
3089
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003090 {
3091 .vendor = "PMC",
3092 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003093 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003094 .manufacture_id = PMC_ID,
3095 .model_id = PMC_25LV020,
3096 .total_size = 256,
3097 .page_size = 256,
3098 .tested = TEST_UNTESTED,
3099 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003100 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003101 .block_erasers =
3102 {
3103 {
3104 .eraseblocks = { {4 * 1024, 64} },
3105 .block_erase = spi_block_erase_d7,
3106 }, {
3107 .eraseblocks = { {64 * 1024, 4} },
3108 .block_erase = spi_block_erase_d8,
3109 }, {
3110 .eraseblocks = { {256 * 1024, 1} },
3111 .block_erase = spi_block_erase_c7,
3112 }
3113 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003114 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003115 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003116 },
3117
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003118 {
3119 .vendor = "PMC",
3120 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003121 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003122 .manufacture_id = PMC_ID,
3123 .model_id = PMC_25LV040,
3124 .total_size = 512,
3125 .page_size = 256,
3126 .tested = TEST_UNTESTED,
3127 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003128 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003129 .block_erasers =
3130 {
3131 {
3132 .eraseblocks = { {4 * 1024, 128} },
3133 .block_erase = spi_block_erase_d7,
3134 }, {
3135 .eraseblocks = { {64 * 1024, 8} },
3136 .block_erase = spi_block_erase_d8,
3137 }, {
3138 .eraseblocks = { {512 * 1024, 1} },
3139 .block_erase = spi_block_erase_c7,
3140 }
3141 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003142 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003143 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003144 },
3145
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003146 {
3147 .vendor = "PMC",
3148 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003149 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003150 .manufacture_id = PMC_ID,
3151 .model_id = PMC_25LV080B,
3152 .total_size = 1024,
3153 .page_size = 256,
3154 .tested = TEST_UNTESTED,
3155 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003156 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003157 .block_erasers =
3158 {
3159 {
3160 .eraseblocks = { {4 * 1024, 256} },
3161 .block_erase = spi_block_erase_d7,
3162 }, {
3163 .eraseblocks = { {4 * 1024, 256} },
3164 .block_erase = spi_block_erase_20,
3165 }, {
3166 .eraseblocks = { {64 * 1024, 16} },
3167 .block_erase = spi_block_erase_d8,
3168 }, {
3169 .eraseblocks = { {1024 * 1024, 1} },
3170 .block_erase = spi_block_erase_60,
3171 }, {
3172 .eraseblocks = { {1024 * 1024, 1} },
3173 .block_erase = spi_block_erase_c7,
3174 }
3175 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003176 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003177 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003178 },
3179
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003180 {
3181 .vendor = "PMC",
3182 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003183 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003184 .manufacture_id = PMC_ID,
3185 .model_id = PMC_25LV512,
3186 .total_size = 64,
3187 .page_size = 256,
3188 .tested = TEST_UNTESTED,
3189 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003190 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003191 .block_erasers =
3192 {
3193 {
3194 .eraseblocks = { {4 * 1024, 16} },
3195 .block_erase = spi_block_erase_d7,
3196 }, {
3197 .eraseblocks = { {32 * 1024, 2} },
3198 .block_erase = spi_block_erase_d8,
3199 }, {
3200 .eraseblocks = { {64 * 1024, 1} },
3201 .block_erase = spi_block_erase_c7,
3202 }
3203 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003204 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003205 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003206 },
3207
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003208 {
3209 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003210 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003211 .bustype = CHIP_BUSTYPE_PARALLEL,
3212 .manufacture_id = PMC_ID_NOPREFIX,
3213 .model_id = PMC_29F002T,
3214 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003215 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003216 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3217 .tested = TEST_UNTESTED,
3218 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003219 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003220 .block_erasers =
3221 {
3222 {
3223 .eraseblocks = {
3224 {128 * 1024, 1},
3225 {96 * 1024, 1},
3226 {8 * 1024, 2},
3227 {16 * 1024, 1},
3228 },
Sean Nelson35727f72010-01-28 23:55:12 +00003229 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003230 }, {
3231 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003232 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003233 },
3234 },
Sean Nelson35727f72010-01-28 23:55:12 +00003235 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003236 .read = read_memmapped,
3237 },
3238
3239 {
3240 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003241 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003242 .bustype = CHIP_BUSTYPE_PARALLEL,
3243 .manufacture_id = PMC_ID_NOPREFIX,
3244 .model_id = PMC_29F002B,
3245 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003246 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003247 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003248 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003249 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003250 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003251 .block_erasers =
3252 {
3253 {
3254 .eraseblocks = {
3255 {16 * 1024, 1},
3256 {8 * 1024, 2},
3257 {96 * 1024, 1},
3258 {128 * 1024, 1},
3259 },
Sean Nelson35727f72010-01-28 23:55:12 +00003260 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003261 }, {
3262 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003263 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003264 },
3265 },
Sean Nelson35727f72010-01-28 23:55:12 +00003266 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003267 .read = read_memmapped,
3268 },
3269
3270 {
3271 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003272 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003273 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003274 .manufacture_id = PMC_ID_NOPREFIX,
3275 .model_id = PMC_39F010,
3276 .total_size = 128,
3277 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003278 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3279 .tested = TEST_UNTESTED,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003280 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003281 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003282 .block_erasers =
3283 {
3284 {
3285 .eraseblocks = { {4 * 1024, 32} },
3286 .block_erase = erase_sector_jedec,
3287 }, {
3288 .eraseblocks = { {64 * 1024, 2} },
3289 .block_erase = erase_block_jedec,
3290 }, {
3291 .eraseblocks = { {128 * 1024, 1} },
3292 .block_erase = erase_chip_block_jedec,
3293 }
3294 },
Sean Nelson35727f72010-01-28 23:55:12 +00003295 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003296 .read = read_memmapped,
3297 },
3298
3299 {
3300 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003301 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003302 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003303 .manufacture_id = PMC_ID_NOPREFIX,
3304 .model_id = PMC_49FL002,
3305 .total_size = 256,
3306 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003307 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3308 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003309 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003310 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00003311 /* .erase = NULL, Was: erase_49fl00x */
Sean Nelson5643c072010-01-19 03:23:07 +00003312 .block_erasers =
3313 {
3314 {
3315 .eraseblocks = { {4 * 1024, 64} },
3316 .block_erase = erase_sector_jedec,
3317 }, {
3318 .eraseblocks = { {16 * 1024, 16} },
3319 .block_erase = erase_block_jedec,
3320 }, {
3321 .eraseblocks = { {256 * 1024, 1} },
3322 .block_erase = erase_chip_block_jedec,
3323 }
3324 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003325 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003326 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003327 },
3328
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003329 {
3330 .vendor = "PMC",
3331 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003332 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003333 .manufacture_id = PMC_ID_NOPREFIX,
3334 .model_id = PMC_49FL004,
3335 .total_size = 512,
3336 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003337 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3338 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003339 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003340 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00003341 /* .erase = NULL, Was: erase_49fl00x */
Sean Nelson5643c072010-01-19 03:23:07 +00003342 .block_erasers =
3343 {
3344 {
3345 .eraseblocks = { {4 * 1024, 128} },
3346 .block_erase = erase_sector_jedec,
3347 }, {
3348 .eraseblocks = { {64 * 1024, 8} },
3349 .block_erase = erase_block_jedec,
3350 }, {
3351 .eraseblocks = { {512 * 1024, 1} },
3352 .block_erase = erase_chip_block_jedec,
3353 }
3354 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003355 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003356 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003357 },
3358
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003359 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003360 .vendor = "Sanyo",
3361 .name = "LF25FW203A",
3362 .bustype = CHIP_BUSTYPE_SPI,
3363 .manufacture_id = SANYO_ID,
3364 .model_id = SANYO_LE25FW203A,
3365 .total_size = 2048,
3366 .page_size = 256,
3367 .tested = TEST_UNTESTED,
3368 .probe = probe_spi_rdid,
3369 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003370 .block_erasers =
3371 {
3372 {
3373 .eraseblocks = { {64 * 1024, 32} },
3374 .block_erase = spi_block_erase_d8,
3375 }, {
3376 .eraseblocks = { {2 * 1024 * 1024, 1} },
3377 .block_erase = spi_block_erase_c7,
3378 }
3379 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003380 .write = spi_chip_write_256,
3381 .read = spi_chip_read,
3382 },
3383
3384 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003385 .vendor = "Sharp",
3386 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003387 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003388 .manufacture_id = SHARP_ID,
3389 .model_id = SHARP_LHF00L04,
3390 .total_size = 1024,
3391 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003392 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003393 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003394 .probe = probe_49lfxxxc,
3395 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003396 .block_erasers =
3397 {
3398 {
3399 .eraseblocks = {
3400 {64 * 1024, 15},
3401 {8 * 1024, 8}
3402 },
3403 .block_erase = erase_lhf00l04_block,
3404 }, {
3405 .eraseblocks = {
3406 {1024 * 1024, 1}
3407 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003408 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003409 },
3410 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003411 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003412 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003413 },
3414
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003415 {
3416 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003417 .name = "S25FL008A",
3418 .bustype = CHIP_BUSTYPE_SPI,
3419 .manufacture_id = SPANSION_ID,
3420 .model_id = SPANSION_S25FL008A,
3421 .total_size = 1024,
3422 .page_size = 256,
3423 .tested = TEST_OK_PREW,
3424 .probe = probe_spi_rdid,
3425 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003426 .block_erasers =
3427 {
3428 {
3429 .eraseblocks = { {64 * 1024, 16} },
3430 .block_erase = spi_block_erase_d8,
3431 }, {
3432 .eraseblocks = { {1024 * 1024, 1} },
3433 .block_erase = spi_block_erase_c7,
3434 }
3435 },
3436 .write = spi_chip_write_256,
3437 .read = spi_chip_read,
3438 },
3439
3440 {
3441 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003442 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003443 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003444 .manufacture_id = SPANSION_ID,
3445 .model_id = SPANSION_S25FL016A,
3446 .total_size = 2048,
3447 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003448 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003449 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003450 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003451 .block_erasers =
3452 {
3453 {
3454 .eraseblocks = { {64 * 1024, 32} },
3455 .block_erase = spi_block_erase_d8,
3456 }, {
3457 .eraseblocks = { {2 * 1024 * 1024, 1} },
3458 .block_erase = spi_block_erase_c7,
3459 }
3460 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003461 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003462 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003463 },
3464
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003465 {
3466 .vendor = "SST",
3467 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003468 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003469 .manufacture_id = SST_ID,
3470 .model_id = SST_25VF016B,
3471 .total_size = 2048,
3472 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003473 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003474 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003475 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003476 .block_erasers =
3477 {
3478 {
3479 .eraseblocks = { {4 * 1024, 512} },
3480 .block_erase = spi_block_erase_20,
3481 }, {
3482 .eraseblocks = { {32 * 1024, 64} },
3483 .block_erase = spi_block_erase_52,
3484 }, {
3485 .eraseblocks = { {64 * 1024, 32} },
3486 .block_erase = spi_block_erase_d8,
3487 }, {
3488 .eraseblocks = { {2 * 1024 * 1024, 1} },
3489 .block_erase = spi_block_erase_60,
3490 }, {
3491 .eraseblocks = { {2 * 1024 * 1024, 1} },
3492 .block_erase = spi_block_erase_c7,
3493 },
3494 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003495 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003496 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003497 },
3498
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003499 {
3500 .vendor = "SST",
3501 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003502 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003503 .manufacture_id = SST_ID,
3504 .model_id = SST_25VF032B,
3505 .total_size = 4096,
3506 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003507 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003508 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003509 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003510 .block_erasers =
3511 {
3512 {
3513 .eraseblocks = { {4 * 1024, 1024} },
3514 .block_erase = spi_block_erase_20,
3515 }, {
3516 .eraseblocks = { {32 * 1024, 128} },
3517 .block_erase = spi_block_erase_52,
3518 }, {
3519 .eraseblocks = { {64 * 1024, 64} },
3520 .block_erase = spi_block_erase_d8,
3521 }, {
3522 .eraseblocks = { {4 * 1024 * 1024, 1} },
3523 .block_erase = spi_block_erase_60,
3524 }, {
3525 .eraseblocks = { {4 * 1024 * 1024, 1} },
3526 .block_erase = spi_block_erase_c7,
3527 },
3528 },
3529 .write = spi_chip_write_1,
3530 .read = spi_chip_read,
3531 },
3532
3533 {
3534 .vendor = "SST",
3535 .name = "SST25VF040.REMS",
3536 .bustype = CHIP_BUSTYPE_SPI,
3537 .manufacture_id = SST_ID,
3538 .model_id = SST_25VF040_REMS,
3539 .total_size = 512,
3540 .page_size = 256,
3541 .tested = TEST_OK_PR,
3542 .probe = probe_spi_rems,
3543 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003544 .block_erasers =
3545 {
3546 {
3547 .eraseblocks = { {4 * 1024, 128} },
3548 .block_erase = spi_block_erase_20,
3549 }, {
3550 .eraseblocks = { {32 * 1024, 16} },
3551 .block_erase = spi_block_erase_52,
3552 }, {
3553 .eraseblocks = { {512 * 1024, 1} },
3554 .block_erase = spi_block_erase_60,
3555 },
3556 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003557 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003558 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003559 },
3560
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003561 {
3562 .vendor = "SST",
3563 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003564 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003565 .manufacture_id = SST_ID,
3566 .model_id = SST_25VF040B,
3567 .total_size = 512,
3568 .page_size = 256,
3569 .tested = TEST_UNTESTED,
3570 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003571 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003572 .block_erasers =
3573 {
3574 {
3575 .eraseblocks = { {4 * 1024, 128} },
3576 .block_erase = spi_block_erase_20,
3577 }, {
3578 .eraseblocks = { {32 * 1024, 16} },
3579 .block_erase = spi_block_erase_52,
3580 }, {
3581 .eraseblocks = { {64 * 1024, 8} },
3582 .block_erase = spi_block_erase_d8,
3583 }, {
3584 .eraseblocks = { {512 * 1024, 1} },
3585 .block_erase = spi_block_erase_60,
3586 }, {
3587 .eraseblocks = { {512 * 1024, 1} },
3588 .block_erase = spi_block_erase_c7,
3589 },
3590 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003591 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003592 .read = spi_chip_read,
3593 },
3594
3595 {
3596 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003597 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003598 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003599 .manufacture_id = SST_ID,
3600 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003601 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003602 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003603 .tested = TEST_OK_PR,
3604 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003605 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003606 .block_erasers =
3607 {
3608 {
3609 .eraseblocks = { {4 * 1024, 128} },
3610 .block_erase = spi_block_erase_20,
3611 }, {
3612 .eraseblocks = { {32 * 1024, 16} },
3613 .block_erase = spi_block_erase_52,
3614 }, {
3615 .eraseblocks = { {64 * 1024, 8} },
3616 .block_erase = spi_block_erase_d8,
3617 }, {
3618 .eraseblocks = { {512 * 1024, 1} },
3619 .block_erase = spi_block_erase_60,
3620 }, {
3621 .eraseblocks = { {512 * 1024, 1} },
3622 .block_erase = spi_block_erase_c7,
3623 },
3624 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003625 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003626 .read = spi_chip_read,
3627 },
3628
3629 {
3630 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003631 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003632 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003633 .manufacture_id = SST_ID,
3634 .model_id = SST_25VF080B,
3635 .total_size = 1024,
3636 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003637 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003638 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003639 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003640 .block_erasers =
3641 {
3642 {
3643 .eraseblocks = { {4 * 1024, 256} },
3644 .block_erase = spi_block_erase_20,
3645 }, {
3646 .eraseblocks = { {32 * 1024, 32} },
3647 .block_erase = spi_block_erase_52,
3648 }, {
3649 .eraseblocks = { {64 * 1024, 16} },
3650 .block_erase = spi_block_erase_d8,
3651 }, {
3652 .eraseblocks = { {1024 * 1024, 1} },
3653 .block_erase = spi_block_erase_60,
3654 }, {
3655 .eraseblocks = { {1024 * 1024, 1} },
3656 .block_erase = spi_block_erase_c7,
3657 },
3658 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003659 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003660 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003661 },
3662
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003663 {
3664 .vendor = "SST",
3665 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003666 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003667 .manufacture_id = SST_ID,
3668 .model_id = SST_28SF040,
3669 .total_size = 512,
3670 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003671 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003672 .tested = TEST_UNTESTED,
3673 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003674 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003675 .block_erasers =
3676 {
3677 {
3678 .eraseblocks = { {128, 4096} },
3679 .block_erase = erase_sector_28sf040,
3680 }, {
3681 .eraseblocks = { {512 * 1024, 1} },
3682 .block_erase = erase_chip_28sf040,
3683 }
3684 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003685 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003686 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003687 },
3688
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003689 {
3690 .vendor = "SST",
3691 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003692 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003693 .manufacture_id = SST_ID,
3694 .model_id = SST_29EE010,
3695 .total_size = 128,
3696 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003697 .feature_bits = FEATURE_LONG_RESET,
3698 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003699 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003700 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003701 .block_erasers =
3702 {
3703 {
3704 .eraseblocks = { {128 * 1024, 1} },
3705 .block_erase = erase_chip_block_jedec,
3706 }
3707 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003708 .write = write_jedec,
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 = "SST29LE010",
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_29LE010,
3718 .total_size = 128,
3719 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003720 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003721 .tested = TEST_UNTESTED,
3722 .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 = "SST29EE020A",
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_29EE020A,
3741 .total_size = 256,
3742 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003743 .feature_bits = FEATURE_LONG_RESET,
3744 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003745 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003746 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003747 .block_erasers =
3748 {
3749 {
3750 .eraseblocks = { {256 * 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 = "SST29LE020",
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_29LE020,
3764 .total_size = 256,
3765 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003766 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003767 .tested = TEST_UNTESTED,
3768 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +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",
Uwe Hermann48da3f92010-01-23 15:15:19 +00003783 .name = "SST39SF512",
3784 .bustype = CHIP_BUSTYPE_PARALLEL,
3785 .manufacture_id = SST_ID,
3786 .model_id = SST_39SF512,
3787 .total_size = 64,
3788 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003789 .feature_bits = FEATURE_EITHER_RESET,
3790 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003791 .probe = probe_jedec,
3792 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00003793 .block_erasers =
3794 {
3795 {
3796 .eraseblocks = { {4 * 1024, 16} },
3797 .block_erase = erase_sector_jedec,
3798 }, {
3799 .eraseblocks = { {64 * 1024, 1} },
3800 .block_erase = erase_chip_block_jedec,
3801 }
3802 },
Sean Nelson35727f72010-01-28 23:55:12 +00003803 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003804 .read = read_memmapped,
3805 },
3806
3807 {
3808 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003809 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003810 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003811 .manufacture_id = SST_ID,
3812 .model_id = SST_39SF010,
3813 .total_size = 128,
3814 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003815 .feature_bits = FEATURE_EITHER_RESET,
3816 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003817 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003818 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003819 .block_erasers =
3820 {
3821 {
3822 .eraseblocks = { {4 * 1024, 32} },
3823 .block_erase = erase_sector_jedec,
3824 }, {
3825 .eraseblocks = { {128 * 1024, 1} },
3826 .block_erase = erase_chip_block_jedec,
3827 }
3828 },
Sean Nelson35727f72010-01-28 23:55:12 +00003829 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003830 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003831 },
3832
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003833 {
3834 .vendor = "SST",
3835 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003836 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003837 .manufacture_id = SST_ID,
3838 .model_id = SST_39SF020,
3839 .total_size = 256,
3840 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003841 .feature_bits = FEATURE_EITHER_RESET,
3842 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003843 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003844 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003845 .block_erasers =
3846 {
3847 {
3848 .eraseblocks = { {4 * 1024, 64} },
3849 .block_erase = erase_sector_jedec,
3850 }, {
3851 .eraseblocks = { {256 * 1024, 1} },
3852 .block_erase = erase_chip_block_jedec,
3853 }
3854 },
Sean Nelson35727f72010-01-28 23:55:12 +00003855 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003856 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003857 },
3858
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003859 {
3860 .vendor = "SST",
3861 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003862 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003863 .manufacture_id = SST_ID,
3864 .model_id = SST_39SF040,
3865 .total_size = 512,
3866 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003867 .feature_bits = FEATURE_EITHER_RESET,
3868 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003869 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003870 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003871 .block_erasers =
3872 {
3873 {
3874 .eraseblocks = { {4 * 1024, 128} },
3875 .block_erase = erase_sector_jedec,
3876 }, {
3877 .eraseblocks = { {512 * 1024, 1} },
3878 .block_erase = erase_chip_block_jedec,
3879 }
3880 },
Sean Nelson35727f72010-01-28 23:55:12 +00003881 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003882 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003883 },
3884
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003885 {
3886 .vendor = "SST",
3887 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00003888 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003889 .manufacture_id = SST_ID,
3890 .model_id = SST_39VF512,
3891 .total_size = 64,
3892 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003893 .feature_bits = FEATURE_EITHER_RESET,
3894 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003895 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003896 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00003897 .block_erasers =
3898 {
3899 {
3900 .eraseblocks = { {4 * 1024, 16} },
3901 .block_erase = erase_sector_jedec,
3902 }, {
3903 .eraseblocks = { {64 * 1024, 1} },
3904 .block_erase = erase_chip_block_jedec,
3905 }
3906 },
Sean Nelson35727f72010-01-28 23:55:12 +00003907 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003908 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003909 },
3910
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003911 {
3912 .vendor = "SST",
3913 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003914 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003915 .manufacture_id = SST_ID,
3916 .model_id = SST_39VF010,
3917 .total_size = 128,
3918 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003919 .feature_bits = FEATURE_EITHER_RESET,
3920 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003921 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003922 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003923 .block_erasers =
3924 {
3925 {
3926 .eraseblocks = { {4 * 1024, 32} },
3927 .block_erase = erase_sector_jedec,
3928 }, {
3929 .eraseblocks = { {128 * 1024, 1} },
3930 .block_erase = erase_chip_block_jedec,
3931 }
3932 },
Sean Nelson35727f72010-01-28 23:55:12 +00003933 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003934 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003935 },
3936
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003937 {
3938 .vendor = "SST",
3939 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003940 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003941 .manufacture_id = SST_ID,
3942 .model_id = SST_39VF020,
3943 .total_size = 256,
3944 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003945 .feature_bits = FEATURE_EITHER_RESET,
3946 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003947 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003948 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003949 .block_erasers =
3950 {
3951 {
3952 .eraseblocks = { {4 * 1024, 64} },
3953 .block_erase = erase_sector_jedec,
3954 }, {
3955 .eraseblocks = { {256 * 1024, 1} },
3956 .block_erase = erase_chip_block_jedec,
3957 }
3958 },
Sean Nelson35727f72010-01-28 23:55:12 +00003959 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003960 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003961 },
3962
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003963 {
3964 .vendor = "SST",
3965 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003966 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003967 .manufacture_id = SST_ID,
3968 .model_id = SST_39VF040,
3969 .total_size = 512,
3970 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003971 .feature_bits = FEATURE_EITHER_RESET,
3972 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003973 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003974 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003975 .block_erasers =
3976 {
3977 {
3978 .eraseblocks = { {4 * 1024, 128} },
3979 .block_erase = erase_sector_jedec,
3980 }, {
3981 .eraseblocks = { {512 * 1024, 1} },
3982 .block_erase = erase_chip_block_jedec,
3983 }
3984 },
Sean Nelson35727f72010-01-28 23:55:12 +00003985 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003986 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00003987 },
FENG yu ningff692fb2008-12-08 18:15:10 +00003988
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003989 {
3990 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00003991 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00003992 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003993 .manufacture_id = SST_ID,
3994 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00003995 .total_size = 1024,
3996 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003997 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00003998 .tested = TEST_UNTESTED,
3999 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004000 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004001 .block_erasers =
4002 {
4003 {
4004 .eraseblocks = { {4 * 1024, 256} },
4005 .block_erase = erase_sector_jedec,
4006 }, {
4007 .eraseblocks = { {64 * 1024, 16} },
4008 .block_erase = erase_block_jedec,
4009 }, {
4010 .eraseblocks = { {1024 * 1024, 1} },
4011 .block_erase = erase_chip_block_jedec,
4012 }
4013 },
Sean Nelson35727f72010-01-28 23:55:12 +00004014 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004015 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004016 },
4017
4018 {
4019 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004020 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004021 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004022 .manufacture_id = SST_ID,
4023 .model_id = SST_49LF002A,
4024 .total_size = 256,
4025 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004026 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004027 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004028 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004029 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004030 .block_erasers =
4031 {
4032 {
4033 .eraseblocks = { {4 * 1024, 64} },
4034 .block_erase = erase_sst_fwhub_sector,
4035 }, {
4036 .eraseblocks = { {16 * 1024, 16} },
4037 .block_erase = erase_sst_fwhub_block,
4038 }, {
4039 .eraseblocks = { {256 * 1024, 1} },
4040 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4041 }
4042 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004043 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004044 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004045 },
4046
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004047 {
4048 .vendor = "SST",
4049 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004050 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004051 .manufacture_id = SST_ID,
4052 .model_id = SST_49LF003A,
4053 .total_size = 384,
4054 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004055 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004056 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004057 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004058 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004059 .block_erasers =
4060 {
4061 {
4062 .eraseblocks = { {4 * 1024, 96} },
4063 .block_erase = erase_sst_fwhub_sector,
4064 }, {
4065 .eraseblocks = { {64 * 1024, 6} },
4066 .block_erase = erase_sst_fwhub_block,
4067 }, {
4068 .eraseblocks = { {384 * 1024, 1} },
4069 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4070 }
4071 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004072 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004073 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004074 },
4075
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004076 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004077 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4078 * and is only honored for 64k block erase, but not 4k sector erase.
4079 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004080 .vendor = "SST",
4081 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004082 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004083 .manufacture_id = SST_ID,
4084 .model_id = SST_49LF004A,
4085 .total_size = 512,
4086 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004087 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004088 .tested = TEST_OK_PREW,
4089 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004090 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004091 .block_erasers =
4092 {
4093 {
4094 .eraseblocks = { {4 * 1024, 128} },
4095 .block_erase = erase_sector_jedec, /* missing unlock */
4096 }, {
4097 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00004098 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004099 }, {
4100 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004101 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004102 },
4103 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004104 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004105 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004106 },
4107
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004108 {
4109 .vendor = "SST",
4110 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004111 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004112 .manufacture_id = SST_ID,
4113 .model_id = SST_49LF004C,
4114 .total_size = 512,
4115 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004116 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004117 .tested = TEST_UNTESTED,
4118 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004119 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004120 .block_erasers =
4121 {
4122 {
4123 .eraseblocks = { {4 * 1024, 128} },
4124 .block_erase = erase_sector_49lfxxxc,
4125 }, {
4126 .eraseblocks = {
4127 {64 * 1024, 7},
4128 {32 * 1024, 1},
4129 {8 * 1024, 2},
4130 {16 * 1024, 1},
4131 },
4132 .block_erase = erase_block_49lfxxxc,
4133 }
4134 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004135 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004136 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004137 },
4138
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004139 {
4140 .vendor = "SST",
4141 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004142 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004143 .manufacture_id = SST_ID,
4144 .model_id = SST_49LF008A,
4145 .total_size = 1024,
4146 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004147 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004148 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004149 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004150 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004151 .block_erasers =
4152 {
4153 {
4154 .eraseblocks = { {4 * 1024, 256} },
4155 .block_erase = erase_sst_fwhub_sector,
4156 }, {
4157 .eraseblocks = { {64 * 1024, 16} },
4158 .block_erase = erase_sst_fwhub_block,
4159 }, {
4160 .eraseblocks = { {1024 * 1024, 1} },
4161 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4162 }
4163 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004164 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004165 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004166 },
4167
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004168 {
4169 .vendor = "SST",
4170 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004171 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004172 .manufacture_id = SST_ID,
4173 .model_id = SST_49LF008C,
4174 .total_size = 1024,
4175 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004176 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004177 .tested = TEST_UNTESTED,
4178 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004179 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004180 .block_erasers =
4181 {
4182 {
4183 .eraseblocks = { {4 * 1024, 256} },
4184 .block_erase = erase_sector_49lfxxxc,
4185 }, {
4186 .eraseblocks = {
4187 {64 * 1024, 15},
4188 {32 * 1024, 1},
4189 {8 * 1024, 2},
4190 {16 * 1024, 1},
4191 },
4192 .block_erase = erase_block_49lfxxxc,
4193 }
4194 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004195 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004196 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004197 },
4198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004199 {
4200 .vendor = "SST",
4201 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004202 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004203 .manufacture_id = SST_ID,
4204 .model_id = SST_49LF016C,
4205 .total_size = 2048,
4206 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004207 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004208 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004209 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004210 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004211 .block_erasers =
4212 {
4213 {
4214 .eraseblocks = { {4 * 1024, 512} },
4215 .block_erase = erase_sector_49lfxxxc,
4216 }, {
4217 .eraseblocks = {
4218 {64 * 1024, 31},
4219 {32 * 1024, 1},
4220 {8 * 1024, 2},
4221 {16 * 1024, 1},
4222 },
4223 .block_erase = erase_block_49lfxxxc,
4224 }
4225 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004226 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004227 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004228 },
4229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004230 {
4231 .vendor = "SST",
4232 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004233 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004234 .manufacture_id = SST_ID,
4235 .model_id = SST_49LF020,
4236 .total_size = 256,
4237 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004238 .feature_bits = FEATURE_EITHER_RESET,
4239 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004240 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004241 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004242 .block_erasers =
4243 {
4244 {
4245 .eraseblocks = { {4 * 1024, 64} },
4246 .block_erase = erase_sector_jedec,
4247 }, {
4248 .eraseblocks = { {16 * 1024, 16} },
4249 .block_erase = erase_block_jedec,
4250 }, {
4251 .eraseblocks = { {256 * 1024, 1} },
4252 .block_erase = NULL,
4253 }
4254 },
Sean Nelson35727f72010-01-28 23:55:12 +00004255 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004256 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004257 },
4258
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004259 {
4260 .vendor = "SST",
4261 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004262 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004263 .manufacture_id = SST_ID,
4264 .model_id = SST_49LF020A,
4265 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004266 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004267 .feature_bits = FEATURE_EITHER_RESET,
4268 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004269 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004270 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004271 .block_erasers =
4272 {
4273 {
4274 .eraseblocks = { {4 * 1024, 64} },
4275 .block_erase = erase_sector_jedec,
4276 }, {
4277 .eraseblocks = { {16 * 1024, 16} },
4278 .block_erase = erase_block_jedec,
4279 }, {
4280 .eraseblocks = { {256 * 1024, 1} },
4281 .block_erase = NULL,
4282 }
4283 },
Sean Nelson35727f72010-01-28 23:55:12 +00004284 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004285 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004286 },
4287
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004288 {
4289 .vendor = "SST",
4290 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004291 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004292 .manufacture_id = SST_ID,
4293 .model_id = SST_49LF040,
4294 .total_size = 512,
4295 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004296 .feature_bits = FEATURE_EITHER_RESET,
4297 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004298 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004299 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004300 .block_erasers =
4301 {
4302 {
4303 .eraseblocks = { {4 * 1024, 128} },
4304 .block_erase = erase_sector_jedec,
4305 }, {
4306 .eraseblocks = { {64 * 1024, 8} },
4307 .block_erase = erase_block_jedec,
4308 }, {
4309 .eraseblocks = { {512 * 1024, 1} },
4310 .block_erase = NULL,
4311 }
4312 },
Sean Nelson35727f72010-01-28 23:55:12 +00004313 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004314 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004315 },
4316
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004317 {
4318 .vendor = "SST",
4319 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004320 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004321 .manufacture_id = SST_ID,
4322 .model_id = SST_49LF040B,
4323 .total_size = 512,
4324 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004325 .feature_bits = FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004326 .tested = TEST_UNTESTED,
4327 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004328 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004329 .block_erasers =
4330 {
4331 {
4332 .eraseblocks = { {4 * 1024, 128} },
4333 .block_erase = erase_sector_jedec,
4334 }, {
4335 .eraseblocks = { {64 * 1024, 8} },
4336 .block_erase = erase_block_jedec,
4337 }, {
4338 .eraseblocks = { {512 * 1024, 1} },
4339 .block_erase = NULL,
4340 }
4341 },
Sean Nelson35727f72010-01-28 23:55:12 +00004342 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004343 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004344 },
4345
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004346 {
4347 .vendor = "SST",
4348 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004349 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004350 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004351 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004352 .total_size = 1024,
4353 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004354 .feature_bits = FEATURE_EITHER_RESET,
4355 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004356 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004357 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004358 .block_erasers =
4359 {
4360 {
4361 .eraseblocks = { {4 * 1024, 256} },
4362 .block_erase = erase_sector_jedec,
4363 }, {
4364 .eraseblocks = { {64 * 1024, 16} },
4365 .block_erase = erase_block_jedec,
4366 }, {
4367 .eraseblocks = { {1024 * 1024, 1} },
4368 .block_erase = NULL,
4369 }
4370 },
Sean Nelson35727f72010-01-28 23:55:12 +00004371 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004372 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004373 },
4374
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004375 {
4376 .vendor = "SST",
4377 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004378 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004379 .manufacture_id = SST_ID,
4380 .model_id = SST_49LF160C,
4381 .total_size = 2048,
4382 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004383 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004384 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004385 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004386 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00004387 /* .erase = NULL, Was: erase_49flxxxc */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004388 .block_erasers =
4389 {
4390 {
4391 .eraseblocks = { {4 * 1024, 512} },
4392 .block_erase = erase_sector_49lfxxxc,
4393 }, {
4394 .eraseblocks = {
4395 {64 * 1024, 31},
4396 {32 * 1024, 1},
4397 {8 * 1024, 2},
4398 {16 * 1024, 1},
4399 },
4400 .block_erase = erase_block_49lfxxxc,
4401 }
4402 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004403 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004404 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004405 },
4406
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004407 {
4408 .vendor = "ST",
4409 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004410 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004411 .manufacture_id = ST_ID,
4412 .model_id = ST_M25P05A,
4413 .total_size = 64,
4414 .page_size = 256,
4415 .tested = TEST_UNTESTED,
4416 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004417 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004418 .block_erasers =
4419 {
4420 {
4421 .eraseblocks = { {32 * 1024, 2} },
4422 .block_erase = spi_block_erase_d8,
4423 }, {
4424 .eraseblocks = { {64 * 1024, 1} },
4425 .block_erase = spi_block_erase_c7,
4426 }
4427 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004428 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004429 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004430 },
4431
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004432 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4433 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
4434 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
4435 * only is successful if RDID does not work.
4436 */
4437 {
4438 .vendor = "ST",
4439 .name = "M25P05.RES",
4440 .bustype = CHIP_BUSTYPE_SPI,
4441 .manufacture_id = ST_ID,
4442 .model_id = ST_M25P05_RES,
4443 .total_size = 64,
4444 .page_size = 256,
4445 .tested = TEST_UNTESTED,
4446 .probe = probe_spi_res,
4447 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004448 .block_erasers =
4449 {
4450 {
4451 .eraseblocks = { {32 * 1024, 2} },
4452 .block_erase = spi_block_erase_d8,
4453 }, {
4454 .eraseblocks = { {64 * 1024, 1} },
4455 .block_erase = spi_block_erase_c7,
4456 }
4457 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004458 .write = spi_chip_write_1, /* 128 */
4459 .read = spi_chip_read,
4460 },
4461
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004462 {
4463 .vendor = "ST",
4464 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004465 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004466 .manufacture_id = ST_ID,
4467 .model_id = ST_M25P10A,
4468 .total_size = 128,
4469 .page_size = 256,
4470 .tested = TEST_UNTESTED,
4471 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004472 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004473 .block_erasers =
4474 {
4475 {
4476 .eraseblocks = { {32 * 1024, 4} },
4477 .block_erase = spi_block_erase_d8,
4478 }, {
4479 .eraseblocks = { {128 * 1024, 1} },
4480 .block_erase = spi_block_erase_c7,
4481 }
4482 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004483 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004484 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004485 },
4486
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004487 /* The ST M25P10 has the same problem as the M25P05. */
4488 {
4489 .vendor = "ST",
4490 .name = "M25P10.RES",
4491 .bustype = CHIP_BUSTYPE_SPI,
4492 .manufacture_id = ST_ID,
4493 .model_id = ST_M25P10_RES,
4494 .total_size = 128,
4495 .page_size = 256,
4496 .tested = TEST_UNTESTED,
4497 .probe = probe_spi_res,
4498 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004499 .block_erasers =
4500 {
4501 {
4502 .eraseblocks = { {32 * 1024, 4} },
4503 .block_erase = spi_block_erase_d8,
4504 }, {
4505 .eraseblocks = { {128 * 1024, 1} },
4506 .block_erase = spi_block_erase_c7,
4507 }
4508 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004509 .write = spi_chip_write_1, /* 128 */
4510 .read = spi_chip_read,
4511 },
4512
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004513 {
4514 .vendor = "ST",
4515 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004516 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004517 .manufacture_id = ST_ID,
4518 .model_id = ST_M25P20,
4519 .total_size = 256,
4520 .page_size = 256,
4521 .tested = TEST_UNTESTED,
4522 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004523 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004524 .block_erasers =
4525 {
4526 {
4527 .eraseblocks = { {64 * 1024, 4} },
4528 .block_erase = spi_block_erase_d8,
4529 }, {
4530 .eraseblocks = { {256 * 1024, 1} },
4531 .block_erase = spi_block_erase_c7,
4532 }
4533 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004534 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004535 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004536 },
4537
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004538 {
4539 .vendor = "ST",
4540 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004541 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004542 .manufacture_id = ST_ID,
4543 .model_id = ST_M25P40,
4544 .total_size = 512,
4545 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004546 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004547 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004548 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004549 .block_erasers =
4550 {
4551 {
4552 .eraseblocks = { {64 * 1024, 8} },
4553 .block_erase = spi_block_erase_d8,
4554 }, {
4555 .eraseblocks = { {512 * 1024, 1} },
4556 .block_erase = spi_block_erase_c7,
4557 }
4558 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004559 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004560 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004561 },
4562
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004563 {
4564 .vendor = "ST",
4565 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004566 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004567 .manufacture_id = ST_ID,
4568 .model_id = ST_M25P40_RES,
4569 .total_size = 512,
4570 .page_size = 256,
4571 .tested = TEST_UNTESTED,
4572 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004573 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004574 .block_erasers =
4575 {
4576 {
4577 .eraseblocks = { {64 * 1024, 8} },
4578 .block_erase = spi_block_erase_d8,
4579 }, {
4580 .eraseblocks = { {512 * 1024, 1} },
4581 .block_erase = spi_block_erase_c7,
4582 }
4583 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004584 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004585 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004586 },
4587
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004588 {
4589 .vendor = "ST",
4590 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004591 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004592 .manufacture_id = ST_ID,
4593 .model_id = ST_M25P80,
4594 .total_size = 1024,
4595 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004596 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004597 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004598 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004599 .block_erasers =
4600 {
4601 {
4602 .eraseblocks = { {64 * 1024, 16} },
4603 .block_erase = spi_block_erase_d8,
4604 }, {
4605 .eraseblocks = { {1024 * 1024, 1} },
4606 .block_erase = spi_block_erase_c7,
4607 }
4608 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004609 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004610 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004611 },
4612
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004613 {
4614 .vendor = "ST",
4615 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004616 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004617 .manufacture_id = ST_ID,
4618 .model_id = ST_M25P16,
4619 .total_size = 2048,
4620 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004621 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004622 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004623 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004624 .block_erasers =
4625 {
4626 {
4627 .eraseblocks = { {64 * 1024, 32} },
4628 .block_erase = spi_block_erase_d8,
4629 }, {
4630 .eraseblocks = { {2 * 1024 * 1024, 1} },
4631 .block_erase = spi_block_erase_c7,
4632 }
4633 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004634 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004635 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004636 },
4637
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004638 {
4639 .vendor = "ST",
4640 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004641 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004642 .manufacture_id = ST_ID,
4643 .model_id = ST_M25P32,
4644 .total_size = 4096,
4645 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004646 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004647 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004648 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004649 .block_erasers =
4650 {
4651 {
4652 .eraseblocks = { {64 * 1024, 64} },
4653 .block_erase = spi_block_erase_d8,
4654 }, {
4655 .eraseblocks = { {4 * 1024 * 1024, 1} },
4656 .block_erase = spi_block_erase_c7,
4657 }
4658 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004659 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004660 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004661 },
4662
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004663 {
4664 .vendor = "ST",
4665 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004666 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004667 .manufacture_id = ST_ID,
4668 .model_id = ST_M25P64,
4669 .total_size = 8192,
4670 .page_size = 256,
4671 .tested = TEST_UNTESTED,
4672 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004673 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004674 .block_erasers =
4675 {
4676 {
4677 .eraseblocks = { {64 * 1024, 128} },
4678 .block_erase = spi_block_erase_d8,
4679 }, {
4680 .eraseblocks = { {8 * 1024 * 1024, 1} },
4681 .block_erase = spi_block_erase_c7,
4682 }
4683 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004684 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004685 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004686 },
4687
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004688 {
4689 .vendor = "ST",
4690 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004691 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004692 .manufacture_id = ST_ID,
4693 .model_id = ST_M25P128,
4694 .total_size = 16384,
4695 .page_size = 256,
4696 .tested = TEST_UNTESTED,
4697 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004698 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004699 .block_erasers =
4700 {
4701 {
4702 .eraseblocks = { {256 * 1024, 64} },
4703 .block_erase = spi_block_erase_d8,
4704 }, {
4705 .eraseblocks = { {16 * 1024 * 1024, 1} },
4706 .block_erase = spi_block_erase_c7,
4707 }
4708 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004709 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004710 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004711 },
4712
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004713 {
4714 .vendor = "ST",
4715 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004716 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004717 .manufacture_id = ST_ID,
4718 .model_id = ST_M29F002B,
4719 .total_size = 256,
4720 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004721 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004722 .tested = TEST_UNTESTED,
4723 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004724 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004725 .block_erasers =
4726 {
4727 {
4728 .eraseblocks = {
4729 {16 * 1024, 1},
4730 {8 * 1024, 2},
4731 {32 * 1024, 1},
4732 {64 * 1024, 3},
4733 },
4734 .block_erase = erase_sector_jedec,
4735 }, {
4736 .eraseblocks = { {256 * 1024, 1} },
4737 .block_erase = erase_chip_block_jedec,
4738 }
4739 },
Sean Nelson35727f72010-01-28 23:55:12 +00004740 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004741 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004742 },
4743
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004744 {
4745 .vendor = "ST",
4746 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004747 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004748 .manufacture_id = ST_ID,
4749 .model_id = ST_M29F002T,
4750 .total_size = 256,
4751 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004752 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
4753 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004754 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004755 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004756 .block_erasers =
4757 {
4758 {
4759 .eraseblocks = {
4760 {64 * 1024, 3},
4761 {32 * 1024, 1},
4762 {8 * 1024, 2},
4763 {16 * 1024, 1},
4764 },
4765 .block_erase = erase_sector_jedec,
4766 }, {
4767 .eraseblocks = { {256 * 1024, 1} },
4768 .block_erase = erase_chip_block_jedec,
4769 }
4770 },
Sean Nelson35727f72010-01-28 23:55:12 +00004771 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004772 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004773 },
4774
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004775 {
4776 .vendor = "ST",
4777 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004778 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004779 .manufacture_id = ST_ID,
4780 .model_id = ST_M29F040B,
4781 .total_size = 512,
4782 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004783 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4784 .tested = TEST_UNTESTED,
4785 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004786 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004787 .block_erasers =
4788 {
4789 {
4790 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004791 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004792 }, {
4793 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004794 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004795 }
4796 },
Sean Nelson35727f72010-01-28 23:55:12 +00004797 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004798 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004799 },
4800
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004801 {
Sean Nelson35727f72010-01-28 23:55:12 +00004802 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004803 .vendor = "ST",
4804 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004805 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004806 .manufacture_id = ST_ID,
4807 .model_id = ST_M29F400BT,
4808 .total_size = 512,
4809 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004810 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004811 .tested = TEST_UNTESTED,
4812 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004813 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004814 .block_erasers =
4815 {
4816 {
4817 .eraseblocks = {
4818 {64 * 1024, 7},
4819 {32 * 1024, 1},
4820 {8 * 1024, 2},
4821 {16 * 1024, 1},
4822 },
4823 .block_erase = block_erase_m29f400bt,
4824 }, {
4825 .eraseblocks = { {512 * 1024, 1} },
4826 .block_erase = block_erase_chip_m29f400bt,
4827 }
4828 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004829 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004830 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004831 },
4832
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004833 {
4834 .vendor = "ST",
4835 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004836 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004837 .manufacture_id = ST_ID,
4838 .model_id = ST_M29W010B,
4839 .total_size = 128,
4840 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004841 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004842 .tested = TEST_UNTESTED,
4843 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004844 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004845 .block_erasers =
4846 {
4847 {
4848 .eraseblocks = { {16 * 1024, 8}, },
4849 .block_erase = erase_sector_jedec,
4850 }, {
4851 .eraseblocks = { {128 * 1024, 1} },
4852 .block_erase = erase_chip_block_jedec,
4853 }
4854 },
Sean Nelson35727f72010-01-28 23:55:12 +00004855 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004856 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004857 },
4858
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004859 {
4860 .vendor = "ST",
4861 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004862 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004863 .manufacture_id = ST_ID,
4864 .model_id = ST_M29W040B,
4865 .total_size = 512,
4866 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004867 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004868 .tested = TEST_UNTESTED,
4869 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004870 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004871 .block_erasers =
4872 {
4873 {
4874 .eraseblocks = { {64 * 1024, 8}, },
4875 .block_erase = erase_sector_jedec,
4876 }, {
4877 .eraseblocks = { {512 * 1024, 1} },
4878 .block_erase = erase_chip_block_jedec,
4879 }
4880 },
Sean Nelson35727f72010-01-28 23:55:12 +00004881 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004882 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004883 },
4884
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004885 {
4886 .vendor = "ST",
4887 .name = "M29W512B",
4888 .bustype = CHIP_BUSTYPE_PARALLEL,
4889 .manufacture_id = ST_ID,
4890 .model_id = ST_M29W512B,
4891 .total_size = 64,
4892 .page_size = 64 * 1024,
4893 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4894 .tested = TEST_OK_PREW,
4895 .probe = probe_jedec,
4896 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004897 .block_erasers =
4898 {
4899 {
4900 .eraseblocks = { {64 * 1024, 1} },
4901 .block_erase = erase_chip_block_jedec,
4902 }
4903 },
4904 .write = write_jedec_1,
4905 .read = read_memmapped,
4906 },
4907
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004908 {
4909 .vendor = "ST",
4910 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00004911 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004912 .manufacture_id = ST_ID,
4913 .model_id = ST_M50FLW040A,
4914 .total_size = 512,
4915 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004916 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004917 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004918 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004919 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004920 .block_erasers =
4921 {
4922 {
Sean Nelson329bde72010-01-19 16:39:19 +00004923 .eraseblocks = {
4924 {4 * 1024, 16}, /* sector */
4925 {64 * 1024, 5}, /* block */
4926 {4 * 1024, 16}, /* sector */
4927 {4 * 1024, 16}, /* sector */
4928 },
4929 .block_erase = NULL,
4930 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004931 .eraseblocks = { {64 * 1024, 8}, },
4932 .block_erase = erase_block_stm50flw0x0x,
4933 }, {
4934 .eraseblocks = { {512 * 1024, 1} },
4935 .block_erase = erase_chip_stm50flw0x0x,
4936 }
4937 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004938 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004939 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004940 },
4941
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004942 {
4943 .vendor = "ST",
4944 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00004945 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004946 .manufacture_id = ST_ID,
4947 .model_id = ST_M50FLW040B,
4948 .total_size = 512,
4949 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004950 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004951 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004952 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004953 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004954 .block_erasers =
4955 {
4956 {
Sean Nelson329bde72010-01-19 16:39:19 +00004957 .eraseblocks = {
4958 {4 * 1024, 16}, /* sector */
4959 {4 * 1024, 16}, /* sector */
4960 {64 * 1024, 5}, /* block */
4961 {4 * 1024, 16}, /* sector */
4962 },
4963 .block_erase = NULL,
4964 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004965 .eraseblocks = { {64 * 1024, 8}, },
4966 .block_erase = erase_block_stm50flw0x0x,
4967 }, {
4968 .eraseblocks = { {512 * 1024, 1} },
4969 .block_erase = erase_chip_stm50flw0x0x,
4970 }
4971 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004972 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004973 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004974 },
4975
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004976 {
4977 .vendor = "ST",
4978 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00004979 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004980 .manufacture_id = ST_ID,
4981 .model_id = ST_M50FLW080A,
4982 .total_size = 1024,
4983 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004984 .feature_bits = 0,
4985 .tested = TEST_UNTESTED,
4986 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004987 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004988 .block_erasers =
4989 {
4990 {
Sean Nelson329bde72010-01-19 16:39:19 +00004991 .eraseblocks = {
4992 {4 * 1024, 16}, /* sector */
4993 {64 * 1024, 13}, /* block */
4994 {4 * 1024, 16}, /* sector */
4995 {4 * 1024, 16}, /* sector */
4996 },
4997 .block_erase = NULL,
4998 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004999 .eraseblocks = { {64 * 1024, 16}, },
5000 .block_erase = erase_block_stm50flw0x0x,
5001 }, {
5002 .eraseblocks = { {1024 * 1024, 1} },
5003 .block_erase = erase_chip_stm50flw0x0x,
5004 }
5005 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005006 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005007 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005008 },
5009
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005010 {
5011 .vendor = "ST",
5012 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005013 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005014 .manufacture_id = ST_ID,
5015 .model_id = ST_M50FLW080B,
5016 .total_size = 1024,
5017 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005018 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005019 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005020 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005021 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005022 .block_erasers =
5023 {
5024 {
Sean Nelson329bde72010-01-19 16:39:19 +00005025 .eraseblocks = {
5026 {4 * 1024, 16}, /* sector */
5027 {4 * 1024, 16}, /* sector */
5028 {64 * 1024, 13}, /* block */
5029 {4 * 1024, 16}, /* sector */
5030 },
5031 .block_erase = NULL,
5032 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005033 .eraseblocks = { {64 * 1024, 16}, },
5034 .block_erase = erase_block_stm50flw0x0x,
5035 }, {
5036 .eraseblocks = { {1024 * 1024, 1} },
5037 .block_erase = erase_chip_stm50flw0x0x,
5038 }
5039 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005040 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005041 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005042 },
5043
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005044 {
5045 .vendor = "ST",
5046 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005047 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005048 .manufacture_id = ST_ID,
5049 .model_id = ST_M50FW002,
5050 .total_size = 256,
5051 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005052 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005053 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005054 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005055 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005056 .block_erasers =
5057 {
5058 {
5059 .eraseblocks = {
5060 {64 * 1024, 3},
5061 {32 * 1024, 1},
5062 {8 * 1024, 2},
5063 {16 * 1024, 1},
5064 },
5065 .block_erase = erase_block_stm50flw0x0x,
5066 }, {
5067 .eraseblocks = { {256 * 1024, 1} },
5068 .block_erase = erase_chip_stm50flw0x0x,
5069 }
5070 },
Sean Nelson35727f72010-01-28 23:55:12 +00005071 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005072 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005073 },
5074
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005075 {
5076 .vendor = "ST",
5077 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005078 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005079 .manufacture_id = ST_ID,
5080 .model_id = ST_M50FW016,
5081 .total_size = 2048,
5082 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005083 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005084 .tested = TEST_UNTESTED,
5085 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005086 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005087 .block_erasers =
5088 {
5089 {
5090 .eraseblocks = { {64 * 1024, 32}, },
5091 .block_erase = erase_block_stm50flw0x0x,
5092 }, {
5093 .eraseblocks = { {2 * 1024 * 1024, 1} },
5094 .block_erase = erase_chip_stm50flw0x0x,
5095 }
5096 },
5097 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005098 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005099 },
5100
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005101 {
5102 .vendor = "ST",
5103 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005104 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005105 .manufacture_id = ST_ID,
5106 .model_id = ST_M50FW040,
5107 .total_size = 512,
5108 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005109 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005110 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005111 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005112 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005113 .block_erasers =
5114 {
5115 {
5116 .eraseblocks = { {64 * 1024, 8}, },
5117 .block_erase = erase_block_stm50flw0x0x,
5118 }, {
5119 .eraseblocks = { {512 * 1024, 1} },
5120 .block_erase = erase_chip_stm50flw0x0x,
5121 }
5122 },
5123 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005124 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005125 },
5126
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005127 {
5128 .vendor = "ST",
5129 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005130 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005131 .manufacture_id = ST_ID,
5132 .model_id = ST_M50FW080,
5133 .total_size = 1024,
5134 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005135 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005136 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005137 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005138 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005139 .block_erasers =
5140 {
5141 {
5142 .eraseblocks = { {64 * 1024, 16}, },
5143 .block_erase = erase_block_stm50flw0x0x,
5144 }, {
5145 .eraseblocks = { {1024 * 1024, 1} },
5146 .block_erase = erase_chip_stm50flw0x0x,
5147 }
5148 },
5149 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005150 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005151 },
5152
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005153 {
5154 .vendor = "ST",
5155 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005156 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005157 .manufacture_id = ST_ID,
5158 .model_id = ST_M50LPW116,
5159 .total_size = 2048,
5160 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005161 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005162 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005163 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005164 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005165 .block_erasers =
5166 {
5167 {
5168 .eraseblocks = {
5169 {4 * 1024, 16},
5170 {64 * 1024, 30},
5171 {32 * 1024, 1},
5172 {8 * 1024, 2},
5173 {16 * 1024, 1},
5174 },
5175 .block_erase = erase_block_stm50flw0x0x,
5176 }, {
5177 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005178 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005179 }
5180 },
Sean Nelson35727f72010-01-28 23:55:12 +00005181 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005182 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005183 },
5184
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005185 {
5186 .vendor = "SyncMOS",
5187 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005188 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005189 .manufacture_id = SYNCMOS_ID,
5190 .model_id = S29C31004T,
5191 .total_size = 512,
5192 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005193 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005194 .tested = TEST_UNTESTED,
5195 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005196 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005197 .block_erasers =
5198 {
5199 {
5200 .eraseblocks = { {1 * 1024, 512} },
5201 .block_erase = erase_sector_jedec,
5202 }, {
5203 .eraseblocks = { {512 * 1024, 1} },
5204 .block_erase = erase_chip_block_jedec,
5205 },
5206 },
Sean Nelson35727f72010-01-28 23:55:12 +00005207 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005208 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005209 },
5210
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005211 {
5212 .vendor = "SyncMOS",
5213 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005214 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005215 .manufacture_id = SYNCMOS_ID,
5216 .model_id = S29C51001T,
5217 .total_size = 128,
5218 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005219 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005220 .tested = TEST_UNTESTED,
5221 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005222 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005223 .block_erasers =
5224 {
5225 {
5226 .eraseblocks = { {512, 256} },
5227 .block_erase = erase_sector_jedec,
5228 }, {
5229 .eraseblocks = { {128 * 1024, 1} },
5230 .block_erase = erase_chip_block_jedec,
5231 },
5232 },
Sean Nelson35727f72010-01-28 23:55:12 +00005233 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005234 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005235 },
5236
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005237 {
5238 .vendor = "SyncMOS",
5239 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005240 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005241 .manufacture_id = SYNCMOS_ID,
5242 .model_id = S29C51002T,
5243 .total_size = 256,
5244 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005245 .feature_bits = FEATURE_EITHER_RESET,
5246 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005247 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005248 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005249 .block_erasers =
5250 {
5251 {
5252 .eraseblocks = { {512, 512} },
5253 .block_erase = erase_sector_jedec,
5254 }, {
5255 .eraseblocks = { {256 * 1024, 1} },
5256 .block_erase = erase_chip_block_jedec,
5257 },
5258 },
Sean Nelson35727f72010-01-28 23:55:12 +00005259 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005260 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005261 },
5262
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005263 {
5264 .vendor = "SyncMOS",
5265 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005266 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005267 .manufacture_id = SYNCMOS_ID,
5268 .model_id = S29C51004T,
5269 .total_size = 512,
5270 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005271 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005272 .tested = TEST_UNTESTED,
5273 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005274 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005275 .block_erasers =
5276 {
5277 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005278 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005279 .block_erase = erase_sector_jedec,
5280 }, {
5281 .eraseblocks = { {512 * 1024, 1} },
5282 .block_erase = erase_chip_block_jedec,
5283 },
5284 },
Sean Nelson35727f72010-01-28 23:55:12 +00005285 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005286 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005287 },
5288
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005289 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005290 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005291 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005292 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005293 .manufacture_id = TI_OLD_ID,
5294 .model_id = TI_TMS29F002RB,
5295 .total_size = 256,
5296 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005297 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005298 .tested = TEST_UNTESTED,
5299 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005300 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005301 .block_erasers =
5302 {
5303 {
5304 .eraseblocks = {
5305 {16 * 1024, 1},
5306 {8 * 1024, 2},
5307 {32 * 1024, 1},
5308 {64 * 1024, 3},
5309 },
5310 .block_erase = erase_sector_jedec,
5311 }, {
5312 .eraseblocks = { {256 * 1024, 1} },
5313 .block_erase = erase_chip_block_jedec,
5314 },
5315 },
Sean Nelson35727f72010-01-28 23:55:12 +00005316 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005317 .read = read_memmapped,
5318 },
5319
5320 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005321 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005322 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005323 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005324 .manufacture_id = TI_OLD_ID,
5325 .model_id = TI_TMS29F002RT,
5326 .total_size = 256,
5327 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005328 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005329 .tested = TEST_UNTESTED,
5330 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005331 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005332 .block_erasers =
5333 {
5334 {
5335 .eraseblocks = {
5336 {64 * 1024, 3},
5337 {32 * 1024, 1},
5338 {8 * 1024, 2},
5339 {16 * 1024, 1},
5340 },
5341 .block_erase = erase_sector_jedec,
5342 }, {
5343 .eraseblocks = { {256 * 1024, 1} },
5344 .block_erase = erase_chip_block_jedec,
5345 },
5346 },
Sean Nelson35727f72010-01-28 23:55:12 +00005347 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005348 .read = read_memmapped,
5349 },
5350
5351 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005352 .vendor = "Winbond",
5353 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005354 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005355 .manufacture_id = WINBOND_NEX_ID,
5356 .model_id = W_25X10,
5357 .total_size = 128,
5358 .page_size = 256,
5359 .tested = TEST_UNTESTED,
5360 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005361 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005362 .block_erasers =
5363 {
5364 {
5365 .eraseblocks = { {4 * 1024, 32} },
5366 .block_erase = spi_block_erase_20,
5367 }, {
5368 .eraseblocks = { {32 * 1024, 4} },
5369 .block_erase = spi_block_erase_52,
5370 }, {
5371 .eraseblocks = { {64 * 1024, 2} },
5372 .block_erase = spi_block_erase_d8,
5373 }, {
5374 .eraseblocks = { {128 * 1024, 1} },
5375 .block_erase = spi_block_erase_60,
5376 }, {
5377 .eraseblocks = { {128 * 1024, 1} },
5378 .block_erase = spi_block_erase_c7,
5379 }
5380 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005381 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005382 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005383 },
5384
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005385 {
5386 .vendor = "Winbond",
5387 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005388 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005389 .manufacture_id = WINBOND_NEX_ID,
5390 .model_id = W_25X20,
5391 .total_size = 256,
5392 .page_size = 256,
5393 .tested = TEST_UNTESTED,
5394 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005395 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005396 .block_erasers =
5397 {
5398 {
5399 .eraseblocks = { {4 * 1024, 64} },
5400 .block_erase = spi_block_erase_20,
5401 }, {
5402 .eraseblocks = { {32 * 1024, 8} },
5403 .block_erase = spi_block_erase_52,
5404 }, {
5405 .eraseblocks = { {64 * 1024, 4} },
5406 .block_erase = spi_block_erase_d8,
5407 }, {
5408 .eraseblocks = { {256 * 1024, 1} },
5409 .block_erase = spi_block_erase_60,
5410 }, {
5411 .eraseblocks = { {256 * 1024, 1} },
5412 .block_erase = spi_block_erase_c7,
5413 }
5414 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005415 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005416 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005417 },
5418
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005419 {
5420 .vendor = "Winbond",
5421 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005422 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005423 .manufacture_id = WINBOND_NEX_ID,
5424 .model_id = W_25X40,
5425 .total_size = 512,
5426 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005427 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005428 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005429 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005430 .block_erasers =
5431 {
5432 {
5433 .eraseblocks = { {4 * 1024, 128} },
5434 .block_erase = spi_block_erase_20,
5435 }, {
5436 .eraseblocks = { {32 * 1024, 16} },
5437 .block_erase = spi_block_erase_52,
5438 }, {
5439 .eraseblocks = { {64 * 1024, 8} },
5440 .block_erase = spi_block_erase_d8,
5441 }, {
5442 .eraseblocks = { {512 * 1024, 1} },
5443 .block_erase = spi_block_erase_60,
5444 }, {
5445 .eraseblocks = { {512 * 1024, 1} },
5446 .block_erase = spi_block_erase_c7,
5447 }
5448 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005449 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005450 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005451 },
5452
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005453 {
5454 .vendor = "Winbond",
5455 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005456 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005457 .manufacture_id = WINBOND_NEX_ID,
5458 .model_id = W_25X80,
5459 .total_size = 1024,
5460 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005461 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005462 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005463 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005464 .block_erasers =
5465 {
5466 {
5467 .eraseblocks = { {4 * 1024, 256} },
5468 .block_erase = spi_block_erase_20,
5469 }, {
5470 .eraseblocks = { {32 * 1024, 32} },
5471 .block_erase = spi_block_erase_52,
5472 }, {
5473 .eraseblocks = { {64 * 1024, 16} },
5474 .block_erase = spi_block_erase_d8,
5475 }, {
5476 .eraseblocks = { {1024 * 1024, 1} },
5477 .block_erase = spi_block_erase_60,
5478 }, {
5479 .eraseblocks = { {1024 * 1024, 1} },
5480 .block_erase = spi_block_erase_c7,
5481 }
5482 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005483 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005484 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005485 },
5486
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005487 {
5488 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005489 .name = "W25x16",
5490 .bustype = CHIP_BUSTYPE_SPI,
5491 .manufacture_id = WINBOND_NEX_ID,
5492 .model_id = W_25X16,
5493 .total_size = 2048,
5494 .page_size = 256,
5495 .tested = TEST_OK_PR,
5496 .probe = probe_spi_rdid,
5497 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005498 .block_erasers =
5499 {
5500 {
5501 .eraseblocks = { {4 * 1024, 512} },
5502 .block_erase = spi_block_erase_20,
5503 }, {
5504 .eraseblocks = { {32 * 1024, 64} },
5505 .block_erase = spi_block_erase_52,
5506 }, {
5507 .eraseblocks = { {64 * 1024, 32} },
5508 .block_erase = spi_block_erase_d8,
5509 }, {
5510 .eraseblocks = { {2 * 1024 * 1024, 1} },
5511 .block_erase = spi_block_erase_60,
5512 }, {
5513 .eraseblocks = { {2 * 1024 * 1024, 1} },
5514 .block_erase = spi_block_erase_c7,
5515 }
5516 },
Hector Martina721ae22009-07-11 19:39:11 +00005517 .write = spi_chip_write_256,
5518 .read = spi_chip_read,
5519 },
5520
5521 {
5522 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005523 .name = "W25x32",
5524 .bustype = CHIP_BUSTYPE_SPI,
5525 .manufacture_id = WINBOND_NEX_ID,
5526 .model_id = W_25X32,
5527 .total_size = 4096,
5528 .page_size = 256,
5529 .tested = TEST_OK_PROBE,
5530 .probe = probe_spi_rdid,
5531 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005532 .block_erasers =
5533 {
5534 {
5535 .eraseblocks = { {4 * 1024, 1024} },
5536 .block_erase = spi_block_erase_20,
5537 }, {
5538 .eraseblocks = { {32 * 1024, 128} },
5539 .block_erase = spi_block_erase_52,
5540 }, {
5541 .eraseblocks = { {64 * 1024, 64} },
5542 .block_erase = spi_block_erase_d8,
5543 }, {
5544 .eraseblocks = { {4 * 1024 * 1024, 1} },
5545 .block_erase = spi_block_erase_60,
5546 }, {
5547 .eraseblocks = { {4 * 1024 * 1024, 1} },
5548 .block_erase = spi_block_erase_c7,
5549 }
5550 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005551 .write = spi_chip_write_256,
5552 .read = spi_chip_read,
5553 },
5554
5555 {
5556 .vendor = "Winbond",
5557 .name = "W25x64",
5558 .bustype = CHIP_BUSTYPE_SPI,
5559 .manufacture_id = WINBOND_NEX_ID,
5560 .model_id = W_25X64,
5561 .total_size = 8192,
5562 .page_size = 256,
5563 .tested = TEST_UNTESTED,
5564 .probe = probe_spi_rdid,
5565 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005566 .block_erasers =
5567 {
5568 {
5569 .eraseblocks = { {4 * 1024, 2048} },
5570 .block_erase = spi_block_erase_20,
5571 }, {
5572 .eraseblocks = { {32 * 1024, 256} },
5573 .block_erase = spi_block_erase_52,
5574 }, {
5575 .eraseblocks = { {64 * 1024, 128} },
5576 .block_erase = spi_block_erase_d8,
5577 }, {
5578 .eraseblocks = { {8 * 1024 * 1024, 1} },
5579 .block_erase = spi_block_erase_60,
5580 }, {
5581 .eraseblocks = { {8 * 1024 * 1024, 1} },
5582 .block_erase = spi_block_erase_c7,
5583 }
5584 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005585 .write = spi_chip_write_256,
5586 .read = spi_chip_read,
5587 },
5588
5589 {
5590 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005591 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005592 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005593 .manufacture_id = WINBOND_ID,
5594 .model_id = W_29C011,
5595 .total_size = 128,
5596 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005597 .feature_bits = FEATURE_LONG_RESET,
5598 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005599 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005600 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005601 .block_erasers =
5602 {
5603 {
5604 .eraseblocks = { {128 * 1024, 1} },
5605 .block_erase = erase_chip_block_jedec,
5606 }
5607 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005608 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005609 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005610 },
5611
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005612 {
5613 .vendor = "Winbond",
5614 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005615 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005616 .manufacture_id = WINBOND_ID,
5617 .model_id = W_29C020C,
5618 .total_size = 256,
5619 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005620 .feature_bits = FEATURE_LONG_RESET,
5621 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005622 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005623 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005624 .block_erasers =
5625 {
5626 {
5627 .eraseblocks = { {256 * 1024, 1} },
5628 .block_erase = erase_chip_block_jedec,
5629 }
5630 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005631 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005632 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005633 },
5634
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005635 {
5636 .vendor = "Winbond",
5637 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005638 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005639 .manufacture_id = WINBOND_ID,
5640 .model_id = W_29C040P,
5641 .total_size = 512,
5642 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005643 .feature_bits = FEATURE_LONG_RESET,
5644 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005645 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005646 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005647 .block_erasers =
5648 {
5649 {
5650 .eraseblocks = { {512 * 1024, 1} },
5651 .block_erase = erase_chip_block_jedec,
5652 }
5653 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005654 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005655 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005656 },
5657
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005658 {
5659 .vendor = "Winbond",
5660 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005661 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005662 .manufacture_id = WINBOND_ID,
5663 .model_id = W_29C011,
5664 .total_size = 128,
5665 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005666 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005667 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005668 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005669 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005670 .block_erasers =
5671 {
5672 {
5673 .eraseblocks = { {128 * 1024, 1} },
5674 .block_erase = erase_chip_block_jedec,
5675 }
5676 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005677 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005678 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005679 },
5680
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005681 {
5682 .vendor = "Winbond",
5683 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005684 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005685 .manufacture_id = WINBOND_ID,
5686 .model_id = W_39V040A,
5687 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005688 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005689 .feature_bits = FEATURE_EITHER_RESET,
5690 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005691 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005692 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005693 .block_erasers =
5694 {
5695 {
5696 .eraseblocks = { {64 * 1024, 8} },
5697 .block_erase = erase_sector_jedec,
5698 }, {
5699 .eraseblocks = { {512 * 1024, 1} },
5700 .block_erase = erase_chip_block_jedec,
5701 }
5702 },
Sean Nelson35727f72010-01-28 23:55:12 +00005703 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005704 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005705 },
5706
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005707 {
5708 .vendor = "Winbond",
5709 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005710 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005711 .manufacture_id = WINBOND_ID,
5712 .model_id = W_39V040B,
5713 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005714 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005715 .feature_bits = FEATURE_EITHER_RESET,
5716 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005717 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005718 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005719 .block_erasers =
5720 {
5721 {
5722 .eraseblocks = { {64 * 1024, 8} },
5723 .block_erase = erase_sector_jedec,
5724 }, {
5725 .eraseblocks = { {512 * 1024, 1} },
5726 .block_erase = erase_chip_block_jedec,
5727 }
5728 },
Sean Nelson35727f72010-01-28 23:55:12 +00005729 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005730 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005731 },
5732
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005733 {
5734 .vendor = "Winbond",
5735 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005736 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005737 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005738 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005739 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005740 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005741 .feature_bits = FEATURE_EITHER_RESET,
5742 .tested = TEST_UNTESTED,
5743 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005744 .probe_timing = TIMING_FIXME,
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00005745 /* .erase = NULL, Was erase_w39v040c */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005746 .block_erasers =
5747 {
5748 {
5749 .eraseblocks = { {64 * 1024, 8} },
5750 .block_erase = erase_sector_jedec,
5751 }, {
5752 .eraseblocks = { {512 * 1024, 1} },
5753 .block_erase = erase_chip_block_jedec,
5754 }
5755 },
Sean Nelson35727f72010-01-28 23:55:12 +00005756 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005757 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005758 },
5759
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005760 {
5761 .vendor = "Winbond",
5762 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005763 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005764 .manufacture_id = WINBOND_ID,
5765 .model_id = W_39V040FA,
5766 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005767 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005768 .feature_bits = FEATURE_EITHER_RESET,
5769 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005770 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005771 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005772 .block_erasers =
5773 {
5774 {
5775 .eraseblocks = { {4 * 1024, 128} },
5776 .block_erase = erase_block_jedec,
5777 }, {
5778 .eraseblocks = { {64 * 1024, 8} },
5779 .block_erase = erase_sector_jedec,
5780 }, {
5781 .eraseblocks = { {512 * 1024, 1} },
5782 .block_erase = erase_chip_block_jedec,
5783 }
5784 },
Sean Nelson35727f72010-01-28 23:55:12 +00005785 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005786 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005787 },
5788
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005789 {
5790 .vendor = "Winbond",
5791 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005792 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005793 .manufacture_id = WINBOND_ID,
5794 .model_id = W_39V080A,
5795 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005796 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005797 .feature_bits = FEATURE_EITHER_RESET,
5798 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005799 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005800 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005801 .block_erasers =
5802 {
5803 {
5804 .eraseblocks = { {64 * 1024, 16} },
5805 .block_erase = erase_sector_jedec,
5806 }, {
5807 .eraseblocks = { {1024 * 1024, 1} },
5808 .block_erase = erase_chip_block_jedec,
5809 }
5810 },
Sean Nelson35727f72010-01-28 23:55:12 +00005811 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005812 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005813 },
5814
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005815 {
5816 .vendor = "Winbond",
5817 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00005818 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005819 .manufacture_id = WINBOND_ID,
5820 .model_id = W_49F002U,
5821 .total_size = 256,
5822 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005823 .feature_bits = FEATURE_EITHER_RESET,
5824 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005825 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005826 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005827 .block_erasers =
5828 {
5829 {
5830 .eraseblocks = {
5831 {128 * 1024, 1},
5832 {96 * 1024, 1},
5833 {8 * 1024, 2},
5834 {16 * 1024, 1},
5835 },
5836 .block_erase = erase_sector_jedec,
5837 }, {
5838 .eraseblocks = { {256 * 1024, 1} },
5839 .block_erase = erase_chip_block_jedec,
5840 }
5841 },
Sean Nelson35727f72010-01-28 23:55:12 +00005842 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005843 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005844 },
5845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005846 {
5847 .vendor = "Winbond",
5848 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005849 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005850 .manufacture_id = WINBOND_ID,
5851 .model_id = W_49V002A,
5852 .total_size = 256,
5853 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005854 .feature_bits = FEATURE_EITHER_RESET,
5855 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005856 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005857 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005858 .block_erasers =
5859 {
5860 {
5861 .eraseblocks = {
5862 {64 * 1024, 3},
5863 {32 * 1024, 1},
5864 {8 * 1024, 2},
5865 {16 * 1024, 1},
5866 },
5867 .block_erase = erase_sector_jedec,
5868 }, {
5869 .eraseblocks = { {256 * 1024, 1} },
5870 .block_erase = erase_chip_block_jedec,
5871 }
5872 },
Sean Nelson35727f72010-01-28 23:55:12 +00005873 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005874 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005875 },
5876
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005877 {
5878 .vendor = "Winbond",
5879 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005880 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005881 .manufacture_id = WINBOND_ID,
5882 .model_id = W_49V002FA,
5883 .total_size = 256,
5884 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005885 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005886 .tested = TEST_UNTESTED,
5887 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005888 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005889 .block_erasers =
5890 {
5891 {
5892 .eraseblocks = {
5893 {64 * 1024, 3},
5894 {32 * 1024, 1},
5895 {8 * 1024, 2},
5896 {16 * 1024, 1},
5897 },
5898 .block_erase = erase_sector_jedec,
5899 }, {
5900 .eraseblocks = { {256 * 1024, 1} },
5901 .block_erase = erase_chip_block_jedec,
5902 }
5903 },
Sean Nelson35727f72010-01-28 23:55:12 +00005904 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005905 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005906 },
5907
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005908 {
5909 .vendor = "Winbond",
5910 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005911 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005912 .manufacture_id = WINBOND_ID,
5913 .model_id = W_39V080FA,
5914 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005915 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005916 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
5917 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005918 .probe = probe_jedec,
5919 .probe_timing = TIMING_FIXME,
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00005920 /* .erase = NULL, Was erase_winbond_fwhub */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005921 .block_erasers =
5922 {
5923 {
5924 .eraseblocks = { {64 * 1024, 16}, },
5925 .block_erase = erase_sector_jedec,
5926 }, {
5927 .eraseblocks = { {1024 * 1024, 1} },
5928 .block_erase = erase_chip_block_jedec,
5929 }
5930 },
Sean Nelson35727f72010-01-28 23:55:12 +00005931 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005932 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005933 },
5934
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005935 {
5936 .vendor = "Winbond",
5937 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005938 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005939 .manufacture_id = WINBOND_ID,
5940 .model_id = W_39V080FA_DM,
5941 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005942 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005943 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005944 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005945 .probe = probe_jedec,
5946 .probe_timing = TIMING_FIXME,
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00005947 /* .erase = NULL, Was erase_winbond_fwhub */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005948 .block_erasers =
5949 {
5950 {
5951 .eraseblocks = { {64 * 1024, 8}, },
5952 .block_erase = erase_sector_jedec,
5953 }, {
5954 .eraseblocks = { {512 * 1024, 1} },
5955 .block_erase = erase_chip_block_jedec,
5956 }
5957 },
Sean Nelson35727f72010-01-28 23:55:12 +00005958 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005959 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005960 },
5961
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005962 {
5963 .vendor = "Atmel",
5964 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005965 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005966 .manufacture_id = ATMEL_ID,
5967 .model_id = GENERIC_DEVICE_ID,
5968 .total_size = 0,
5969 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005970 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005971 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005972 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005973 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005974 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005975 },
5976
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005977 {
5978 .vendor = "EON",
5979 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005980 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005981 .manufacture_id = EON_ID_NOPREFIX,
5982 .model_id = GENERIC_DEVICE_ID,
5983 .total_size = 0,
5984 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005985 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005986 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005987 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005988 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005989 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005990 },
5991
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005992 {
5993 .vendor = "Macronix",
5994 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005995 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005996 .manufacture_id = MX_ID,
5997 .model_id = GENERIC_DEVICE_ID,
5998 .total_size = 0,
5999 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006000 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006001 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006002 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006003 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006004 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006005 },
6006
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006007 {
6008 .vendor = "PMC",
6009 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006010 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006011 .manufacture_id = PMC_ID,
6012 .model_id = GENERIC_DEVICE_ID,
6013 .total_size = 0,
6014 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006015 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006016 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006017 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006018 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006019 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006020 },
6021
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006022 {
6023 .vendor = "SST",
6024 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006025 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006026 .manufacture_id = SST_ID,
6027 .model_id = GENERIC_DEVICE_ID,
6028 .total_size = 0,
6029 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006030 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006031 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006032 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006033 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006034 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006035 },
6036
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006037 {
6038 .vendor = "ST",
6039 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006040 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006041 .manufacture_id = ST_ID,
6042 .model_id = GENERIC_DEVICE_ID,
6043 .total_size = 0,
6044 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006045 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006046 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006047 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006048 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006049 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006050 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006051
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006052 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006053 .vendor = "Sanyo",
6054 .name = "unknown Sanyo SPI chip",
6055 .bustype = CHIP_BUSTYPE_SPI,
6056 .manufacture_id = SANYO_ID,
6057 .model_id = GENERIC_DEVICE_ID,
6058 .total_size = 0,
6059 .page_size = 256,
6060 .tested = TEST_BAD_PREW,
6061 .probe = probe_spi_rdid,
6062 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006063 .write = NULL,
6064 .read = NULL,
6065 },
6066
6067 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006068 .vendor = "Generic",
6069 .name = "unknown SPI chip (RDID)",
6070 .bustype = CHIP_BUSTYPE_SPI,
6071 .manufacture_id = GENERIC_MANUF_ID,
6072 .model_id = GENERIC_DEVICE_ID,
6073 .total_size = 0,
6074 .page_size = 256,
6075 .tested = TEST_BAD_PREW,
6076 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006077 .write = NULL,
6078 },
6079 {
6080 .vendor = "Generic",
6081 .name = "unknown SPI chip (REMS)",
6082 .bustype = CHIP_BUSTYPE_SPI,
6083 .manufacture_id = GENERIC_MANUF_ID,
6084 .model_id = GENERIC_DEVICE_ID,
6085 .total_size = 0,
6086 .page_size = 256,
6087 .tested = TEST_BAD_PREW,
6088 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006089 .write = NULL,
6090 },
6091
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006092 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006093};