blob: cfe9dbafafc133a92ace7a28dbfc37b8aeb3c031 [file] [log] [blame]
Ollie Lho184a4042005-11-26 21:55:36 +00001/*
Uwe Hermannd1107642007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
Ollie Lho184a4042005-11-26 21:55:36 +00003 *
Uwe Hermannd22a1d42007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
Stefan Reinauer4c390c82008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
Sean Nelsonc57a9202010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
Uwe Hermannd1107642007-08-29 17:52:32 +00009 *
Stefan Reinauerce532972007-05-23 17:20:56 +000010 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000014 *
Stefan Reinauerce532972007-05-23 17:20:56 +000015 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000019 *
Stefan Reinauerce532972007-05-23 17:20:56 +000020 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000026#include "flashchips.h"
Ollie Lho184a4042005-11-26 21:55:36 +000027
Uwe Hermannfc425e82008-03-16 02:06:25 +000028/**
Uwe Hermanna9720402009-05-21 15:55:46 +000029 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000030 *
31 * Please keep the list sorted by vendor name and chip name, so that
32 * the output of 'flashrom -L' is alphabetically sorted.
33 */
Ollie Lho184a4042005-11-26 21:55:36 +000034struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000035
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000036 /*
37 * .vendor = Vendor name
38 * .name = Chip name
39 * .bustype = Supported flash bus types (Parallel, LPC...)
40 * .manufacture_id = Manufacturer chip ID
41 * .model_id = Model chip ID
42 * .total_size = Total size in (binary) kbytes
43 * .page_size = Page or eraseblock(?) size in bytes
44 * .tested = Test status
45 * .probe = Probe function
46 * .probe_timing = Probe function delay
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000047 * .block_erasers[] = Array of erase layouts and erase functions
48 * {
49 * .eraseblocks[] = Array of { blocksize, blockcount }
50 * .block_erase = Block erase function
51 * }
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000052 * .write = Chip write function
53 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000054 */
55
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000056 {
57 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000058 .name = "Am29F010A/B",
59 .bustype = CHIP_BUSTYPE_PARALLEL,
60 .manufacture_id = AMD_ID,
61 .model_id = AM_29F010B, /* Same as Am29F010A */
62 .total_size = 128,
63 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000064 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
65 .tested = TEST_UNTESTED,
66 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000067 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000068 .block_erasers =
69 {
70 {
71 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000072 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000073 }, {
74 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000075 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000076 },
77 },
Sean Nelson35727f72010-01-28 23:55:12 +000078 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000079 .read = read_memmapped,
80 },
81
82 {
83 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000084 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000085 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000086 .manufacture_id = AMD_ID,
87 .model_id = AM_29F002BB,
88 .total_size = 256,
89 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000090 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000091 .tested = TEST_UNTESTED,
92 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000093 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000094 .block_erasers =
95 {
96 {
97 .eraseblocks = {
98 {16 * 1024, 1},
99 {8 * 1024, 2},
100 {32 * 1024, 1},
101 {64 * 1024, 3},
102 },
103 .block_erase = erase_sector_jedec,
104 }, {
105 .eraseblocks = { {256 * 1024, 1} },
106 .block_erase = erase_chip_block_jedec,
107 },
108 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000109 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000110 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000111 },
112
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000113 {
114 .vendor = "AMD",
115 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000116 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000117 .manufacture_id = AMD_ID,
118 .model_id = AM_29F002BT,
119 .total_size = 256,
120 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000121 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
122 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000123 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000124 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000125 .block_erasers =
126 {
127 {
128 .eraseblocks = {
129 {64 * 1024, 3},
130 {32 * 1024, 1},
131 {8 * 1024, 2},
132 {16 * 1024, 1},
133 },
134 .block_erase = erase_sector_jedec,
135 }, {
136 .eraseblocks = { {256 * 1024, 1} },
137 .block_erase = erase_chip_block_jedec,
138 },
139 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000140 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000141 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000142 },
143
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000144 {
145 .vendor = "AMD",
146 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000147 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000148 .manufacture_id = AMD_ID,
149 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000150 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000152 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000153 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000154 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000155 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000156 .block_erasers =
157 {
158 {
159 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000160 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000161 }, {
162 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000163 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000164 },
165 },
Sean Nelson35727f72010-01-28 23:55:12 +0000166 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000167 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000168 },
169
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000170 {
171 .vendor = "AMD",
172 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000173 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000174 .manufacture_id = AMD_ID,
175 .model_id = AM_29F040B,
176 .total_size = 512,
177 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000178 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
179 .tested = TEST_UNTESTED,
180 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000181 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000182 .block_erasers =
183 {
184 {
185 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000186 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000187 }, {
188 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000189 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000190 },
191 },
Sean Nelson35727f72010-01-28 23:55:12 +0000192 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000193 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000194 },
195
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000196 {
197 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000198 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000199 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000200 .manufacture_id = AMD_ID,
201 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000202 .total_size = 1024,
203 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000204 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000205 .tested = TEST_UNTESTED,
206 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000207 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000208 .block_erasers =
209 {
210 {
211 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000212 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000213 }, {
214 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000215 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000216 },
217 },
Sean Nelson35727f72010-01-28 23:55:12 +0000218 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000219 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000220 },
221
222 {
223 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000224 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000225 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000226 .manufacture_id = AMD_ID,
227 .model_id = AM_29LV040B,
228 .total_size = 512,
229 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000230 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000231 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000232 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000233 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000234 .block_erasers =
235 {
236 {
237 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000238 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000239 }, {
240 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000241 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000242 },
243 },
Sean Nelson35727f72010-01-28 23:55:12 +0000244 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000245 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000246 },
247
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000248 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000249 .vendor = "AMD",
250 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000251 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000252 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000253 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000254 .total_size = 1024,
255 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000256 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000257 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000258 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000259 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000260 .block_erasers =
261 {
262 {
263 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000264 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000265 }, {
266 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000267 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000268 },
269 },
Sean Nelson35727f72010-01-28 23:55:12 +0000270 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000271 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000272 },
273
274 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000275 .vendor = "ASD",
276 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +0000277 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000278 .manufacture_id = ASD_ID,
279 .model_id = ASD_AE49F2008,
280 .total_size = 256,
281 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000282 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000283 .tested = TEST_UNTESTED,
284 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000285 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +0000286 .block_erasers =
287 {
288 {
289 .eraseblocks = {
290 {128 * 1024, 1},
291 {96 * 1024, 1},
292 {8 * 1024, 2},
293 {16 * 1024, 1},
294 },
295 .block_erase = erase_sector_jedec,
296 }, {
297 .eraseblocks = { {256 * 1024, 1} },
298 .block_erase = erase_chip_block_jedec,
299 }
300 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000301 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000302 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000303 },
304
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000305 {
306 .vendor = "Atmel",
307 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000308 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000309 .manufacture_id = ATMEL_ID,
310 .model_id = AT_25DF021,
311 .total_size = 256,
312 .page_size = 256,
313 .tested = TEST_UNTESTED,
314 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000315 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000316 .block_erasers =
317 {
318 {
319 .eraseblocks = { {4 * 1024, 64} },
320 .block_erase = spi_block_erase_20,
321 }, {
322 .eraseblocks = { {32 * 1024, 8} },
323 .block_erase = spi_block_erase_52,
324 }, {
325 .eraseblocks = { {64 * 1024, 4} },
326 .block_erase = spi_block_erase_d8,
327 }, {
328 .eraseblocks = { {256 * 1024, 1} },
329 .block_erase = spi_block_erase_60,
330 }, {
331 .eraseblocks = { {256 * 1024, 1} },
332 .block_erase = spi_block_erase_c7,
333 }
334 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000335 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000336 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000337 },
338
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000339 {
340 .vendor = "Atmel",
341 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000342 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000343 .manufacture_id = ATMEL_ID,
344 .model_id = AT_25DF041A,
345 .total_size = 512,
346 .page_size = 256,
347 .tested = TEST_UNTESTED,
348 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000349 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000350 .block_erasers =
351 {
352 {
353 .eraseblocks = { {4 * 1024, 128} },
354 .block_erase = spi_block_erase_20,
355 }, {
356 .eraseblocks = { {32 * 1024, 16} },
357 .block_erase = spi_block_erase_52,
358 }, {
359 .eraseblocks = { {64 * 1024, 8} },
360 .block_erase = spi_block_erase_d8,
361 }, {
362 .eraseblocks = { {512 * 1024, 1} },
363 .block_erase = spi_block_erase_60,
364 }, {
365 .eraseblocks = { {512 * 1024, 1} },
366 .block_erase = spi_block_erase_c7,
367 }
368 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000369 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000370 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000371 },
372
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000373 {
374 .vendor = "Atmel",
375 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000376 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000377 .manufacture_id = ATMEL_ID,
378 .model_id = AT_25DF081,
379 .total_size = 1024,
380 .page_size = 256,
381 .tested = TEST_UNTESTED,
382 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000383 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000384 .block_erasers =
385 {
386 {
387 .eraseblocks = { {4 * 1024, 256} },
388 .block_erase = spi_block_erase_20,
389 }, {
390 .eraseblocks = { {32 * 1024, 32} },
391 .block_erase = spi_block_erase_52,
392 }, {
393 .eraseblocks = { {64 * 1024, 16} },
394 .block_erase = spi_block_erase_d8,
395 }, {
396 .eraseblocks = { {1024 * 1024, 1} },
397 .block_erase = spi_block_erase_60,
398 }, {
399 .eraseblocks = { {1024 * 1024, 1} },
400 .block_erase = spi_block_erase_c7,
401 }
402 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000403 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000404 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000405 },
406
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000407 {
408 .vendor = "Atmel",
409 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000410 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000411 .manufacture_id = ATMEL_ID,
412 .model_id = AT_25DF161,
413 .total_size = 2048,
414 .page_size = 256,
415 .tested = TEST_UNTESTED,
416 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000417 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000418 .block_erasers =
419 {
420 {
421 .eraseblocks = { {4 * 1024, 512} },
422 .block_erase = spi_block_erase_20,
423 }, {
424 .eraseblocks = { {32 * 1024, 64} },
425 .block_erase = spi_block_erase_52,
426 }, {
427 .eraseblocks = { {64 * 1024, 32} },
428 .block_erase = spi_block_erase_d8,
429 }, {
430 .eraseblocks = { {2 * 1024 * 1024, 1} },
431 .block_erase = spi_block_erase_60,
432 }, {
433 .eraseblocks = { {2 * 1024 * 1024, 1} },
434 .block_erase = spi_block_erase_c7,
435 }
436 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000437 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000438 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000439 },
440
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000441 {
442 .vendor = "Atmel",
443 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000444 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000445 .manufacture_id = ATMEL_ID,
446 .model_id = AT_25DF321,
447 .total_size = 4096,
448 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000449 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000450 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000451 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000452 .block_erasers =
453 {
454 {
455 .eraseblocks = { {4 * 1024, 1024} },
456 .block_erase = spi_block_erase_20,
457 }, {
458 .eraseblocks = { {32 * 1024, 128} },
459 .block_erase = spi_block_erase_52,
460 }, {
461 .eraseblocks = { {64 * 1024, 64} },
462 .block_erase = spi_block_erase_d8,
463 }, {
464 .eraseblocks = { {4 * 1024 * 1024, 1} },
465 .block_erase = spi_block_erase_60,
466 }, {
467 .eraseblocks = { {4 * 1024 * 1024, 1} },
468 .block_erase = spi_block_erase_c7,
469 }
470 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000471 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000472 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000473 },
474
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000475 {
476 .vendor = "Atmel",
477 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000478 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000479 .manufacture_id = ATMEL_ID,
480 .model_id = AT_25DF321A,
481 .total_size = 4096,
482 .page_size = 256,
483 .tested = TEST_UNTESTED,
484 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000485 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000486 .block_erasers =
487 {
488 {
489 .eraseblocks = { {4 * 1024, 1024} },
490 .block_erase = spi_block_erase_20,
491 }, {
492 .eraseblocks = { {32 * 1024, 128} },
493 .block_erase = spi_block_erase_52,
494 }, {
495 .eraseblocks = { {64 * 1024, 64} },
496 .block_erase = spi_block_erase_d8,
497 }, {
498 .eraseblocks = { {4 * 1024 * 1024, 1} },
499 .block_erase = spi_block_erase_60,
500 }, {
501 .eraseblocks = { {4 * 1024 * 1024, 1} },
502 .block_erase = spi_block_erase_c7,
503 }
504 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000505 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000506 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000507 },
508
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000509 {
510 .vendor = "Atmel",
511 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000512 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000513 .manufacture_id = ATMEL_ID,
514 .model_id = AT_25DF641,
515 .total_size = 8192,
516 .page_size = 256,
517 .tested = TEST_UNTESTED,
518 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000519 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000520 .block_erasers =
521 {
522 {
523 .eraseblocks = { {4 * 1024, 2048} },
524 .block_erase = spi_block_erase_20,
525 }, {
526 .eraseblocks = { {32 * 1024, 256} },
527 .block_erase = spi_block_erase_52,
528 }, {
529 .eraseblocks = { {64 * 1024, 128} },
530 .block_erase = spi_block_erase_d8,
531 }, {
532 .eraseblocks = { {8 * 1024 * 1024, 1} },
533 .block_erase = spi_block_erase_60,
534 }, {
535 .eraseblocks = { {8 * 1024 * 1024, 1} },
536 .block_erase = spi_block_erase_c7,
537 }
538 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000539 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000540 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000541 },
542
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000543 {
544 .vendor = "Atmel",
545 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000546 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000547 .manufacture_id = ATMEL_ID,
548 .model_id = AT_25F512B,
549 .total_size = 64,
550 .page_size = 256,
551 .tested = TEST_UNTESTED,
552 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000553 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000554 .block_erasers =
555 {
556 {
557 .eraseblocks = { {4 * 1024, 16} },
558 .block_erase = spi_block_erase_20,
559 }, {
560 .eraseblocks = { {32 * 1024, 2} },
561 .block_erase = spi_block_erase_52,
562 }, {
563 .eraseblocks = { {32 * 1024, 2} },
564 .block_erase = spi_block_erase_d8,
565 }, {
566 .eraseblocks = { {64 * 1024, 1} },
567 .block_erase = spi_block_erase_60,
568 }, {
569 .eraseblocks = { {64 * 1024, 1} },
570 .block_erase = spi_block_erase_c7,
571 }
572 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000573 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000574 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000575 },
576
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000577 {
578 .vendor = "Atmel",
579 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000580 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000581 .manufacture_id = ATMEL_ID,
582 .model_id = AT_25FS010,
583 .total_size = 128,
584 .page_size = 256,
585 .tested = TEST_UNTESTED,
586 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000587 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000588 .block_erasers =
589 {
590 {
591 .eraseblocks = { {4 * 1024, 32} },
592 .block_erase = spi_block_erase_20,
593 }, {
594 .eraseblocks = { {32 * 1024, 4} },
595 .block_erase = spi_block_erase_52,
596 }, {
597 .eraseblocks = { {32 * 1024, 4} },
598 .block_erase = spi_block_erase_d8,
599 }, {
600 .eraseblocks = { {128 * 1024, 1} },
601 .block_erase = spi_block_erase_60,
602 }, {
603 .eraseblocks = { {128 * 1024, 1} },
604 .block_erase = spi_block_erase_c7,
605 }
606 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000607 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000608 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000609 },
610
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000611 {
612 .vendor = "Atmel",
613 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000614 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000615 .manufacture_id = ATMEL_ID,
616 .model_id = AT_25FS040,
617 .total_size = 512,
618 .page_size = 256,
619 .tested = TEST_UNTESTED,
620 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000621 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000622 .block_erasers =
623 {
624 {
625 .eraseblocks = { {4 * 1024, 128} },
626 .block_erase = spi_block_erase_20,
627 }, {
628 .eraseblocks = { {64 * 1024, 8} },
629 .block_erase = spi_block_erase_52,
630 }, {
631 .eraseblocks = { {64 * 1024, 8} },
632 .block_erase = spi_block_erase_d8,
633 }, {
634 .eraseblocks = { {512 * 1024, 1} },
635 .block_erase = spi_block_erase_60,
636 }, {
637 .eraseblocks = { {512 * 1024, 1} },
638 .block_erase = spi_block_erase_c7,
639 }
640 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000641 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000642 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000643 },
644
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000645 {
646 .vendor = "Atmel",
647 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000648 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000649 .manufacture_id = ATMEL_ID,
650 .model_id = AT_26DF041,
651 .total_size = 512,
652 .page_size = 256,
653 .tested = TEST_UNTESTED,
654 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000655 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000656 .block_erasers =
657 {
658 {
659 .eraseblocks = { {4 * 1024, 128} },
660 .block_erase = spi_block_erase_20,
661 }
662 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000663 .write = NULL /* Incompatible Page write */,
664 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000665 },
666
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000667 {
668 .vendor = "Atmel",
669 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000670 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000671 .manufacture_id = ATMEL_ID,
672 .model_id = AT_26DF081A,
673 .total_size = 1024,
674 .page_size = 256,
675 .tested = TEST_UNTESTED,
676 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000677 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000678 .block_erasers =
679 {
680 {
681 .eraseblocks = { {4 * 1024, 256} },
682 .block_erase = spi_block_erase_20,
683 }, {
684 .eraseblocks = { {32 * 1024, 32} },
685 .block_erase = spi_block_erase_52,
686 }, {
687 .eraseblocks = { {64 * 1024, 16} },
688 .block_erase = spi_block_erase_d8,
689 }, {
690 .eraseblocks = { {1024 * 1024, 1} },
691 .block_erase = spi_block_erase_60,
692 }, {
693 .eraseblocks = { {1024 * 1024, 1} },
694 .block_erase = spi_block_erase_c7,
695 }
696 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000697 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000698 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000699 },
700
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000701 {
702 .vendor = "Atmel",
703 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000704 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000705 .manufacture_id = ATMEL_ID,
706 .model_id = AT_26DF161,
707 .total_size = 2048,
708 .page_size = 256,
709 .tested = TEST_UNTESTED,
710 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000711 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000712 .block_erasers =
713 {
714 {
715 .eraseblocks = { {4 * 1024, 512} },
716 .block_erase = spi_block_erase_20,
717 }, {
718 .eraseblocks = { {32 * 1024, 64} },
719 .block_erase = spi_block_erase_52,
720 }, {
721 .eraseblocks = { {64 * 1024, 32} },
722 .block_erase = spi_block_erase_d8,
723 }, {
724 .eraseblocks = { {2 * 1024 * 1024, 1} },
725 .block_erase = spi_block_erase_60,
726 }, {
727 .eraseblocks = { {2 * 1024 * 1024, 1} },
728 .block_erase = spi_block_erase_c7,
729 }
730 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000731 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000732 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000733 },
734
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000735 {
736 .vendor = "Atmel",
737 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000738 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000739 .manufacture_id = ATMEL_ID,
740 .model_id = AT_26DF161A,
741 .total_size = 2048,
742 .page_size = 256,
743 .tested = TEST_UNTESTED,
744 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000745 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000746 .block_erasers =
747 {
748 {
749 .eraseblocks = { {4 * 1024, 512} },
750 .block_erase = spi_block_erase_20,
751 }, {
752 .eraseblocks = { {32 * 1024, 64} },
753 .block_erase = spi_block_erase_52,
754 }, {
755 .eraseblocks = { {64 * 1024, 32} },
756 .block_erase = spi_block_erase_d8,
757 }, {
758 .eraseblocks = { {2 * 1024 * 1024, 1} },
759 .block_erase = spi_block_erase_60,
760 }, {
761 .eraseblocks = { {2 * 1024 * 1024, 1} },
762 .block_erase = spi_block_erase_c7,
763 }
764 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000765 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000766 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000767 },
768
769 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000770 /*{
771 .vendor = "Atmel",
772 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000773 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000774 .manufacture_id = ATMEL_ID,
775 .model_id = AT_26DF321,
776 .total_size = 4096,
777 .page_size = 256,
778 .tested = TEST_UNTESTED,
779 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000780 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000781 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000782 .read = spi_chip_read,
783 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000784
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000785 {
786 .vendor = "Atmel",
787 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000788 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000789 .manufacture_id = ATMEL_ID,
790 .model_id = AT_26F004,
791 .total_size = 512,
792 .page_size = 256,
793 .tested = TEST_UNTESTED,
794 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000795 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000796 .block_erasers =
797 {
798 {
799 .eraseblocks = { {4 * 1024, 128} },
800 .block_erase = spi_block_erase_20,
801 }, {
802 .eraseblocks = { {32 * 1024, 16} },
803 .block_erase = spi_block_erase_52,
804 }, {
805 .eraseblocks = { {64 * 1024, 8} },
806 .block_erase = spi_block_erase_d8,
807 }, {
808 .eraseblocks = { {512 * 1024, 1} },
809 .block_erase = spi_block_erase_60,
810 }, {
811 .eraseblocks = { {512 * 1024, 1} },
812 .block_erase = spi_block_erase_c7,
813 }
814 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000815 .write = NULL /* Incompatible Page write */,
816 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000817 },
818
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000819 {
820 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000821 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000822 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000823 .manufacture_id = ATMEL_ID,
824 .model_id = AT_29C512,
825 .total_size = 64,
826 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000827 .feature_bits = FEATURE_LONG_RESET,
828 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000829 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000830 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000831 .block_erasers =
832 {
833 {
834 .eraseblocks = { {64 * 1024, 1} },
835 .block_erase = erase_chip_block_jedec,
836 }
837 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000838 .write = write_jedec,
839 .read = read_memmapped,
840
841 },
842
843 {
844 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000845 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000846 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000847 .manufacture_id = ATMEL_ID,
848 .model_id = AT_29C010A,
849 .total_size = 128,
850 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000851 .feature_bits = FEATURE_LONG_RESET,
852 .tested = TEST_UNTESTED,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000853 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000854 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000855 .block_erasers =
856 {
857 {
858 .eraseblocks = { {128 * 1024, 1} },
859 .block_erase = erase_chip_block_jedec,
860 }
861 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000862 .write = write_jedec, /* FIXME */
863 .read = read_memmapped,
864 },
865
866 {
867 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000868 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000869 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000870 .manufacture_id = ATMEL_ID,
871 .model_id = AT_29C020,
872 .total_size = 256,
873 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000874 .feature_bits = FEATURE_LONG_RESET,
875 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000876 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000877 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000878 .block_erasers =
879 {
880 {
881 .eraseblocks = { {256 * 1024, 1} },
882 .block_erase = erase_chip_block_jedec,
883 }
884 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000885 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000886 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000887 },
888
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000889 {
890 .vendor = "Atmel",
891 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000892 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000893 .manufacture_id = ATMEL_ID,
894 .model_id = AT_29C040A,
895 .total_size = 512,
896 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000897 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000898 .tested = TEST_UNTESTED,
899 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000900 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000901 .block_erasers =
902 {
903 {
904 .eraseblocks = { {512 * 1024, 1} },
905 .block_erase = erase_chip_block_jedec,
906 }
907 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000908 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000909 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000910 },
911
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000912 {
913 .vendor = "Atmel",
914 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000915 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000916 .manufacture_id = ATMEL_ID,
917 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000918 .total_size = 16896 /* No power of two sizes */,
919 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000920 .tested = TEST_BAD_READ,
921 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000922 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000923 .write = NULL /* Incompatible Page write */,
924 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000925 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000926
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000927 {
928 .vendor = "Atmel",
929 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000930 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000931 .manufacture_id = ATMEL_ID,
932 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000933 .total_size = 128 /* Size can only be determined from status register */,
934 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000935 .tested = TEST_BAD_READ,
936 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000937 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000938 .write = NULL,
939 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000940 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000941
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000942 {
943 .vendor = "Atmel",
944 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000945 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000946 .manufacture_id = ATMEL_ID,
947 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000948 .total_size = 256 /* Size can only be determined from status register */,
949 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000950 .tested = TEST_BAD_READ,
951 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000952 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000953 .write = NULL,
954 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000955 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000956
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000957 {
958 .vendor = "Atmel",
959 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000960 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000961 .manufacture_id = ATMEL_ID,
962 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000963 .total_size = 512 /* Size can only be determined from status register */,
964 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000965 .tested = TEST_BAD_READ,
966 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000967 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000968 .write = NULL,
969 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000970 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000971
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000972 {
973 .vendor = "Atmel",
974 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000975 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000976 .manufacture_id = ATMEL_ID,
977 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000978 .total_size = 1024 /* Size can only be determined from status register */,
979 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000980 .tested = TEST_BAD_READ,
981 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000982 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000983 .write = NULL,
984 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000985 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000986
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000987 {
988 .vendor = "Atmel",
989 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000990 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000991 .manufacture_id = ATMEL_ID,
992 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000993 .total_size = 2048 /* Size can only be determined from status register */,
994 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000995 .tested = TEST_BAD_READ,
996 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000997 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000998 .write = NULL,
999 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001000 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001001
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001002 {
1003 .vendor = "Atmel",
1004 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001005 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001006 .manufacture_id = ATMEL_ID,
1007 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001008 .total_size = 4224 /* No power of two sizes */,
1009 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001010 .tested = TEST_BAD_READ,
1011 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001012 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001013 .write = NULL,
1014 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001015 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001016
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001017 {
1018 .vendor = "Atmel",
1019 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001020 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001021 .manufacture_id = ATMEL_ID,
1022 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001023 .total_size = 4096 /* Size can only be determined from status register */,
1024 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001025 .tested = TEST_BAD_READ,
1026 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001027 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001028 .write = NULL,
1029 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001030 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001031
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001032 {
1033 .vendor = "Atmel",
1034 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001035 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001036 .manufacture_id = ATMEL_ID,
1037 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001038 .total_size = 8192 /* Size can only be determined from status register */,
1039 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001040 .tested = TEST_BAD_READ,
1041 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001042 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001043 .write = NULL,
1044 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001045 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001046
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001047 {
1048 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001049 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001050 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001051 .manufacture_id = ATMEL_ID,
1052 .model_id = AT_49BV512,
1053 .total_size = 64,
1054 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001055 .feature_bits = FEATURE_EITHER_RESET,
1056 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001057 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001058 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001059 .block_erasers =
1060 {
1061 {
1062 .eraseblocks = { {64 * 1024, 1} },
1063 .block_erase = erase_chip_block_jedec,
1064 }
1065 },
Sean Nelson35727f72010-01-28 23:55:12 +00001066 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001067 .read = read_memmapped,
1068 },
1069
1070 {
1071 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001072 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001073 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001074 .manufacture_id = ATMEL_ID,
1075 .model_id = AT_49F002N,
1076 .total_size = 256,
1077 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001078 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001079 .tested = TEST_UNTESTED,
1080 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001081 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001082 .block_erasers =
1083 {
1084 {
1085 .eraseblocks = {
1086 {16 * 1024, 1},
1087 {8 * 1024, 2},
1088 {96 * 1024, 1},
1089 {128 * 1024, 1},
1090 },
1091 .block_erase = erase_sector_jedec,
1092 }, {
1093 .eraseblocks = { {256 * 1024, 1} },
1094 .block_erase = erase_chip_block_jedec,
1095 }
1096 },
Sean Nelson35727f72010-01-28 23:55:12 +00001097 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001098 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001099 },
1100
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001101 {
1102 .vendor = "Atmel",
1103 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001104 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001105 .manufacture_id = ATMEL_ID,
1106 .model_id = AT_49F002NT,
1107 .total_size = 256,
1108 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001109 .feature_bits = FEATURE_EITHER_RESET,
1110 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001111 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001112 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001113 .block_erasers =
1114 {
1115 {
1116 .eraseblocks = {
1117 {128 * 1024, 1},
1118 {96 * 1024, 1},
1119 {8 * 1024, 2},
1120 {16 * 1024, 1},
1121 },
1122 .block_erase = erase_sector_jedec,
1123 }, {
1124 .eraseblocks = { {256 * 1024, 1} },
1125 .block_erase = erase_chip_block_jedec,
1126 }
1127 },
Sean Nelson35727f72010-01-28 23:55:12 +00001128 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001129 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001130 },
1131
Sean Nelson54596372010-01-09 05:30:14 +00001132 /* The next two chip definitions have top/bottom boot blocks, but has no
1133 device differenciation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001134 {
1135 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001136 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001137 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001138 .manufacture_id = AMIC_ID,
1139 .model_id = AMIC_A25L40P,
1140 .total_size = 512,
1141 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001142 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001143 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001144 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001145 .block_erasers =
1146 {
1147 {
1148 .eraseblocks = {
1149 {64 * 1024, 7},
1150 {32 * 1024, 1},
1151 {16 * 1024, 1},
1152 {8 * 1024, 1},
1153 {4 * 1024, 2},
1154 },
1155 .block_erase = spi_block_erase_d8,
1156 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001157 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001158 .block_erase = spi_block_erase_c7,
1159 }
1160 },
1161 .write = spi_chip_write_256,
1162 .read = spi_chip_read,
1163 },
1164
1165 {
1166 .vendor = "AMIC",
1167 .name = "A25L40PU",
1168 .bustype = CHIP_BUSTYPE_SPI,
1169 .manufacture_id = AMIC_ID,
1170 .model_id = AMIC_A25L40P,
1171 .total_size = 512,
1172 .page_size = 256,
1173 .tested = TEST_OK_PRW,
1174 .probe = probe_spi_rdid4,
1175 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001176 .block_erasers =
1177 {
1178 {
1179 .eraseblocks = {
1180 {4 * 1024, 2},
1181 {8 * 1024, 1},
1182 {16 * 1024, 1},
1183 {32 * 1024, 1},
1184 {64 * 1024, 7},
1185 },
1186 .block_erase = spi_block_erase_d8,
1187 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001188 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001189 .block_erase = spi_block_erase_c7,
1190 }
1191 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001192 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001193 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001194 },
1195
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001196 {
1197 .vendor = "AMIC",
1198 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001199 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001200 .manufacture_id = AMIC_ID_NOPREFIX,
1201 .model_id = AMIC_A29002B,
1202 .total_size = 256,
1203 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001204 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001205 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001206 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001207 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001208 .block_erasers =
1209 {
1210 {
1211 .eraseblocks = {
1212 {16 * 1024, 1},
1213 {8 * 1024, 2},
1214 {32 * 1024, 1},
1215 {64 * 1024, 3},
1216 },
Sean Nelson35727f72010-01-28 23:55:12 +00001217 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001218 }, {
1219 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001220 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001221 },
1222 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001223 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001224 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001225 },
1226
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001227 {
1228 .vendor = "AMIC",
1229 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001230 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001231 .manufacture_id = AMIC_ID_NOPREFIX,
1232 .model_id = AMIC_A29002T,
1233 .total_size = 256,
1234 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001235 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1236 .tested = TEST_UNTESTED,
1237 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001238 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001239 .block_erasers =
1240 {
1241 {
1242 .eraseblocks = {
1243 {64 * 1024, 3},
1244 {32 * 1024, 1},
1245 {8 * 1024, 2},
1246 {16 * 1024, 1},
1247 },
Sean Nelson35727f72010-01-28 23:55:12 +00001248 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001249 }, {
1250 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001251 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001252 },
1253 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001254 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001255 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001256 },
1257
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001258 {
1259 .vendor = "AMIC",
1260 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001261 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001262 .manufacture_id = AMIC_ID_NOPREFIX,
1263 .model_id = AMIC_A29040B,
1264 .total_size = 512,
1265 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001266 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1267 .tested = TEST_UNTESTED,
1268 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001269 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001270 .block_erasers =
1271 {
1272 {
1273 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001274 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001275 }, {
1276 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001277 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001278 },
1279 },
Sean Nelson35727f72010-01-28 23:55:12 +00001280 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001281 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001282 },
1283
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001284 {
1285 .vendor = "AMIC",
1286 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001287 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001288 .manufacture_id = AMIC_ID_NOPREFIX,
1289 .model_id = AMIC_A49LF040A,
1290 .total_size = 512,
1291 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001292 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
1293 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001294 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001295 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001296 .block_erasers =
1297 {
1298 {
1299 .eraseblocks = { {64 * 1024, 8} },
1300 .block_erase = erase_block_jedec,
1301 }, {
1302 .eraseblocks = { {512 * 1024, 1} },
1303 .block_erase = erase_chip_block_jedec,
1304 }
1305 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001306 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001307 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001308 },
1309
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001310 {
1311 .vendor = "EMST",
1312 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001313 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001314 .manufacture_id = EMST_ID,
1315 .model_id = EMST_F49B002UA,
1316 .total_size = 256,
1317 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001318 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001319 .tested = TEST_UNTESTED,
1320 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001321 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001322 .block_erasers =
1323 {
1324 {
1325 .eraseblocks = {
1326 {128 * 1024, 1},
1327 {96 * 1024, 1},
1328 {8 * 1024, 2},
1329 {16 * 1024, 1},
1330 },
1331 .block_erase = erase_sector_jedec,
1332 }, {
1333 .eraseblocks = { {256 * 1024, 1} },
1334 .block_erase = erase_chip_block_jedec,
1335 }
1336 },
Sean Nelson35727f72010-01-28 23:55:12 +00001337 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001338 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001339 },
1340
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001341 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001342 .vendor = "Eon",
1343 .name = "EN25B05",
1344 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001345 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001346 .model_id = EN_25B05,
1347 .total_size = 64,
1348 .page_size = 256,
1349 .tested = TEST_UNTESTED,
1350 .probe = probe_spi_rdid,
1351 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001352 .block_erasers =
1353 {
1354 {
1355 .eraseblocks = {
1356 {4 * 1024, 2},
1357 {8 * 1024, 1},
1358 {16 * 1024, 1},
1359 {32 * 1024, 1},
1360 },
1361 .block_erase = spi_block_erase_d8,
1362 }, {
1363 .eraseblocks = { {64 * 1024, 1} },
1364 .block_erase = spi_block_erase_c7,
1365 }
1366 },
1367 .write = spi_chip_write_256,
1368 .read = spi_chip_read,
1369 },
1370
1371 {
1372 .vendor = "Eon",
1373 .name = "EN25B05T",
1374 .bustype = CHIP_BUSTYPE_SPI,
1375 .manufacture_id = EON_ID_NOPREFIX,
1376 .model_id = EN_25B05,
1377 .total_size = 64,
1378 .page_size = 256,
1379 .tested = TEST_UNTESTED,
1380 .probe = probe_spi_rdid,
1381 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001382 .block_erasers =
1383 {
1384 {
1385 .eraseblocks = {
1386 {32 * 1024, 1},
1387 {16 * 1024, 1},
1388 {8 * 1024, 1},
1389 {4 * 1024, 2},
1390 },
1391 .block_erase = spi_block_erase_d8,
1392 }, {
1393 .eraseblocks = { {64 * 1024, 1} },
1394 .block_erase = spi_block_erase_c7,
1395 }
1396 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001397 .write = spi_chip_write_256,
1398 .read = spi_chip_read,
1399 },
1400
1401 {
1402 .vendor = "Eon",
1403 .name = "EN25B10",
1404 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001405 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001406 .model_id = EN_25B10,
1407 .total_size = 128,
1408 .page_size = 256,
1409 .tested = TEST_UNTESTED,
1410 .probe = probe_spi_rdid,
1411 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001412 .block_erasers =
1413 {
1414 {
1415 .eraseblocks = {
1416 {4 * 1024, 2},
1417 {8 * 1024, 1},
1418 {16 * 1024, 1},
1419 {32 * 1024, 3},
1420 },
1421 .block_erase = spi_block_erase_d8,
1422 }, {
1423 .eraseblocks = { {128 * 1024, 1} },
1424 .block_erase = spi_block_erase_c7,
1425 }
1426 },
1427 .write = spi_chip_write_256,
1428 .read = spi_chip_read,
1429 },
1430
1431 {
1432 .vendor = "Eon",
1433 .name = "EN25B10T",
1434 .bustype = CHIP_BUSTYPE_SPI,
1435 .manufacture_id = EON_ID_NOPREFIX,
1436 .model_id = EN_25B10,
1437 .total_size = 128,
1438 .page_size = 256,
1439 .tested = TEST_UNTESTED,
1440 .probe = probe_spi_rdid,
1441 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001442 .block_erasers =
1443 {
1444 {
1445 .eraseblocks = {
1446 {32 * 1024, 3},
1447 {16 * 1024, 1},
1448 {8 * 1024, 1},
1449 {4 * 1024, 2},
1450 },
1451 .block_erase = spi_block_erase_d8,
1452 }, {
1453 .eraseblocks = { {128 * 1024, 1} },
1454 .block_erase = spi_block_erase_c7,
1455 }
1456 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001457 .write = spi_chip_write_256,
1458 .read = spi_chip_read,
1459 },
1460
1461 {
1462 .vendor = "Eon",
1463 .name = "EN25B20",
1464 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001465 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001466 .model_id = EN_25B20,
1467 .total_size = 256,
1468 .page_size = 256,
1469 .tested = TEST_UNTESTED,
1470 .probe = probe_spi_rdid,
1471 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001472 .block_erasers =
1473 {
1474 {
1475 .eraseblocks = {
1476 {4 * 1024, 2},
1477 {8 * 1024, 1},
1478 {16 * 1024, 1},
1479 {32 * 1024, 1},
1480 {64 * 1024, 3}
1481 },
1482 .block_erase = spi_block_erase_d8,
1483 }, {
1484 .eraseblocks = { {256 * 1024, 1} },
1485 .block_erase = spi_block_erase_c7,
1486 }
1487 },
1488 .write = spi_chip_write_256,
1489 .read = spi_chip_read,
1490 },
1491
1492 {
1493 .vendor = "Eon",
1494 .name = "EN25B20T",
1495 .bustype = CHIP_BUSTYPE_SPI,
1496 .manufacture_id = EON_ID_NOPREFIX,
1497 .model_id = EN_25B20,
1498 .total_size = 256,
1499 .page_size = 256,
1500 .tested = TEST_UNTESTED,
1501 .probe = probe_spi_rdid,
1502 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001503 .block_erasers =
1504 {
1505 {
1506 .eraseblocks = {
1507 {64 * 1024, 3},
1508 {32 * 1024, 1},
1509 {16 * 1024, 1},
1510 {8 * 1024, 1},
1511 {4 * 1024, 2},
1512 },
1513 .block_erase = spi_block_erase_d8,
1514 }, {
1515 .eraseblocks = { {256 * 1024, 1} },
1516 .block_erase = spi_block_erase_c7,
1517 }
1518 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001519 .write = spi_chip_write_256,
1520 .read = spi_chip_read,
1521 },
1522
1523 {
1524 .vendor = "Eon",
1525 .name = "EN25B40",
1526 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001527 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001528 .model_id = EN_25B40,
1529 .total_size = 512,
1530 .page_size = 256,
1531 .tested = TEST_UNTESTED,
1532 .probe = probe_spi_rdid,
1533 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001534 .block_erasers =
1535 {
1536 {
1537 .eraseblocks = {
1538 {4 * 1024, 2},
1539 {8 * 1024, 1},
1540 {16 * 1024, 1},
1541 {32 * 1024, 1},
1542 {64 * 1024, 7}
1543 },
1544 .block_erase = spi_block_erase_d8,
1545 }, {
1546 .eraseblocks = { {512 * 1024, 1} },
1547 .block_erase = spi_block_erase_c7,
1548 }
1549 },
1550 .write = spi_chip_write_256,
1551 .read = spi_chip_read,
1552 },
1553
1554 {
1555 .vendor = "Eon",
1556 .name = "EN25B40T",
1557 .bustype = CHIP_BUSTYPE_SPI,
1558 .manufacture_id = EON_ID_NOPREFIX,
1559 .model_id = EN_25B40,
1560 .total_size = 512,
1561 .page_size = 256,
1562 .tested = TEST_UNTESTED,
1563 .probe = probe_spi_rdid,
1564 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001565 .block_erasers =
1566 {
1567 {
1568 .eraseblocks = {
1569 {64 * 1024, 7},
1570 {32 * 1024, 1},
1571 {16 * 1024, 1},
1572 {8 * 1024, 1},
1573 {4 * 1024, 2},
1574 },
1575 .block_erase = spi_block_erase_d8,
1576 }, {
1577 .eraseblocks = { {512 * 1024, 1} },
1578 .block_erase = spi_block_erase_c7,
1579 }
1580 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001581 .write = spi_chip_write_256,
1582 .read = spi_chip_read,
1583 },
1584
1585 {
1586 .vendor = "Eon",
1587 .name = "EN25B80",
1588 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001589 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001590 .model_id = EN_25B80,
1591 .total_size = 1024,
1592 .page_size = 256,
1593 .tested = TEST_UNTESTED,
1594 .probe = probe_spi_rdid,
1595 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001596 .block_erasers =
1597 {
1598 {
1599 .eraseblocks = {
1600 {4 * 1024, 2},
1601 {8 * 1024, 1},
1602 {16 * 1024, 1},
1603 {32 * 1024, 1},
1604 {64 * 1024, 15}
1605 },
1606 .block_erase = spi_block_erase_d8,
1607 }, {
1608 .eraseblocks = { {1024 * 1024, 1} },
1609 .block_erase = spi_block_erase_c7,
1610 }
1611 },
1612 .write = spi_chip_write_256,
1613 .read = spi_chip_read,
1614 },
1615
1616 {
1617 .vendor = "Eon",
1618 .name = "EN25B80T",
1619 .bustype = CHIP_BUSTYPE_SPI,
1620 .manufacture_id = EON_ID_NOPREFIX,
1621 .model_id = EN_25B80,
1622 .total_size = 1024,
1623 .page_size = 256,
1624 .tested = TEST_UNTESTED,
1625 .probe = probe_spi_rdid,
1626 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001627 .block_erasers =
1628 {
1629 {
1630 .eraseblocks = {
1631 {64 * 1024, 15},
1632 {32 * 1024, 1},
1633 {16 * 1024, 1},
1634 {8 * 1024, 1},
1635 {4 * 1024, 2},
1636 },
1637 .block_erase = spi_block_erase_d8,
1638 }, {
1639 .eraseblocks = { {1024 * 1024, 1} },
1640 .block_erase = spi_block_erase_c7,
1641 }
1642 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001643 .write = spi_chip_write_256,
1644 .read = spi_chip_read,
1645 },
1646
1647 {
1648 .vendor = "Eon",
1649 .name = "EN25B16",
1650 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001651 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001652 .model_id = EN_25B16,
1653 .total_size = 2048,
1654 .page_size = 256,
1655 .tested = TEST_UNTESTED,
1656 .probe = probe_spi_rdid,
1657 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001658 .block_erasers =
1659 {
1660 {
1661 .eraseblocks = {
1662 {4 * 1024, 2},
1663 {8 * 1024, 1},
1664 {16 * 1024, 1},
1665 {32 * 1024, 1},
1666 {64 * 1024, 31},
1667 },
1668 .block_erase = spi_block_erase_d8,
1669 }, {
1670 .eraseblocks = { {2 * 1024 * 1024, 1} },
1671 .block_erase = spi_block_erase_c7,
1672 }
1673 },
1674 .write = spi_chip_write_256,
1675 .read = spi_chip_read,
1676 },
1677
1678 {
1679 .vendor = "Eon",
1680 .name = "EN25B16T",
1681 .bustype = CHIP_BUSTYPE_SPI,
1682 .manufacture_id = EON_ID_NOPREFIX,
1683 .model_id = EN_25B16,
1684 .total_size = 2048,
1685 .page_size = 256,
1686 .tested = TEST_UNTESTED,
1687 .probe = probe_spi_rdid,
1688 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001689 .block_erasers =
1690 {
1691 {
1692 .eraseblocks = {
1693 {64 * 1024, 31},
1694 {32 * 1024, 1},
1695 {16 * 1024, 1},
1696 {8 * 1024, 1},
1697 {4 * 1024, 2},
1698 },
1699 .block_erase = spi_block_erase_d8,
1700 }, {
1701 .eraseblocks = { {2 * 1024 * 1024, 1} },
1702 .block_erase = spi_block_erase_c7,
1703 }
1704 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001705 .write = spi_chip_write_256,
1706 .read = spi_chip_read,
1707 },
1708
1709 {
1710 .vendor = "Eon",
1711 .name = "EN25B32",
1712 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001713 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001714 .model_id = EN_25B32,
1715 .total_size = 4096,
1716 .page_size = 256,
1717 .tested = TEST_UNTESTED,
1718 .probe = probe_spi_rdid,
1719 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001720 .block_erasers =
1721 {
1722 {
1723 .eraseblocks = {
1724 {4 * 1024, 2},
1725 {8 * 1024, 1},
1726 {16 * 1024, 1},
1727 {32 * 1024, 1},
1728 {64 * 1024, 63},
1729 },
1730 .block_erase = spi_block_erase_d8,
1731 }, {
1732 .eraseblocks = { {4 * 1024 * 1024, 1} },
1733 .block_erase = spi_block_erase_c7,
1734 }
1735 },
1736 .write = spi_chip_write_256,
1737 .read = spi_chip_read,
1738 },
1739
1740 {
1741 .vendor = "Eon",
1742 .name = "EN25B32T",
1743 .bustype = CHIP_BUSTYPE_SPI,
1744 .manufacture_id = EON_ID_NOPREFIX,
1745 .model_id = EN_25B32,
1746 .total_size = 4096,
1747 .page_size = 256,
1748 .tested = TEST_UNTESTED,
1749 .probe = probe_spi_rdid,
1750 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001751 .block_erasers =
1752 {
1753 {
1754 .eraseblocks = {
1755 {64 * 1024, 63},
1756 {32 * 1024, 1},
1757 {16 * 1024, 1},
1758 {8 * 1024, 1},
1759 {4 * 1024, 2},
1760 },
1761 .block_erase = spi_block_erase_d8,
1762 }, {
1763 .eraseblocks = { {4 * 1024 * 1024, 1} },
1764 .block_erase = spi_block_erase_c7,
1765 }
1766 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001767 .write = spi_chip_write_256,
1768 .read = spi_chip_read,
1769 },
1770
1771 {
1772 .vendor = "Eon",
1773 .name = "EN25B64",
1774 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001775 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001776 .model_id = EN_25B64,
1777 .total_size = 8192,
1778 .page_size = 256,
1779 .tested = TEST_UNTESTED,
1780 .probe = probe_spi_rdid,
1781 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001782 .block_erasers =
1783 {
1784 {
1785 .eraseblocks = {
1786 {4 * 1024, 2},
1787 {8 * 1024, 1},
1788 {16 * 1024, 1},
1789 {32 * 1024, 1},
1790 {64 * 1024, 127},
1791 },
1792 .block_erase = spi_block_erase_d8,
1793 }, {
1794 .eraseblocks = { {8 * 1024 * 1024, 1} },
1795 .block_erase = spi_block_erase_c7,
1796 }
1797 },
1798 .write = spi_chip_write_256,
1799 .read = spi_chip_read,
1800 },
1801
1802 {
1803 .vendor = "Eon",
1804 .name = "EN25B64T",
1805 .bustype = CHIP_BUSTYPE_SPI,
1806 .manufacture_id = EON_ID_NOPREFIX,
1807 .model_id = EN_25B64,
1808 .total_size = 8192,
1809 .page_size = 256,
1810 .tested = TEST_UNTESTED,
1811 .probe = probe_spi_rdid,
1812 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001813 .block_erasers =
1814 {
1815 {
1816 .eraseblocks = {
1817 {64 * 1024, 127},
1818 {32 * 1024, 1},
1819 {16 * 1024, 1},
1820 {8 * 1024, 1},
1821 {4 * 1024, 2},
1822 },
1823 .block_erase = spi_block_erase_d8,
1824 }, {
1825 .eraseblocks = { {8 * 1024 * 1024, 1} },
1826 .block_erase = spi_block_erase_c7,
1827 }
1828 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001829 .write = spi_chip_write_256,
1830 .read = spi_chip_read,
1831 },
1832
1833 {
1834 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001835 .name = "EN25D16",
1836 .bustype = CHIP_BUSTYPE_SPI,
1837 .manufacture_id = EON_ID_NOPREFIX,
1838 .model_id = EN_25D16,
1839 .total_size = 2048,
1840 .page_size = 256,
1841 .tested = TEST_UNTESTED,
1842 .probe = probe_spi_rdid,
1843 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001844 .block_erasers =
1845 {
1846 {
1847 .eraseblocks = { {4 * 1024, 512} },
1848 .block_erase = spi_block_erase_20,
1849 }, {
1850 .eraseblocks = { {64 * 1024, 32} },
1851 .block_erase = spi_block_erase_d8,
1852 }, {
1853 .eraseblocks = { {64 * 1024, 32} },
1854 .block_erase = spi_block_erase_52,
1855 }, {
1856 .eraseblocks = { {2 * 1024 * 1024, 1} },
1857 .block_erase = spi_block_erase_60,
1858 }, {
1859 .eraseblocks = { {2 * 1024 * 1024, 1} },
1860 .block_erase = spi_block_erase_c7,
1861 }
1862 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001863 .write = spi_chip_write_256,
1864 .read = spi_chip_read,
1865 },
1866
1867 {
1868 .vendor = "Eon",
1869 .name = "EN25F05",
1870 .bustype = CHIP_BUSTYPE_SPI,
1871 .manufacture_id = EON_ID_NOPREFIX,
1872 .model_id = EN_25F05,
1873 .total_size = 64,
1874 .page_size = 256,
1875 .tested = TEST_UNTESTED,
1876 .probe = probe_spi_rdid,
1877 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001878 .block_erasers =
1879 {
1880 {
1881 .eraseblocks = { {4 * 1024, 16} },
1882 .block_erase = spi_block_erase_20,
1883 }, {
1884 .eraseblocks = { {32 * 1024, 2} },
1885 .block_erase = spi_block_erase_d8,
1886 }, {
1887 .eraseblocks = { {32 * 1024, 2} },
1888 .block_erase = spi_block_erase_52,
1889 }, {
1890 .eraseblocks = { {64 * 1024, 1} },
1891 .block_erase = spi_block_erase_60,
1892 }, {
1893 .eraseblocks = { {64 * 1024, 1} },
1894 .block_erase = spi_block_erase_c7,
1895 }
1896 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001897 .write = spi_chip_write_256,
1898 .read = spi_chip_read,
1899 },
1900
1901 {
1902 .vendor = "Eon",
1903 .name = "EN25F10",
1904 .bustype = CHIP_BUSTYPE_SPI,
1905 .manufacture_id = EON_ID_NOPREFIX,
1906 .model_id = EN_25F10,
1907 .total_size = 128,
1908 .page_size = 256,
1909 .tested = TEST_UNTESTED,
1910 .probe = probe_spi_rdid,
1911 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001912 .block_erasers =
1913 {
1914 {
1915 .eraseblocks = { {4 * 1024, 32} },
1916 .block_erase = spi_block_erase_20,
1917 }, {
1918 .eraseblocks = { {32 * 1024, 4} },
1919 .block_erase = spi_block_erase_d8,
1920 }, {
1921 .eraseblocks = { {32 * 1024, 4} },
1922 .block_erase = spi_block_erase_52,
1923 }, {
1924 .eraseblocks = { {128 * 1024, 1} },
1925 .block_erase = spi_block_erase_60,
1926 }, {
1927 .eraseblocks = { {128 * 1024, 1} },
1928 .block_erase = spi_block_erase_c7,
1929 }
1930 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001931 .write = spi_chip_write_256,
1932 .read = spi_chip_read,
1933 },
1934
1935 {
1936 .vendor = "Eon",
1937 .name = "EN25F20",
1938 .bustype = CHIP_BUSTYPE_SPI,
1939 .manufacture_id = EON_ID_NOPREFIX,
1940 .model_id = EN_25F20,
1941 .total_size = 256,
1942 .page_size = 256,
1943 .tested = TEST_UNTESTED,
1944 .probe = probe_spi_rdid,
1945 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001946 .block_erasers =
1947 {
1948 {
1949 .eraseblocks = { {4 * 1024, 64} },
1950 .block_erase = spi_block_erase_20,
1951 }, {
1952 .eraseblocks = { {64 * 1024, 4} },
1953 .block_erase = spi_block_erase_d8,
1954 }, {
1955 .eraseblocks = { {64 * 1024, 4} },
1956 .block_erase = spi_block_erase_52,
1957 }, {
1958 .eraseblocks = { {256 * 1024, 1} },
1959 .block_erase = spi_block_erase_60,
1960 }, {
1961 .eraseblocks = { {256 * 1024, 1} },
1962 .block_erase = spi_block_erase_c7,
1963 }
1964 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001965 .write = spi_chip_write_256,
1966 .read = spi_chip_read,
1967 },
1968
1969 {
1970 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001971 .name = "EN25F40",
1972 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001973 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001974 .model_id = EN_25F40,
1975 .total_size = 512,
1976 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001977 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001978 .probe = probe_spi_rdid,
1979 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001980 .block_erasers =
1981 {
1982 {
Sean Nelson54596372010-01-09 05:30:14 +00001983 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001984 .block_erase = spi_block_erase_20,
1985 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001986 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001987 .block_erase = spi_block_erase_d8,
1988 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001989 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001990 .block_erase = spi_block_erase_60,
1991 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001992 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001993 .block_erase = spi_block_erase_c7,
1994 },
1995 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001996 .write = spi_chip_write_256,
1997 .read = spi_chip_read,
1998 },
1999
2000 {
2001 .vendor = "Eon",
2002 .name = "EN25F80",
2003 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002004 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002005 .model_id = EN_25F80,
2006 .total_size = 1024,
2007 .page_size = 256,
2008 .tested = TEST_UNTESTED,
2009 .probe = probe_spi_rdid,
2010 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002011 .block_erasers =
2012 {
2013 {
2014 .eraseblocks = { {4 * 1024, 256} },
2015 .block_erase = spi_block_erase_20,
2016 }, {
2017 .eraseblocks = { {64 * 1024, 16} },
2018 .block_erase = spi_block_erase_d8,
2019 }, {
2020 .eraseblocks = { {1024 * 1024, 1} },
2021 .block_erase = spi_block_erase_60,
2022 }, {
2023 .eraseblocks = { {1024 * 1024, 1} },
2024 .block_erase = spi_block_erase_c7,
2025 }
2026 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002027 .write = spi_chip_write_256,
2028 .read = spi_chip_read,
2029 },
2030
2031 {
2032 .vendor = "Eon",
2033 .name = "EN25F16",
2034 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002035 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002036 .model_id = EN_25F16,
2037 .total_size = 2048,
2038 .page_size = 256,
2039 .tested = TEST_UNTESTED,
2040 .probe = probe_spi_rdid,
2041 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002042 .block_erasers =
2043 {
2044 {
2045 .eraseblocks = { {4 * 1024, 512} },
2046 .block_erase = spi_block_erase_20,
2047 }, {
2048 .eraseblocks = { {64 * 1024, 32} },
2049 .block_erase = spi_block_erase_d8,
2050 }, {
2051 .eraseblocks = { {2 * 1024 * 1024, 1} },
2052 .block_erase = spi_block_erase_60,
2053 }, {
2054 .eraseblocks = { {2 * 1024 * 1024, 1} },
2055 .block_erase = spi_block_erase_c7,
2056 }
2057 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002058 .write = spi_chip_write_256,
2059 .read = spi_chip_read,
2060 },
2061
2062 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002063 .vendor = "Eon",
2064 .name = "EN25F32",
2065 .bustype = CHIP_BUSTYPE_SPI,
2066 .manufacture_id = EON_ID_NOPREFIX,
2067 .model_id = EN_25F32,
2068 .total_size = 4096,
2069 .page_size = 256,
2070 .tested = TEST_UNTESTED,
2071 .probe = probe_spi_rdid,
2072 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002073 .block_erasers =
2074 {
2075 {
2076 .eraseblocks = { {4 * 1024, 1024} },
2077 .block_erase = spi_block_erase_20,
2078 }, {
2079 .eraseblocks = { {64 * 1024, 64} },
2080 .block_erase = spi_block_erase_d8,
2081 }, {
2082 .eraseblocks = { {4 * 1024 * 1024, 1} },
2083 .block_erase = spi_block_erase_60,
2084 }, {
2085 .eraseblocks = { {4 * 1024 * 1024, 1} },
2086 .block_erase = spi_block_erase_c7,
2087 }
2088 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002089 .write = spi_chip_write_256,
2090 .read = spi_chip_read,
2091 },
2092
2093 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002094 .vendor = "EON",
2095 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002096 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002097 .manufacture_id = EON_ID,
2098 .model_id = EN_29F002B,
2099 .total_size = 256,
2100 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002101 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002102 .tested = TEST_UNTESTED,
2103 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002104 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002105 .block_erasers =
2106 {
2107 {
2108 .eraseblocks = {
2109 {64 * 1024, 3},
2110 {32 * 1024, 1},
2111 {8 * 1024, 2},
2112 {16 * 1024, 1},
2113 },
2114 .block_erase = erase_sector_jedec,
2115 }, {
2116 .eraseblocks = { {256 * 1024, 1} },
2117 .block_erase = erase_chip_block_jedec,
2118 },
2119 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002120 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002121 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002122 },
2123
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002124 {
2125 .vendor = "EON",
2126 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002127 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002128 .manufacture_id = EON_ID,
2129 .model_id = EN_29F002T,
2130 .total_size = 256,
2131 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002132 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
2133 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002134 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002135 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002136 .block_erasers =
2137 {
2138 {
2139 .eraseblocks = {
2140 {16 * 1024, 1},
2141 {8 * 1024, 2},
2142 {32 * 1024, 1},
2143 {64 * 1024, 3},
2144 },
2145 .block_erase = erase_sector_jedec,
2146 }, {
2147 .eraseblocks = { {256 * 1024, 1} },
2148 .block_erase = erase_chip_block_jedec,
2149 },
2150 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002151 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002152 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002153 },
2154
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002155 {
2156 .vendor = "Fujitsu",
2157 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002158 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002159 .manufacture_id = FUJITSU_ID,
2160 .model_id = MBM29F004BC,
2161 .total_size = 512,
2162 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002163 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002164 .tested = TEST_UNTESTED,
2165 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002166 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002167 .block_erasers =
2168 {
2169 {
2170 .eraseblocks = {
2171 {16 * 1024, 1},
2172 {8 * 1024, 2},
2173 {32 * 1024, 1},
2174 {64 * 1024, 7},
2175 },
Sean Nelson35727f72010-01-28 23:55:12 +00002176 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002177 }, {
2178 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002179 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002180 },
2181 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002182 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002183 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002184 },
2185
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002186 {
2187 .vendor = "Fujitsu",
2188 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002189 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002190 .manufacture_id = FUJITSU_ID,
2191 .model_id = MBM29F004TC,
2192 .total_size = 512,
2193 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002194 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002195 .tested = TEST_UNTESTED,
2196 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002197 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002198 .block_erasers =
2199 {
2200 {
2201 .eraseblocks = {
2202 {64 * 1024, 7},
2203 {32 * 1024, 1},
2204 {8 * 1024, 2},
2205 {16 * 1024, 1},
2206 },
Sean Nelson35727f72010-01-28 23:55:12 +00002207 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002208 }, {
2209 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002210 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002211 },
2212 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002214 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002215 },
2216
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002217 {
Sean Nelson35727f72010-01-28 23:55:12 +00002218 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002219 .vendor = "Fujitsu",
2220 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002221 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002222 .manufacture_id = FUJITSU_ID,
2223 .model_id = MBM29F400BC,
2224 .total_size = 512,
2225 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002226 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002227 .tested = TEST_UNTESTED,
2228 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002229 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002230 .block_erasers =
2231 {
2232 {
2233 .eraseblocks = {
2234 {16 * 1024, 1},
2235 {8 * 1024, 2},
2236 {32 * 1024, 1},
2237 {64 * 1024, 7},
2238 },
2239 .block_erase = block_erase_m29f400bt,
2240 }, {
2241 .eraseblocks = { {512 * 1024, 1} },
2242 .block_erase = block_erase_chip_m29f400bt,
2243 },
2244 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002245 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002246 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002247 },
2248
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002249 {
2250 .vendor = "Fujitsu",
2251 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002252 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002253 .manufacture_id = FUJITSU_ID,
2254 .model_id = MBM29F400TC,
2255 .total_size = 512,
2256 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002257 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002258 .tested = TEST_UNTESTED,
2259 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002260 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002261 .block_erasers =
2262 {
2263 {
2264 .eraseblocks = {
2265 {64 * 1024, 7},
2266 {32 * 1024, 1},
2267 {8 * 1024, 2},
2268 {16 * 1024, 1},
2269 },
2270 .block_erase = block_erase_m29f400bt,
2271 }, {
2272 .eraseblocks = { {512 * 1024, 1} },
2273 .block_erase = block_erase_chip_m29f400bt,
2274 },
2275 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002276 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002277 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002278 },
2279
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002280 {
2281 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002282 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002283 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002284 .manufacture_id = INTEL_ID,
2285 .model_id = P28F001BXB,
2286 .total_size = 128,
2287 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelson35727f72010-01-28 23:55:12 +00002288 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002289 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002290 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002291 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002292 .block_erasers =
2293 {
2294 {
2295 .eraseblocks = {
2296 {8 * 1024, 1},
2297 {4 * 1024, 2},
2298 {112 * 1024, 1},
2299 },
2300 .block_erase = erase_82802ab_block,
2301 },
2302 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002303 .write = NULL,
2304 .read = read_memmapped,
2305 },
2306
2307 {
2308 .vendor = "Intel",
2309 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002310 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002311 .manufacture_id = INTEL_ID,
2312 .model_id = P28F001BXT,
2313 .total_size = 128,
2314 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelson35727f72010-01-28 23:55:12 +00002315 .feature_bits = 0,
2316 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002317 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002318 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002319 .block_erasers =
2320 {
2321 {
2322 .eraseblocks = {
2323 {112 * 1024, 1},
2324 {4 * 1024, 2},
2325 {8 * 1024, 1},
2326 },
2327 .block_erase = erase_82802ab_block,
2328 },
2329 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002330 .write = NULL,
2331 .read = read_memmapped,
2332 },
2333
2334 {
2335 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002336 .name = "28F004S5",
2337 .bustype = CHIP_BUSTYPE_PARALLEL,
2338 .manufacture_id = INTEL_ID,
2339 .model_id = E_28F004S5,
2340 .total_size = 512,
2341 .page_size = 256,
2342 .tested = TEST_UNTESTED,
2343 .probe = probe_82802ab,
2344 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002345 .block_erasers =
2346 {
2347 {
2348 .eraseblocks = { {64 * 1024, 8} },
2349 .block_erase = erase_82802ab_block,
2350 },
2351 },
2352 .write = write_82802ab,
2353 .read = read_memmapped,
2354 },
2355
2356 {
2357 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002358 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002359 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002360 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002361 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002362 .total_size = 512,
2363 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002364 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002365 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002366 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002367 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002368 .block_erasers =
2369 {
2370 {
2371 .eraseblocks = { {64 * 1024, 8} },
2372 .block_erase = erase_82802ab_block,
2373 },
2374 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002375 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002376 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002377 },
2378
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002379 {
2380 .vendor = "Intel",
2381 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002382 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002383 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002384 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002385 .total_size = 1024,
2386 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002387 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002388 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002389 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002390 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002391 .block_erasers =
2392 {
2393 {
2394 .eraseblocks = { {64 * 1024, 16} },
2395 .block_erase = erase_82802ab_block,
2396 },
2397 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002398 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002399 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002400 },
2401
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002402 {
2403 .vendor = "Macronix",
2404 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002405 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002406 .manufacture_id = MX_ID,
2407 .model_id = MX_25L512,
2408 .total_size = 64,
2409 .page_size = 256,
2410 .tested = TEST_UNTESTED,
2411 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002412 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002413 .block_erasers =
2414 {
2415 {
2416 .eraseblocks = { {4 * 1024, 16} },
2417 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002418 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002419 .eraseblocks = { {64 * 1024, 1} },
2420 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002421 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002422 .eraseblocks = { {64 * 1024, 1} },
2423 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002424 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002425 .eraseblocks = { {64 * 1024, 1} },
2426 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002427 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002428 .eraseblocks = { {64 * 1024, 1} },
2429 .block_erase = spi_block_erase_c7,
2430 },
2431 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002432 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002433 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002434 },
2435
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002436 {
2437 .vendor = "Macronix",
2438 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002439 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002440 .manufacture_id = MX_ID,
2441 .model_id = MX_25L1005,
2442 .total_size = 128,
2443 .page_size = 256,
2444 .tested = TEST_UNTESTED,
2445 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002446 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002447 .block_erasers =
2448 {
2449 {
2450 .eraseblocks = { {4 * 1024, 32} },
2451 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002452 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002453 .eraseblocks = { {64 * 1024, 2} },
2454 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002455 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002456 .eraseblocks = { {128 * 1024, 1} },
2457 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002458 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002459 .eraseblocks = { {128 * 1024, 1} },
2460 .block_erase = spi_block_erase_c7,
2461 },
2462 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002463 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002464 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002465 },
2466
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002467 {
2468 .vendor = "Macronix",
2469 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002470 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002471 .manufacture_id = MX_ID,
2472 .model_id = MX_25L2005,
2473 .total_size = 256,
2474 .page_size = 256,
2475 .tested = TEST_UNTESTED,
2476 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002477 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002478 .block_erasers =
2479 {
2480 {
2481 .eraseblocks = { {4 * 1024, 64} },
2482 .block_erase = spi_block_erase_20,
2483 }, {
2484 .eraseblocks = { {64 * 1024, 4} },
2485 .block_erase = spi_block_erase_52,
2486 }, {
2487 .eraseblocks = { {64 * 1024, 4} },
2488 .block_erase = spi_block_erase_d8,
2489 }, {
2490 .eraseblocks = { {256 * 1024, 1} },
2491 .block_erase = spi_block_erase_60,
2492 }, {
2493 .eraseblocks = { {256 * 1024, 1} },
2494 .block_erase = spi_block_erase_c7,
2495 },
2496 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002497 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002498 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002499 },
2500
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002501 {
2502 .vendor = "Macronix",
2503 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002504 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002505 .manufacture_id = MX_ID,
2506 .model_id = MX_25L4005,
2507 .total_size = 512,
2508 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002509 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002510 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002511 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002512 .block_erasers =
2513 {
2514 {
2515 .eraseblocks = { {4 * 1024, 128} },
2516 .block_erase = spi_block_erase_20,
2517 }, {
2518 .eraseblocks = { {64 * 1024, 8} },
2519 .block_erase = spi_block_erase_52,
2520 }, {
2521 .eraseblocks = { {64 * 1024, 8} },
2522 .block_erase = spi_block_erase_d8,
2523 }, {
2524 .eraseblocks = { {512 * 1024, 1} },
2525 .block_erase = spi_block_erase_60,
2526 }, {
2527 .eraseblocks = { {512 * 1024, 1} },
2528 .block_erase = spi_block_erase_c7,
2529 },
2530 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002531 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002532 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002533 },
2534
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002535 {
2536 .vendor = "Macronix",
2537 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002538 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002539 .manufacture_id = MX_ID,
2540 .model_id = MX_25L8005,
2541 .total_size = 1024,
2542 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002543 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002544 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002545 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002546 .block_erasers =
2547 {
2548 {
2549 .eraseblocks = { {4 * 1024, 256} },
2550 .block_erase = spi_block_erase_20,
2551 }, {
2552 .eraseblocks = { {64 * 1024, 16} },
2553 .block_erase = spi_block_erase_52,
2554 }, {
2555 .eraseblocks = { {64 * 1024, 16} },
2556 .block_erase = spi_block_erase_d8,
2557 }, {
2558 .eraseblocks = { {1024 * 1024, 1} },
2559 .block_erase = spi_block_erase_60,
2560 }, {
2561 .eraseblocks = { {1024 * 1024, 1} },
2562 .block_erase = spi_block_erase_c7,
2563 },
2564 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002565 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002566 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002567 },
2568
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002569 {
2570 .vendor = "Macronix",
2571 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002572 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002573 .manufacture_id = MX_ID,
2574 .model_id = MX_25L1605,
2575 .total_size = 2048,
2576 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002577 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002578 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002579 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002580 .block_erasers =
2581 {
2582 {
2583 .eraseblocks = { {4 * 1024, 512} },
2584 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2585 }, {
2586 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2587 .block_erase = spi_block_erase_52,
2588 }, {
2589 .eraseblocks = { {64 * 1024, 32} },
2590 .block_erase = spi_block_erase_d8,
2591 }, {
2592 .eraseblocks = { {2 * 1024 * 1024, 1} },
2593 .block_erase = spi_block_erase_60,
2594 }, {
2595 .eraseblocks = { {2 * 1024 * 1024, 1} },
2596 .block_erase = spi_block_erase_c7,
2597 },
2598 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002599 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002600 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002601 },
2602
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002603 {
2604 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002605 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002606 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002607 .manufacture_id = MX_ID,
2608 .model_id = MX_25L1635D,
2609 .total_size = 2048,
2610 .page_size = 256,
2611 .tested = TEST_UNTESTED,
2612 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002613 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002614 .block_erasers =
2615 {
2616 {
2617 .eraseblocks = { {4 * 1024, 512} },
2618 .block_erase = spi_block_erase_20,
2619 }, {
2620 .eraseblocks = { {64 * 1024, 32} },
2621 .block_erase = spi_block_erase_d8,
2622 }, {
2623 .eraseblocks = { {2 * 1024 * 1024, 1} },
2624 .block_erase = spi_block_erase_60,
2625 }, {
2626 .eraseblocks = { {2 * 1024 * 1024, 1} },
2627 .block_erase = spi_block_erase_c7,
2628 }
2629 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002630 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002631 .read = spi_chip_read,
2632 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002633
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002634 {
2635 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002636 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002637 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002638 .manufacture_id = MX_ID,
2639 .model_id = MX_25L3205,
2640 .total_size = 4096,
2641 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002642 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002643 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002644 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002645 .block_erasers =
2646 {
2647 {
2648 .eraseblocks = { {4 * 1024, 1024} },
2649 .block_erase = spi_block_erase_20,
2650 }, {
2651 .eraseblocks = { {4 * 1024, 1024} },
2652 .block_erase = spi_block_erase_d8,
2653 }, {
2654 .eraseblocks = { {4 * 1024 * 1024, 1} },
2655 .block_erase = spi_block_erase_60,
2656 }, {
2657 .eraseblocks = { {4 * 1024 * 1024, 1} },
2658 .block_erase = spi_block_erase_c7,
2659 },
2660 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002661 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002662 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002663 },
2664
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002665 {
2666 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002667 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002668 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002669 .manufacture_id = MX_ID,
2670 .model_id = MX_25L3235D,
2671 .total_size = 4096,
2672 .page_size = 256,
2673 .tested = TEST_UNTESTED,
2674 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002675 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002676 .block_erasers =
2677 {
2678 {
2679 .eraseblocks = { {4 * 1024, 1024} },
2680 .block_erase = spi_block_erase_20,
2681 }, {
2682 .eraseblocks = { {64 * 1024, 64} },
2683 .block_erase = spi_block_erase_d8,
2684 }, {
2685 .eraseblocks = { {4 * 1024 * 1024, 1} },
2686 .block_erase = spi_block_erase_60,
2687 }, {
2688 .eraseblocks = { {4 * 1024 * 1024, 1} },
2689 .block_erase = spi_block_erase_c7,
2690 }
2691 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002692 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002693 .read = spi_chip_read,
2694 },
2695
2696 {
2697 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002698 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002699 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002700 .manufacture_id = MX_ID,
2701 .model_id = MX_25L6405,
2702 .total_size = 8192,
2703 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002704 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002705 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002706 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002707 .block_erasers =
2708 {
2709 {
2710 .eraseblocks = { {64 * 1024, 128} },
2711 .block_erase = spi_block_erase_20,
2712 }, {
2713 .eraseblocks = { {64 * 1024, 128} },
2714 .block_erase = spi_block_erase_d8,
2715 }, {
2716 .eraseblocks = { {8 * 1024 * 1024, 1} },
2717 .block_erase = spi_block_erase_60,
2718 }, {
2719 .eraseblocks = { {8 * 1024 * 1024, 1} },
2720 .block_erase = spi_block_erase_c7,
2721 }
2722 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002723 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002724 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002725 },
2726
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002727 {
2728 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002729 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002730 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002731 .manufacture_id = MX_ID,
2732 .model_id = MX_25L12805,
2733 .total_size = 16384,
2734 .page_size = 256,
2735 .tested = TEST_UNTESTED,
2736 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002737 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002738 .block_erasers =
2739 {
2740 {
2741 .eraseblocks = { {4 * 1024, 4096} },
2742 .block_erase = spi_block_erase_20,
2743 }, {
2744 .eraseblocks = { {64 * 1024, 256} },
2745 .block_erase = spi_block_erase_d8,
2746 }, {
2747 .eraseblocks = { {16 * 1024 * 1024, 1} },
2748 .block_erase = spi_block_erase_60,
2749 }, {
2750 .eraseblocks = { {16 * 1024 * 1024, 1} },
2751 .block_erase = spi_block_erase_c7,
2752 }
2753 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002754 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002755 .read = spi_chip_read,
2756 },
2757
2758 {
2759 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002760 .name = "MX29F001B",
2761 .bustype = CHIP_BUSTYPE_PARALLEL,
2762 .manufacture_id = MX_ID,
2763 .model_id = MX_29F001B,
2764 .total_size = 128,
2765 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002766 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2767 .tested = TEST_UNTESTED,
2768 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002769 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002770 .block_erasers =
2771 {
2772 {
2773 .eraseblocks = {
2774 {8 * 1024, 1},
2775 {4 * 1024, 2},
2776 {8 * 1024, 2},
2777 {32 * 1024, 1},
2778 {64 * 1024, 1},
2779 },
Sean Nelson35727f72010-01-28 23:55:12 +00002780 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002781 }, {
2782 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002783 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002784 }
2785 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002786 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002787 .read = read_memmapped,
2788 },
2789
2790 {
2791 .vendor = "Macronix",
2792 .name = "MX29F001T",
2793 .bustype = CHIP_BUSTYPE_PARALLEL,
2794 .manufacture_id = MX_ID,
2795 .model_id = MX_29F001T,
2796 .total_size = 128,
2797 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002798 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2799 .tested = TEST_UNTESTED,
2800 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002801 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002802 .block_erasers =
2803 {
2804 {
2805 .eraseblocks = {
2806 {64 * 1024, 1},
2807 {32 * 1024, 1},
2808 {8 * 1024, 2},
2809 {4 * 1024, 2},
2810 {8 * 1024, 1},
2811 },
Sean Nelson35727f72010-01-28 23:55:12 +00002812 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002813 }, {
2814 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002815 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002816 }
2817 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002818 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002819 .read = read_memmapped,
2820 },
2821
2822 {
2823 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002824 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002825 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002826 .manufacture_id = MX_ID,
2827 .model_id = MX_29F002B,
2828 .total_size = 256,
2829 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002830 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002831 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002832 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002833 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002834 .block_erasers =
2835 {
2836 {
2837 .eraseblocks = {
2838 {16 * 1024, 1},
2839 {8 * 1024, 2},
2840 {32 * 1024, 1},
2841 {64 * 1024, 3},
2842 },
Sean Nelson35727f72010-01-28 23:55:12 +00002843 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002844 }, {
2845 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002846 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002847 },
2848 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002849 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002850 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002851 },
2852
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002853 {
2854 .vendor = "Macronix",
2855 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002856 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002857 .manufacture_id = MX_ID,
2858 .model_id = MX_29F002T,
2859 .total_size = 256,
2860 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002861 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2862 .tested = TEST_UNTESTED,
2863 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002864 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002865 .block_erasers =
2866 {
2867 {
2868 .eraseblocks = {
2869 {64 * 1024, 3},
2870 {32 * 1024, 1},
2871 {8 * 1024, 2},
2872 {16 * 1024, 1},
2873 },
Sean Nelson35727f72010-01-28 23:55:12 +00002874 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002875 }, {
2876 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002877 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002878 },
2879 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002880 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002881 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002882 },
2883
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002884 {
2885 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002886 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002887 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002888 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002889 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002890 .total_size = 512,
2891 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002892 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2893 .tested = TEST_UNTESTED,
2894 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002895 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002896 .block_erasers =
2897 {
2898 {
2899 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00002900 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002901 }, {
2902 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002903 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002904 },
2905 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002906 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002907 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002908 },
2909
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002910 {
2911 .vendor = "Numonyx",
2912 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002913 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002914 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002915 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002916 .total_size = 128,
2917 .page_size = 256,
2918 .tested = TEST_UNTESTED,
2919 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002920 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002921 .block_erasers =
2922 {
2923 {
2924 .eraseblocks = { {4 * 1024, 32} },
2925 .block_erase = spi_block_erase_20,
2926 }, {
2927 .eraseblocks = { {64 * 1024, 2} },
2928 .block_erase = spi_block_erase_d8,
2929 }, {
2930 .eraseblocks = { {128 * 1024, 1} },
2931 .block_erase = spi_block_erase_c7,
2932 }
2933 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002934 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002935 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002936 },
2937
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002938 {
2939 .vendor = "Numonyx",
2940 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002941 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002942 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002943 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002944 .total_size = 256,
2945 .page_size = 256,
2946 .tested = TEST_UNTESTED,
2947 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002948 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002949 .block_erasers =
2950 {
2951 {
2952 .eraseblocks = { {4 * 1024, 64} },
2953 .block_erase = spi_block_erase_20,
2954 }, {
2955 .eraseblocks = { {64 * 1024, 4} },
2956 .block_erase = spi_block_erase_d8,
2957 }, {
2958 .eraseblocks = { {256 * 1024, 1} },
2959 .block_erase = spi_block_erase_c7,
2960 }
2961 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002962 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002963 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002964 },
2965
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002966 {
2967 .vendor = "Numonyx",
2968 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002969 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002970 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002971 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00002972 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002973 .page_size = 256,
2974 .tested = TEST_UNTESTED,
2975 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002976 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002977 .block_erasers =
2978 {
2979 {
2980 .eraseblocks = { {4 * 1024, 128} },
2981 .block_erase = spi_block_erase_20,
2982 }, {
2983 .eraseblocks = { {64 * 1024, 8} },
2984 .block_erase = spi_block_erase_d8,
2985 }, {
2986 .eraseblocks = { {512 * 1024, 1} },
2987 .block_erase = spi_block_erase_c7,
2988 }
2989 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002990 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002991 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002992 },
2993
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002994 {
2995 .vendor = "Numonyx",
2996 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002997 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002998 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002999 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003000 .total_size = 1024,
3001 .page_size = 256,
3002 .tested = TEST_OK_PREW,
3003 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003004 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003005 .block_erasers =
3006 {
3007 {
3008 .eraseblocks = { {4 * 1024, 256} },
3009 .block_erase = spi_block_erase_20,
3010 }, {
3011 .eraseblocks = { {64 * 1024, 16} },
3012 .block_erase = spi_block_erase_d8,
3013 }, {
3014 .eraseblocks = { {1024 * 1024, 1} },
3015 .block_erase = spi_block_erase_c7,
3016 }
3017 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003018 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003019 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003020 },
3021
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003022 {
3023 .vendor = "Numonyx",
3024 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003025 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003026 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003027 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003028 .total_size = 2048,
3029 .page_size = 256,
3030 .tested = TEST_UNTESTED,
3031 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003032 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003033 .block_erasers =
3034 {
3035 {
3036 .eraseblocks = { {4 * 1024, 512} },
3037 .block_erase = spi_block_erase_20,
3038 }, {
3039 .eraseblocks = { {64 * 1024, 32} },
3040 .block_erase = spi_block_erase_d8,
3041 }, {
3042 .eraseblocks = { {2 * 1024 * 1024, 1} },
3043 .block_erase = spi_block_erase_c7,
3044 }
3045 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003046 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003047 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003048 },
3049
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003050 {
3051 .vendor = "PMC",
3052 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003053 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003054 .manufacture_id = PMC_ID,
3055 .model_id = PMC_25LV010,
3056 .total_size = 128,
3057 .page_size = 256,
3058 .tested = TEST_UNTESTED,
3059 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003060 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003061 .block_erasers =
3062 {
3063 {
3064 .eraseblocks = { {4 * 1024, 32} },
3065 .block_erase = spi_block_erase_d7,
3066 }, {
3067 .eraseblocks = { {32 * 1024, 4} },
3068 .block_erase = spi_block_erase_d8,
3069 }, {
3070 .eraseblocks = { {128 * 1024, 1} },
3071 .block_erase = spi_block_erase_c7,
3072 }
3073 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003074 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003075 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003076 },
3077
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003078 {
3079 .vendor = "PMC",
3080 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003081 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003082 .manufacture_id = PMC_ID,
3083 .model_id = PMC_25LV016B,
3084 .total_size = 2048,
3085 .page_size = 256,
3086 .tested = TEST_UNTESTED,
3087 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003088 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003089 .block_erasers =
3090 {
3091 {
3092 .eraseblocks = { {4 * 1024, 512} },
3093 .block_erase = spi_block_erase_d7,
3094 }, {
3095 .eraseblocks = { {4 * 1024, 512} },
3096 .block_erase = spi_block_erase_20,
3097 }, {
3098 .eraseblocks = { {64 * 1024, 32} },
3099 .block_erase = spi_block_erase_d8,
3100 }, {
3101 .eraseblocks = { {2 * 1024 * 1024, 1} },
3102 .block_erase = spi_block_erase_60,
3103 }, {
3104 .eraseblocks = { {2 * 1024 * 1024, 1} },
3105 .block_erase = spi_block_erase_c7,
3106 }
3107 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003108 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003109 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003110 },
3111
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003112 {
3113 .vendor = "PMC",
3114 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003115 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003116 .manufacture_id = PMC_ID,
3117 .model_id = PMC_25LV020,
3118 .total_size = 256,
3119 .page_size = 256,
3120 .tested = TEST_UNTESTED,
3121 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003122 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003123 .block_erasers =
3124 {
3125 {
3126 .eraseblocks = { {4 * 1024, 64} },
3127 .block_erase = spi_block_erase_d7,
3128 }, {
3129 .eraseblocks = { {64 * 1024, 4} },
3130 .block_erase = spi_block_erase_d8,
3131 }, {
3132 .eraseblocks = { {256 * 1024, 1} },
3133 .block_erase = spi_block_erase_c7,
3134 }
3135 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003136 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003137 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003138 },
3139
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003140 {
3141 .vendor = "PMC",
3142 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003143 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003144 .manufacture_id = PMC_ID,
3145 .model_id = PMC_25LV040,
3146 .total_size = 512,
3147 .page_size = 256,
3148 .tested = TEST_UNTESTED,
3149 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003150 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003151 .block_erasers =
3152 {
3153 {
3154 .eraseblocks = { {4 * 1024, 128} },
3155 .block_erase = spi_block_erase_d7,
3156 }, {
3157 .eraseblocks = { {64 * 1024, 8} },
3158 .block_erase = spi_block_erase_d8,
3159 }, {
3160 .eraseblocks = { {512 * 1024, 1} },
3161 .block_erase = spi_block_erase_c7,
3162 }
3163 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003164 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003165 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003166 },
3167
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003168 {
3169 .vendor = "PMC",
3170 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003171 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003172 .manufacture_id = PMC_ID,
3173 .model_id = PMC_25LV080B,
3174 .total_size = 1024,
3175 .page_size = 256,
3176 .tested = TEST_UNTESTED,
3177 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003178 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003179 .block_erasers =
3180 {
3181 {
3182 .eraseblocks = { {4 * 1024, 256} },
3183 .block_erase = spi_block_erase_d7,
3184 }, {
3185 .eraseblocks = { {4 * 1024, 256} },
3186 .block_erase = spi_block_erase_20,
3187 }, {
3188 .eraseblocks = { {64 * 1024, 16} },
3189 .block_erase = spi_block_erase_d8,
3190 }, {
3191 .eraseblocks = { {1024 * 1024, 1} },
3192 .block_erase = spi_block_erase_60,
3193 }, {
3194 .eraseblocks = { {1024 * 1024, 1} },
3195 .block_erase = spi_block_erase_c7,
3196 }
3197 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003198 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003199 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003200 },
3201
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003202 {
3203 .vendor = "PMC",
3204 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003205 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003206 .manufacture_id = PMC_ID,
3207 .model_id = PMC_25LV512,
3208 .total_size = 64,
3209 .page_size = 256,
3210 .tested = TEST_UNTESTED,
3211 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003212 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003213 .block_erasers =
3214 {
3215 {
3216 .eraseblocks = { {4 * 1024, 16} },
3217 .block_erase = spi_block_erase_d7,
3218 }, {
3219 .eraseblocks = { {32 * 1024, 2} },
3220 .block_erase = spi_block_erase_d8,
3221 }, {
3222 .eraseblocks = { {64 * 1024, 1} },
3223 .block_erase = spi_block_erase_c7,
3224 }
3225 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003226 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003227 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003228 },
3229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003230 {
3231 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003232 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003233 .bustype = CHIP_BUSTYPE_PARALLEL,
3234 .manufacture_id = PMC_ID_NOPREFIX,
3235 .model_id = PMC_29F002T,
3236 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003237 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003238 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3239 .tested = TEST_UNTESTED,
3240 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003241 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003242 .block_erasers =
3243 {
3244 {
3245 .eraseblocks = {
3246 {128 * 1024, 1},
3247 {96 * 1024, 1},
3248 {8 * 1024, 2},
3249 {16 * 1024, 1},
3250 },
Sean Nelson35727f72010-01-28 23:55:12 +00003251 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003252 }, {
3253 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003254 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003255 },
3256 },
Sean Nelson35727f72010-01-28 23:55:12 +00003257 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003258 .read = read_memmapped,
3259 },
3260
3261 {
3262 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003263 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003264 .bustype = CHIP_BUSTYPE_PARALLEL,
3265 .manufacture_id = PMC_ID_NOPREFIX,
3266 .model_id = PMC_29F002B,
3267 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003268 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003269 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003270 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003271 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003272 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003273 .block_erasers =
3274 {
3275 {
3276 .eraseblocks = {
3277 {16 * 1024, 1},
3278 {8 * 1024, 2},
3279 {96 * 1024, 1},
3280 {128 * 1024, 1},
3281 },
Sean Nelson35727f72010-01-28 23:55:12 +00003282 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003283 }, {
3284 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003285 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003286 },
3287 },
Sean Nelson35727f72010-01-28 23:55:12 +00003288 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003289 .read = read_memmapped,
3290 },
3291
3292 {
3293 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003294 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003295 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003296 .manufacture_id = PMC_ID_NOPREFIX,
3297 .model_id = PMC_39F010,
3298 .total_size = 128,
3299 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003300 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3301 .tested = TEST_UNTESTED,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003302 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003303 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003304 .block_erasers =
3305 {
3306 {
3307 .eraseblocks = { {4 * 1024, 32} },
3308 .block_erase = erase_sector_jedec,
3309 }, {
3310 .eraseblocks = { {64 * 1024, 2} },
3311 .block_erase = erase_block_jedec,
3312 }, {
3313 .eraseblocks = { {128 * 1024, 1} },
3314 .block_erase = erase_chip_block_jedec,
3315 }
3316 },
Sean Nelson35727f72010-01-28 23:55:12 +00003317 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003318 .read = read_memmapped,
3319 },
3320
3321 {
3322 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003323 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003324 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003325 .manufacture_id = PMC_ID_NOPREFIX,
3326 .model_id = PMC_49FL002,
3327 .total_size = 256,
3328 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003329 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3330 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003331 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003332 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00003333 /* .erase = NULL, Was: erase_49fl00x */
Sean Nelson5643c072010-01-19 03:23:07 +00003334 .block_erasers =
3335 {
3336 {
3337 .eraseblocks = { {4 * 1024, 64} },
3338 .block_erase = erase_sector_jedec,
3339 }, {
3340 .eraseblocks = { {16 * 1024, 16} },
3341 .block_erase = erase_block_jedec,
3342 }, {
3343 .eraseblocks = { {256 * 1024, 1} },
3344 .block_erase = erase_chip_block_jedec,
3345 }
3346 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003347 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003348 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003349 },
3350
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003351 {
3352 .vendor = "PMC",
3353 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003354 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003355 .manufacture_id = PMC_ID_NOPREFIX,
3356 .model_id = PMC_49FL004,
3357 .total_size = 512,
3358 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003359 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3360 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003361 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003362 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00003363 /* .erase = NULL, Was: erase_49fl00x */
Sean Nelson5643c072010-01-19 03:23:07 +00003364 .block_erasers =
3365 {
3366 {
3367 .eraseblocks = { {4 * 1024, 128} },
3368 .block_erase = erase_sector_jedec,
3369 }, {
3370 .eraseblocks = { {64 * 1024, 8} },
3371 .block_erase = erase_block_jedec,
3372 }, {
3373 .eraseblocks = { {512 * 1024, 1} },
3374 .block_erase = erase_chip_block_jedec,
3375 }
3376 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003377 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003378 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003379 },
3380
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003381 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003382 .vendor = "Sanyo",
3383 .name = "LF25FW203A",
3384 .bustype = CHIP_BUSTYPE_SPI,
3385 .manufacture_id = SANYO_ID,
3386 .model_id = SANYO_LE25FW203A,
3387 .total_size = 2048,
3388 .page_size = 256,
3389 .tested = TEST_UNTESTED,
3390 .probe = probe_spi_rdid,
3391 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003392 .block_erasers =
3393 {
3394 {
3395 .eraseblocks = { {64 * 1024, 32} },
3396 .block_erase = spi_block_erase_d8,
3397 }, {
3398 .eraseblocks = { {2 * 1024 * 1024, 1} },
3399 .block_erase = spi_block_erase_c7,
3400 }
3401 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003402 .write = spi_chip_write_256,
3403 .read = spi_chip_read,
3404 },
3405
3406 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003407 .vendor = "Sharp",
3408 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003409 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003410 .manufacture_id = SHARP_ID,
3411 .model_id = SHARP_LHF00L04,
3412 .total_size = 1024,
3413 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003414 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003415 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003416 .probe = probe_49lfxxxc,
3417 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003418 .block_erasers =
3419 {
3420 {
3421 .eraseblocks = {
3422 {64 * 1024, 15},
3423 {8 * 1024, 8}
3424 },
3425 .block_erase = erase_lhf00l04_block,
3426 }, {
3427 .eraseblocks = {
3428 {1024 * 1024, 1}
3429 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003430 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003431 },
3432 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003433 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003434 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003435 },
3436
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003437 {
3438 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003439 .name = "S25FL008A",
3440 .bustype = CHIP_BUSTYPE_SPI,
3441 .manufacture_id = SPANSION_ID,
3442 .model_id = SPANSION_S25FL008A,
3443 .total_size = 1024,
3444 .page_size = 256,
3445 .tested = TEST_OK_PREW,
3446 .probe = probe_spi_rdid,
3447 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003448 .block_erasers =
3449 {
3450 {
3451 .eraseblocks = { {64 * 1024, 16} },
3452 .block_erase = spi_block_erase_d8,
3453 }, {
3454 .eraseblocks = { {1024 * 1024, 1} },
3455 .block_erase = spi_block_erase_c7,
3456 }
3457 },
3458 .write = spi_chip_write_256,
3459 .read = spi_chip_read,
3460 },
3461
3462 {
3463 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003464 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003465 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003466 .manufacture_id = SPANSION_ID,
3467 .model_id = SPANSION_S25FL016A,
3468 .total_size = 2048,
3469 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003470 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003471 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003472 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003473 .block_erasers =
3474 {
3475 {
3476 .eraseblocks = { {64 * 1024, 32} },
3477 .block_erase = spi_block_erase_d8,
3478 }, {
3479 .eraseblocks = { {2 * 1024 * 1024, 1} },
3480 .block_erase = spi_block_erase_c7,
3481 }
3482 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003483 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003484 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003485 },
3486
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003487 {
3488 .vendor = "SST",
3489 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003490 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003491 .manufacture_id = SST_ID,
3492 .model_id = SST_25VF016B,
3493 .total_size = 2048,
3494 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003495 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003496 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003497 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003498 .block_erasers =
3499 {
3500 {
3501 .eraseblocks = { {4 * 1024, 512} },
3502 .block_erase = spi_block_erase_20,
3503 }, {
3504 .eraseblocks = { {32 * 1024, 64} },
3505 .block_erase = spi_block_erase_52,
3506 }, {
3507 .eraseblocks = { {64 * 1024, 32} },
3508 .block_erase = spi_block_erase_d8,
3509 }, {
3510 .eraseblocks = { {2 * 1024 * 1024, 1} },
3511 .block_erase = spi_block_erase_60,
3512 }, {
3513 .eraseblocks = { {2 * 1024 * 1024, 1} },
3514 .block_erase = spi_block_erase_c7,
3515 },
3516 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003517 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003518 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003519 },
3520
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003521 {
3522 .vendor = "SST",
3523 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003524 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003525 .manufacture_id = SST_ID,
3526 .model_id = SST_25VF032B,
3527 .total_size = 4096,
3528 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003529 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003530 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003531 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003532 .block_erasers =
3533 {
3534 {
3535 .eraseblocks = { {4 * 1024, 1024} },
3536 .block_erase = spi_block_erase_20,
3537 }, {
3538 .eraseblocks = { {32 * 1024, 128} },
3539 .block_erase = spi_block_erase_52,
3540 }, {
3541 .eraseblocks = { {64 * 1024, 64} },
3542 .block_erase = spi_block_erase_d8,
3543 }, {
3544 .eraseblocks = { {4 * 1024 * 1024, 1} },
3545 .block_erase = spi_block_erase_60,
3546 }, {
3547 .eraseblocks = { {4 * 1024 * 1024, 1} },
3548 .block_erase = spi_block_erase_c7,
3549 },
3550 },
3551 .write = spi_chip_write_1,
3552 .read = spi_chip_read,
3553 },
3554
3555 {
3556 .vendor = "SST",
3557 .name = "SST25VF040.REMS",
3558 .bustype = CHIP_BUSTYPE_SPI,
3559 .manufacture_id = SST_ID,
3560 .model_id = SST_25VF040_REMS,
3561 .total_size = 512,
3562 .page_size = 256,
3563 .tested = TEST_OK_PR,
3564 .probe = probe_spi_rems,
3565 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003566 .block_erasers =
3567 {
3568 {
3569 .eraseblocks = { {4 * 1024, 128} },
3570 .block_erase = spi_block_erase_20,
3571 }, {
3572 .eraseblocks = { {32 * 1024, 16} },
3573 .block_erase = spi_block_erase_52,
3574 }, {
3575 .eraseblocks = { {512 * 1024, 1} },
3576 .block_erase = spi_block_erase_60,
3577 },
3578 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003579 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003580 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003581 },
3582
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003583 {
3584 .vendor = "SST",
3585 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003586 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003587 .manufacture_id = SST_ID,
3588 .model_id = SST_25VF040B,
3589 .total_size = 512,
3590 .page_size = 256,
3591 .tested = TEST_UNTESTED,
3592 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003593 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003594 .block_erasers =
3595 {
3596 {
3597 .eraseblocks = { {4 * 1024, 128} },
3598 .block_erase = spi_block_erase_20,
3599 }, {
3600 .eraseblocks = { {32 * 1024, 16} },
3601 .block_erase = spi_block_erase_52,
3602 }, {
3603 .eraseblocks = { {64 * 1024, 8} },
3604 .block_erase = spi_block_erase_d8,
3605 }, {
3606 .eraseblocks = { {512 * 1024, 1} },
3607 .block_erase = spi_block_erase_60,
3608 }, {
3609 .eraseblocks = { {512 * 1024, 1} },
3610 .block_erase = spi_block_erase_c7,
3611 },
3612 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003613 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003614 .read = spi_chip_read,
3615 },
3616
3617 {
3618 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003619 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003620 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003621 .manufacture_id = SST_ID,
3622 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003623 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003624 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003625 .tested = TEST_OK_PR,
3626 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003627 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003628 .block_erasers =
3629 {
3630 {
3631 .eraseblocks = { {4 * 1024, 128} },
3632 .block_erase = spi_block_erase_20,
3633 }, {
3634 .eraseblocks = { {32 * 1024, 16} },
3635 .block_erase = spi_block_erase_52,
3636 }, {
3637 .eraseblocks = { {64 * 1024, 8} },
3638 .block_erase = spi_block_erase_d8,
3639 }, {
3640 .eraseblocks = { {512 * 1024, 1} },
3641 .block_erase = spi_block_erase_60,
3642 }, {
3643 .eraseblocks = { {512 * 1024, 1} },
3644 .block_erase = spi_block_erase_c7,
3645 },
3646 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003647 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003648 .read = spi_chip_read,
3649 },
3650
3651 {
3652 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003653 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003654 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003655 .manufacture_id = SST_ID,
3656 .model_id = SST_25VF080B,
3657 .total_size = 1024,
3658 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003659 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003660 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003661 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003662 .block_erasers =
3663 {
3664 {
3665 .eraseblocks = { {4 * 1024, 256} },
3666 .block_erase = spi_block_erase_20,
3667 }, {
3668 .eraseblocks = { {32 * 1024, 32} },
3669 .block_erase = spi_block_erase_52,
3670 }, {
3671 .eraseblocks = { {64 * 1024, 16} },
3672 .block_erase = spi_block_erase_d8,
3673 }, {
3674 .eraseblocks = { {1024 * 1024, 1} },
3675 .block_erase = spi_block_erase_60,
3676 }, {
3677 .eraseblocks = { {1024 * 1024, 1} },
3678 .block_erase = spi_block_erase_c7,
3679 },
3680 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003681 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003682 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003683 },
3684
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003685 {
3686 .vendor = "SST",
3687 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003688 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003689 .manufacture_id = SST_ID,
3690 .model_id = SST_28SF040,
3691 .total_size = 512,
3692 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003693 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003694 .tested = TEST_UNTESTED,
3695 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003696 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003697 .block_erasers =
3698 {
3699 {
3700 .eraseblocks = { {128, 4096} },
3701 .block_erase = erase_sector_28sf040,
3702 }, {
3703 .eraseblocks = { {512 * 1024, 1} },
3704 .block_erase = erase_chip_28sf040,
3705 }
3706 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003707 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003708 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003709 },
3710
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003711 {
3712 .vendor = "SST",
3713 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003714 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003715 .manufacture_id = SST_ID,
3716 .model_id = SST_29EE010,
3717 .total_size = 128,
3718 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003719 .feature_bits = FEATURE_LONG_RESET,
3720 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003721 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003722 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003723 .block_erasers =
3724 {
3725 {
3726 .eraseblocks = { {128 * 1024, 1} },
3727 .block_erase = erase_chip_block_jedec,
3728 }
3729 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003730 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003731 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003732 },
3733
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003734 {
3735 .vendor = "SST",
3736 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003737 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003738 .manufacture_id = SST_ID,
3739 .model_id = SST_29LE010,
3740 .total_size = 128,
3741 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003742 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003743 .tested = TEST_UNTESTED,
3744 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003745 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003746 .block_erasers =
3747 {
3748 {
3749 .eraseblocks = { {128 * 1024, 1} },
3750 .block_erase = erase_chip_block_jedec,
3751 }
3752 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003753 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003754 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003755 },
3756
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003757 {
3758 .vendor = "SST",
3759 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003760 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003761 .manufacture_id = SST_ID,
3762 .model_id = SST_29EE020A,
3763 .total_size = 256,
3764 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003765 .feature_bits = FEATURE_LONG_RESET,
3766 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003767 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003768 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003769 .block_erasers =
3770 {
3771 {
3772 .eraseblocks = { {256 * 1024, 1} },
3773 .block_erase = erase_chip_block_jedec,
3774 }
3775 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003776 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003777 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003778 },
3779
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003780 {
3781 .vendor = "SST",
3782 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003783 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003784 .manufacture_id = SST_ID,
3785 .model_id = SST_29LE020,
3786 .total_size = 256,
3787 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003788 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003789 .tested = TEST_UNTESTED,
3790 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003791 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003792 .block_erasers =
3793 {
3794 {
3795 .eraseblocks = { {256 * 1024, 1} },
3796 .block_erase = erase_chip_block_jedec,
3797 }
3798 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003799 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003800 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003801 },
3802
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003803 {
3804 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00003805 .name = "SST39SF512",
3806 .bustype = CHIP_BUSTYPE_PARALLEL,
3807 .manufacture_id = SST_ID,
3808 .model_id = SST_39SF512,
3809 .total_size = 64,
3810 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003811 .feature_bits = FEATURE_EITHER_RESET,
3812 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003813 .probe = probe_jedec,
3814 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00003815 .block_erasers =
3816 {
3817 {
3818 .eraseblocks = { {4 * 1024, 16} },
3819 .block_erase = erase_sector_jedec,
3820 }, {
3821 .eraseblocks = { {64 * 1024, 1} },
3822 .block_erase = erase_chip_block_jedec,
3823 }
3824 },
Sean Nelson35727f72010-01-28 23:55:12 +00003825 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003826 .read = read_memmapped,
3827 },
3828
3829 {
3830 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003831 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003832 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003833 .manufacture_id = SST_ID,
3834 .model_id = SST_39SF010,
3835 .total_size = 128,
3836 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003837 .feature_bits = FEATURE_EITHER_RESET,
3838 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003839 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003840 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003841 .block_erasers =
3842 {
3843 {
3844 .eraseblocks = { {4 * 1024, 32} },
3845 .block_erase = erase_sector_jedec,
3846 }, {
3847 .eraseblocks = { {128 * 1024, 1} },
3848 .block_erase = erase_chip_block_jedec,
3849 }
3850 },
Sean Nelson35727f72010-01-28 23:55:12 +00003851 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003852 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003853 },
3854
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003855 {
3856 .vendor = "SST",
3857 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003858 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003859 .manufacture_id = SST_ID,
3860 .model_id = SST_39SF020,
3861 .total_size = 256,
3862 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003863 .feature_bits = FEATURE_EITHER_RESET,
3864 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003865 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003866 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003867 .block_erasers =
3868 {
3869 {
3870 .eraseblocks = { {4 * 1024, 64} },
3871 .block_erase = erase_sector_jedec,
3872 }, {
3873 .eraseblocks = { {256 * 1024, 1} },
3874 .block_erase = erase_chip_block_jedec,
3875 }
3876 },
Sean Nelson35727f72010-01-28 23:55:12 +00003877 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003878 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003879 },
3880
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003881 {
3882 .vendor = "SST",
3883 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003884 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003885 .manufacture_id = SST_ID,
3886 .model_id = SST_39SF040,
3887 .total_size = 512,
3888 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003889 .feature_bits = FEATURE_EITHER_RESET,
3890 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003891 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003892 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003893 .block_erasers =
3894 {
3895 {
3896 .eraseblocks = { {4 * 1024, 128} },
3897 .block_erase = erase_sector_jedec,
3898 }, {
3899 .eraseblocks = { {512 * 1024, 1} },
3900 .block_erase = erase_chip_block_jedec,
3901 }
3902 },
Sean Nelson35727f72010-01-28 23:55:12 +00003903 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003904 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003905 },
3906
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003907 {
3908 .vendor = "SST",
3909 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00003910 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003911 .manufacture_id = SST_ID,
3912 .model_id = SST_39VF512,
3913 .total_size = 64,
3914 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003915 .feature_bits = FEATURE_EITHER_RESET,
3916 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003917 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003918 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00003919 .block_erasers =
3920 {
3921 {
3922 .eraseblocks = { {4 * 1024, 16} },
3923 .block_erase = erase_sector_jedec,
3924 }, {
3925 .eraseblocks = { {64 * 1024, 1} },
3926 .block_erase = erase_chip_block_jedec,
3927 }
3928 },
Sean Nelson35727f72010-01-28 23:55:12 +00003929 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003930 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003931 },
3932
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003933 {
3934 .vendor = "SST",
3935 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003936 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003937 .manufacture_id = SST_ID,
3938 .model_id = SST_39VF010,
3939 .total_size = 128,
3940 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003941 .feature_bits = FEATURE_EITHER_RESET,
3942 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003943 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003944 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003945 .block_erasers =
3946 {
3947 {
3948 .eraseblocks = { {4 * 1024, 32} },
3949 .block_erase = erase_sector_jedec,
3950 }, {
3951 .eraseblocks = { {128 * 1024, 1} },
3952 .block_erase = erase_chip_block_jedec,
3953 }
3954 },
Sean Nelson35727f72010-01-28 23:55:12 +00003955 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003956 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003957 },
3958
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003959 {
3960 .vendor = "SST",
3961 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003962 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003963 .manufacture_id = SST_ID,
3964 .model_id = SST_39VF020,
3965 .total_size = 256,
3966 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003967 .feature_bits = FEATURE_EITHER_RESET,
3968 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003969 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003970 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003971 .block_erasers =
3972 {
3973 {
3974 .eraseblocks = { {4 * 1024, 64} },
3975 .block_erase = erase_sector_jedec,
3976 }, {
3977 .eraseblocks = { {256 * 1024, 1} },
3978 .block_erase = erase_chip_block_jedec,
3979 }
3980 },
Sean Nelson35727f72010-01-28 23:55:12 +00003981 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003982 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003983 },
3984
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003985 {
3986 .vendor = "SST",
3987 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003988 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003989 .manufacture_id = SST_ID,
3990 .model_id = SST_39VF040,
3991 .total_size = 512,
3992 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003993 .feature_bits = FEATURE_EITHER_RESET,
3994 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003995 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003996 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003997 .block_erasers =
3998 {
3999 {
4000 .eraseblocks = { {4 * 1024, 128} },
4001 .block_erase = erase_sector_jedec,
4002 }, {
4003 .eraseblocks = { {512 * 1024, 1} },
4004 .block_erase = erase_chip_block_jedec,
4005 }
4006 },
Sean Nelson35727f72010-01-28 23:55:12 +00004007 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004008 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004009 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004010
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004011 {
4012 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004013 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004014 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004015 .manufacture_id = SST_ID,
4016 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004017 .total_size = 1024,
4018 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004019 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004020 .tested = TEST_UNTESTED,
4021 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004022 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004023 .block_erasers =
4024 {
4025 {
4026 .eraseblocks = { {4 * 1024, 256} },
4027 .block_erase = erase_sector_jedec,
4028 }, {
4029 .eraseblocks = { {64 * 1024, 16} },
4030 .block_erase = erase_block_jedec,
4031 }, {
4032 .eraseblocks = { {1024 * 1024, 1} },
4033 .block_erase = erase_chip_block_jedec,
4034 }
4035 },
Sean Nelson35727f72010-01-28 23:55:12 +00004036 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004037 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004038 },
4039
4040 {
4041 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004042 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004043 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004044 .manufacture_id = SST_ID,
4045 .model_id = SST_49LF002A,
4046 .total_size = 256,
4047 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004048 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004049 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004050 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004051 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004052 .block_erasers =
4053 {
4054 {
4055 .eraseblocks = { {4 * 1024, 64} },
4056 .block_erase = erase_sst_fwhub_sector,
4057 }, {
4058 .eraseblocks = { {16 * 1024, 16} },
4059 .block_erase = erase_sst_fwhub_block,
4060 }, {
4061 .eraseblocks = { {256 * 1024, 1} },
4062 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4063 }
4064 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004065 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004066 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004067 },
4068
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004069 {
4070 .vendor = "SST",
4071 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004072 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004073 .manufacture_id = SST_ID,
4074 .model_id = SST_49LF003A,
4075 .total_size = 384,
4076 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004077 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004078 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004079 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004080 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004081 .block_erasers =
4082 {
4083 {
4084 .eraseblocks = { {4 * 1024, 96} },
4085 .block_erase = erase_sst_fwhub_sector,
4086 }, {
4087 .eraseblocks = { {64 * 1024, 6} },
4088 .block_erase = erase_sst_fwhub_block,
4089 }, {
4090 .eraseblocks = { {384 * 1024, 1} },
4091 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4092 }
4093 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004094 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004095 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004096 },
4097
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004098 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004099 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4100 * and is only honored for 64k block erase, but not 4k sector erase.
4101 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004102 .vendor = "SST",
4103 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004104 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004105 .manufacture_id = SST_ID,
4106 .model_id = SST_49LF004A,
4107 .total_size = 512,
4108 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004109 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004110 .tested = TEST_OK_PREW,
4111 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004112 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004113 .block_erasers =
4114 {
4115 {
4116 .eraseblocks = { {4 * 1024, 128} },
4117 .block_erase = erase_sector_jedec, /* missing unlock */
4118 }, {
4119 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00004120 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004121 }, {
4122 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004123 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004124 },
4125 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004126 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004127 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004128 },
4129
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004130 {
4131 .vendor = "SST",
4132 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004133 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004134 .manufacture_id = SST_ID,
4135 .model_id = SST_49LF004C,
4136 .total_size = 512,
4137 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004138 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004139 .tested = TEST_UNTESTED,
4140 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004141 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004142 .block_erasers =
4143 {
4144 {
4145 .eraseblocks = { {4 * 1024, 128} },
4146 .block_erase = erase_sector_49lfxxxc,
4147 }, {
4148 .eraseblocks = {
4149 {64 * 1024, 7},
4150 {32 * 1024, 1},
4151 {8 * 1024, 2},
4152 {16 * 1024, 1},
4153 },
4154 .block_erase = erase_block_49lfxxxc,
4155 }
4156 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004157 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004158 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004159 },
4160
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004161 {
4162 .vendor = "SST",
4163 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004164 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004165 .manufacture_id = SST_ID,
4166 .model_id = SST_49LF008A,
4167 .total_size = 1024,
4168 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004169 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004170 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004171 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004172 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004173 .block_erasers =
4174 {
4175 {
4176 .eraseblocks = { {4 * 1024, 256} },
4177 .block_erase = erase_sst_fwhub_sector,
4178 }, {
4179 .eraseblocks = { {64 * 1024, 16} },
4180 .block_erase = erase_sst_fwhub_block,
4181 }, {
4182 .eraseblocks = { {1024 * 1024, 1} },
4183 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4184 }
4185 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004186 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004187 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004188 },
4189
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004190 {
4191 .vendor = "SST",
4192 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004193 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004194 .manufacture_id = SST_ID,
4195 .model_id = SST_49LF008C,
4196 .total_size = 1024,
4197 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004198 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004199 .tested = TEST_UNTESTED,
4200 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004201 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004202 .block_erasers =
4203 {
4204 {
4205 .eraseblocks = { {4 * 1024, 256} },
4206 .block_erase = erase_sector_49lfxxxc,
4207 }, {
4208 .eraseblocks = {
4209 {64 * 1024, 15},
4210 {32 * 1024, 1},
4211 {8 * 1024, 2},
4212 {16 * 1024, 1},
4213 },
4214 .block_erase = erase_block_49lfxxxc,
4215 }
4216 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004217 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004218 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004219 },
4220
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004221 {
4222 .vendor = "SST",
4223 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004224 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004225 .manufacture_id = SST_ID,
4226 .model_id = SST_49LF016C,
4227 .total_size = 2048,
4228 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004229 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004230 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004231 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004232 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004233 .block_erasers =
4234 {
4235 {
4236 .eraseblocks = { {4 * 1024, 512} },
4237 .block_erase = erase_sector_49lfxxxc,
4238 }, {
4239 .eraseblocks = {
4240 {64 * 1024, 31},
4241 {32 * 1024, 1},
4242 {8 * 1024, 2},
4243 {16 * 1024, 1},
4244 },
4245 .block_erase = erase_block_49lfxxxc,
4246 }
4247 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004248 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004249 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004250 },
4251
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004252 {
4253 .vendor = "SST",
4254 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004255 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004256 .manufacture_id = SST_ID,
4257 .model_id = SST_49LF020,
4258 .total_size = 256,
4259 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004260 .feature_bits = FEATURE_EITHER_RESET,
4261 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004262 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004263 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004264 .block_erasers =
4265 {
4266 {
4267 .eraseblocks = { {4 * 1024, 64} },
4268 .block_erase = erase_sector_jedec,
4269 }, {
4270 .eraseblocks = { {16 * 1024, 16} },
4271 .block_erase = erase_block_jedec,
4272 }, {
4273 .eraseblocks = { {256 * 1024, 1} },
4274 .block_erase = NULL,
4275 }
4276 },
Sean Nelson35727f72010-01-28 23:55:12 +00004277 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004278 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004279 },
4280
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004281 {
4282 .vendor = "SST",
4283 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004284 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004285 .manufacture_id = SST_ID,
4286 .model_id = SST_49LF020A,
4287 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004288 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004289 .feature_bits = FEATURE_EITHER_RESET,
4290 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004291 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004292 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004293 .block_erasers =
4294 {
4295 {
4296 .eraseblocks = { {4 * 1024, 64} },
4297 .block_erase = erase_sector_jedec,
4298 }, {
4299 .eraseblocks = { {16 * 1024, 16} },
4300 .block_erase = erase_block_jedec,
4301 }, {
4302 .eraseblocks = { {256 * 1024, 1} },
4303 .block_erase = NULL,
4304 }
4305 },
Sean Nelson35727f72010-01-28 23:55:12 +00004306 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004307 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004308 },
4309
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004310 {
4311 .vendor = "SST",
4312 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004313 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004314 .manufacture_id = SST_ID,
4315 .model_id = SST_49LF040,
4316 .total_size = 512,
4317 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004318 .feature_bits = FEATURE_EITHER_RESET,
4319 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004320 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004321 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004322 .block_erasers =
4323 {
4324 {
4325 .eraseblocks = { {4 * 1024, 128} },
4326 .block_erase = erase_sector_jedec,
4327 }, {
4328 .eraseblocks = { {64 * 1024, 8} },
4329 .block_erase = erase_block_jedec,
4330 }, {
4331 .eraseblocks = { {512 * 1024, 1} },
4332 .block_erase = NULL,
4333 }
4334 },
Sean Nelson35727f72010-01-28 23:55:12 +00004335 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004336 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004337 },
4338
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004339 {
4340 .vendor = "SST",
4341 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004342 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004343 .manufacture_id = SST_ID,
4344 .model_id = SST_49LF040B,
4345 .total_size = 512,
4346 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004347 .feature_bits = FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004348 .tested = TEST_UNTESTED,
4349 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004350 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004351 .block_erasers =
4352 {
4353 {
4354 .eraseblocks = { {4 * 1024, 128} },
4355 .block_erase = erase_sector_jedec,
4356 }, {
4357 .eraseblocks = { {64 * 1024, 8} },
4358 .block_erase = erase_block_jedec,
4359 }, {
4360 .eraseblocks = { {512 * 1024, 1} },
4361 .block_erase = NULL,
4362 }
4363 },
Sean Nelson35727f72010-01-28 23:55:12 +00004364 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004365 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004366 },
4367
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004368 {
4369 .vendor = "SST",
4370 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004371 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004372 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004373 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004374 .total_size = 1024,
4375 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004376 .feature_bits = FEATURE_EITHER_RESET,
4377 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004378 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004379 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004380 .block_erasers =
4381 {
4382 {
4383 .eraseblocks = { {4 * 1024, 256} },
4384 .block_erase = erase_sector_jedec,
4385 }, {
4386 .eraseblocks = { {64 * 1024, 16} },
4387 .block_erase = erase_block_jedec,
4388 }, {
4389 .eraseblocks = { {1024 * 1024, 1} },
4390 .block_erase = NULL,
4391 }
4392 },
Sean Nelson35727f72010-01-28 23:55:12 +00004393 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004394 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004395 },
4396
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004397 {
4398 .vendor = "SST",
4399 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004400 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004401 .manufacture_id = SST_ID,
4402 .model_id = SST_49LF160C,
4403 .total_size = 2048,
4404 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004405 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004406 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004407 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004408 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00004409 /* .erase = NULL, Was: erase_49flxxxc */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004410 .block_erasers =
4411 {
4412 {
4413 .eraseblocks = { {4 * 1024, 512} },
4414 .block_erase = erase_sector_49lfxxxc,
4415 }, {
4416 .eraseblocks = {
4417 {64 * 1024, 31},
4418 {32 * 1024, 1},
4419 {8 * 1024, 2},
4420 {16 * 1024, 1},
4421 },
4422 .block_erase = erase_block_49lfxxxc,
4423 }
4424 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004425 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004426 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004427 },
4428
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004429 {
4430 .vendor = "ST",
4431 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004432 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004433 .manufacture_id = ST_ID,
4434 .model_id = ST_M25P05A,
4435 .total_size = 64,
4436 .page_size = 256,
4437 .tested = TEST_UNTESTED,
4438 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004439 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004440 .block_erasers =
4441 {
4442 {
4443 .eraseblocks = { {32 * 1024, 2} },
4444 .block_erase = spi_block_erase_d8,
4445 }, {
4446 .eraseblocks = { {64 * 1024, 1} },
4447 .block_erase = spi_block_erase_c7,
4448 }
4449 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004450 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004451 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004452 },
4453
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004454 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4455 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
4456 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
4457 * only is successful if RDID does not work.
4458 */
4459 {
4460 .vendor = "ST",
4461 .name = "M25P05.RES",
4462 .bustype = CHIP_BUSTYPE_SPI,
4463 .manufacture_id = ST_ID,
4464 .model_id = ST_M25P05_RES,
4465 .total_size = 64,
4466 .page_size = 256,
4467 .tested = TEST_UNTESTED,
4468 .probe = probe_spi_res,
4469 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004470 .block_erasers =
4471 {
4472 {
4473 .eraseblocks = { {32 * 1024, 2} },
4474 .block_erase = spi_block_erase_d8,
4475 }, {
4476 .eraseblocks = { {64 * 1024, 1} },
4477 .block_erase = spi_block_erase_c7,
4478 }
4479 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004480 .write = spi_chip_write_1, /* 128 */
4481 .read = spi_chip_read,
4482 },
4483
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004484 {
4485 .vendor = "ST",
4486 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004487 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004488 .manufacture_id = ST_ID,
4489 .model_id = ST_M25P10A,
4490 .total_size = 128,
4491 .page_size = 256,
4492 .tested = TEST_UNTESTED,
4493 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004494 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004495 .block_erasers =
4496 {
4497 {
4498 .eraseblocks = { {32 * 1024, 4} },
4499 .block_erase = spi_block_erase_d8,
4500 }, {
4501 .eraseblocks = { {128 * 1024, 1} },
4502 .block_erase = spi_block_erase_c7,
4503 }
4504 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004505 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004506 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004507 },
4508
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004509 /* The ST M25P10 has the same problem as the M25P05. */
4510 {
4511 .vendor = "ST",
4512 .name = "M25P10.RES",
4513 .bustype = CHIP_BUSTYPE_SPI,
4514 .manufacture_id = ST_ID,
4515 .model_id = ST_M25P10_RES,
4516 .total_size = 128,
4517 .page_size = 256,
4518 .tested = TEST_UNTESTED,
4519 .probe = probe_spi_res,
4520 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004521 .block_erasers =
4522 {
4523 {
4524 .eraseblocks = { {32 * 1024, 4} },
4525 .block_erase = spi_block_erase_d8,
4526 }, {
4527 .eraseblocks = { {128 * 1024, 1} },
4528 .block_erase = spi_block_erase_c7,
4529 }
4530 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004531 .write = spi_chip_write_1, /* 128 */
4532 .read = spi_chip_read,
4533 },
4534
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004535 {
4536 .vendor = "ST",
4537 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004538 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004539 .manufacture_id = ST_ID,
4540 .model_id = ST_M25P20,
4541 .total_size = 256,
4542 .page_size = 256,
4543 .tested = TEST_UNTESTED,
4544 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004545 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004546 .block_erasers =
4547 {
4548 {
4549 .eraseblocks = { {64 * 1024, 4} },
4550 .block_erase = spi_block_erase_d8,
4551 }, {
4552 .eraseblocks = { {256 * 1024, 1} },
4553 .block_erase = spi_block_erase_c7,
4554 }
4555 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004556 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004557 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004558 },
4559
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004560 {
4561 .vendor = "ST",
4562 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004563 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004564 .manufacture_id = ST_ID,
4565 .model_id = ST_M25P40,
4566 .total_size = 512,
4567 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004568 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004569 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004570 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004571 .block_erasers =
4572 {
4573 {
4574 .eraseblocks = { {64 * 1024, 8} },
4575 .block_erase = spi_block_erase_d8,
4576 }, {
4577 .eraseblocks = { {512 * 1024, 1} },
4578 .block_erase = spi_block_erase_c7,
4579 }
4580 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004581 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004582 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004583 },
4584
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004585 {
4586 .vendor = "ST",
4587 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004588 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004589 .manufacture_id = ST_ID,
4590 .model_id = ST_M25P40_RES,
4591 .total_size = 512,
4592 .page_size = 256,
4593 .tested = TEST_UNTESTED,
4594 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004595 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004596 .block_erasers =
4597 {
4598 {
4599 .eraseblocks = { {64 * 1024, 8} },
4600 .block_erase = spi_block_erase_d8,
4601 }, {
4602 .eraseblocks = { {512 * 1024, 1} },
4603 .block_erase = spi_block_erase_c7,
4604 }
4605 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004606 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004607 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004608 },
4609
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004610 {
4611 .vendor = "ST",
4612 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004613 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004614 .manufacture_id = ST_ID,
4615 .model_id = ST_M25P80,
4616 .total_size = 1024,
4617 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004618 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004619 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004620 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004621 .block_erasers =
4622 {
4623 {
4624 .eraseblocks = { {64 * 1024, 16} },
4625 .block_erase = spi_block_erase_d8,
4626 }, {
4627 .eraseblocks = { {1024 * 1024, 1} },
4628 .block_erase = spi_block_erase_c7,
4629 }
4630 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004631 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004632 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004633 },
4634
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004635 {
4636 .vendor = "ST",
4637 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004638 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004639 .manufacture_id = ST_ID,
4640 .model_id = ST_M25P16,
4641 .total_size = 2048,
4642 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004643 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004644 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004645 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004646 .block_erasers =
4647 {
4648 {
4649 .eraseblocks = { {64 * 1024, 32} },
4650 .block_erase = spi_block_erase_d8,
4651 }, {
4652 .eraseblocks = { {2 * 1024 * 1024, 1} },
4653 .block_erase = spi_block_erase_c7,
4654 }
4655 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004656 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004657 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004658 },
4659
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004660 {
4661 .vendor = "ST",
4662 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004663 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004664 .manufacture_id = ST_ID,
4665 .model_id = ST_M25P32,
4666 .total_size = 4096,
4667 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004668 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004669 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004670 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004671 .block_erasers =
4672 {
4673 {
4674 .eraseblocks = { {64 * 1024, 64} },
4675 .block_erase = spi_block_erase_d8,
4676 }, {
4677 .eraseblocks = { {4 * 1024 * 1024, 1} },
4678 .block_erase = spi_block_erase_c7,
4679 }
4680 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004681 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004682 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004683 },
4684
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004685 {
4686 .vendor = "ST",
4687 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004688 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004689 .manufacture_id = ST_ID,
4690 .model_id = ST_M25P64,
4691 .total_size = 8192,
4692 .page_size = 256,
4693 .tested = TEST_UNTESTED,
4694 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004695 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004696 .block_erasers =
4697 {
4698 {
4699 .eraseblocks = { {64 * 1024, 128} },
4700 .block_erase = spi_block_erase_d8,
4701 }, {
4702 .eraseblocks = { {8 * 1024 * 1024, 1} },
4703 .block_erase = spi_block_erase_c7,
4704 }
4705 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004706 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004707 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004708 },
4709
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004710 {
4711 .vendor = "ST",
4712 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004713 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004714 .manufacture_id = ST_ID,
4715 .model_id = ST_M25P128,
4716 .total_size = 16384,
4717 .page_size = 256,
4718 .tested = TEST_UNTESTED,
4719 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004720 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004721 .block_erasers =
4722 {
4723 {
4724 .eraseblocks = { {256 * 1024, 64} },
4725 .block_erase = spi_block_erase_d8,
4726 }, {
4727 .eraseblocks = { {16 * 1024 * 1024, 1} },
4728 .block_erase = spi_block_erase_c7,
4729 }
4730 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004731 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004732 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004733 },
4734
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004735 {
4736 .vendor = "ST",
4737 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004738 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004739 .manufacture_id = ST_ID,
4740 .model_id = ST_M29F002B,
4741 .total_size = 256,
4742 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004743 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004744 .tested = TEST_UNTESTED,
4745 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004746 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004747 .block_erasers =
4748 {
4749 {
4750 .eraseblocks = {
4751 {16 * 1024, 1},
4752 {8 * 1024, 2},
4753 {32 * 1024, 1},
4754 {64 * 1024, 3},
4755 },
4756 .block_erase = erase_sector_jedec,
4757 }, {
4758 .eraseblocks = { {256 * 1024, 1} },
4759 .block_erase = erase_chip_block_jedec,
4760 }
4761 },
Sean Nelson35727f72010-01-28 23:55:12 +00004762 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004763 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004764 },
4765
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004766 {
4767 .vendor = "ST",
4768 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004769 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004770 .manufacture_id = ST_ID,
4771 .model_id = ST_M29F002T,
4772 .total_size = 256,
4773 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004774 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
4775 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004776 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004777 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004778 .block_erasers =
4779 {
4780 {
4781 .eraseblocks = {
4782 {64 * 1024, 3},
4783 {32 * 1024, 1},
4784 {8 * 1024, 2},
4785 {16 * 1024, 1},
4786 },
4787 .block_erase = erase_sector_jedec,
4788 }, {
4789 .eraseblocks = { {256 * 1024, 1} },
4790 .block_erase = erase_chip_block_jedec,
4791 }
4792 },
Sean Nelson35727f72010-01-28 23:55:12 +00004793 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004794 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004795 },
4796
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004797 {
4798 .vendor = "ST",
4799 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004800 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004801 .manufacture_id = ST_ID,
4802 .model_id = ST_M29F040B,
4803 .total_size = 512,
4804 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004805 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4806 .tested = TEST_UNTESTED,
4807 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004808 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004809 .block_erasers =
4810 {
4811 {
4812 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004813 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004814 }, {
4815 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004816 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004817 }
4818 },
Sean Nelson35727f72010-01-28 23:55:12 +00004819 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004820 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004821 },
4822
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004823 {
Sean Nelson35727f72010-01-28 23:55:12 +00004824 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004825 .vendor = "ST",
4826 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004827 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004828 .manufacture_id = ST_ID,
4829 .model_id = ST_M29F400BT,
4830 .total_size = 512,
4831 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004832 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004833 .tested = TEST_UNTESTED,
4834 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004835 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004836 .block_erasers =
4837 {
4838 {
4839 .eraseblocks = {
4840 {64 * 1024, 7},
4841 {32 * 1024, 1},
4842 {8 * 1024, 2},
4843 {16 * 1024, 1},
4844 },
4845 .block_erase = block_erase_m29f400bt,
4846 }, {
4847 .eraseblocks = { {512 * 1024, 1} },
4848 .block_erase = block_erase_chip_m29f400bt,
4849 }
4850 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004851 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004852 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004853 },
4854
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004855 {
4856 .vendor = "ST",
4857 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004858 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004859 .manufacture_id = ST_ID,
4860 .model_id = ST_M29W010B,
4861 .total_size = 128,
4862 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004863 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004864 .tested = TEST_UNTESTED,
4865 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004866 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004867 .block_erasers =
4868 {
4869 {
4870 .eraseblocks = { {16 * 1024, 8}, },
4871 .block_erase = erase_sector_jedec,
4872 }, {
4873 .eraseblocks = { {128 * 1024, 1} },
4874 .block_erase = erase_chip_block_jedec,
4875 }
4876 },
Sean Nelson35727f72010-01-28 23:55:12 +00004877 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004878 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004879 },
4880
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004881 {
4882 .vendor = "ST",
4883 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004884 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004885 .manufacture_id = ST_ID,
4886 .model_id = ST_M29W040B,
4887 .total_size = 512,
4888 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004889 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004890 .tested = TEST_UNTESTED,
4891 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004892 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004893 .block_erasers =
4894 {
4895 {
4896 .eraseblocks = { {64 * 1024, 8}, },
4897 .block_erase = erase_sector_jedec,
4898 }, {
4899 .eraseblocks = { {512 * 1024, 1} },
4900 .block_erase = erase_chip_block_jedec,
4901 }
4902 },
Sean Nelson35727f72010-01-28 23:55:12 +00004903 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004904 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004905 },
4906
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004907 {
4908 .vendor = "ST",
4909 .name = "M29W512B",
4910 .bustype = CHIP_BUSTYPE_PARALLEL,
4911 .manufacture_id = ST_ID,
4912 .model_id = ST_M29W512B,
4913 .total_size = 64,
4914 .page_size = 64 * 1024,
4915 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4916 .tested = TEST_OK_PREW,
4917 .probe = probe_jedec,
4918 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004919 .block_erasers =
4920 {
4921 {
4922 .eraseblocks = { {64 * 1024, 1} },
4923 .block_erase = erase_chip_block_jedec,
4924 }
4925 },
4926 .write = write_jedec_1,
4927 .read = read_memmapped,
4928 },
4929
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004930 {
4931 .vendor = "ST",
4932 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00004933 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004934 .manufacture_id = ST_ID,
4935 .model_id = ST_M50FLW040A,
4936 .total_size = 512,
4937 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004938 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004939 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004940 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004941 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004942 .block_erasers =
4943 {
4944 {
Sean Nelson329bde72010-01-19 16:39:19 +00004945 .eraseblocks = {
4946 {4 * 1024, 16}, /* sector */
4947 {64 * 1024, 5}, /* block */
4948 {4 * 1024, 16}, /* sector */
4949 {4 * 1024, 16}, /* sector */
4950 },
4951 .block_erase = NULL,
4952 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004953 .eraseblocks = { {64 * 1024, 8}, },
4954 .block_erase = erase_block_stm50flw0x0x,
4955 }, {
4956 .eraseblocks = { {512 * 1024, 1} },
4957 .block_erase = erase_chip_stm50flw0x0x,
4958 }
4959 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004960 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004961 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004962 },
4963
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004964 {
4965 .vendor = "ST",
4966 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00004967 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004968 .manufacture_id = ST_ID,
4969 .model_id = ST_M50FLW040B,
4970 .total_size = 512,
4971 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004972 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004973 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004974 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004975 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004976 .block_erasers =
4977 {
4978 {
Sean Nelson329bde72010-01-19 16:39:19 +00004979 .eraseblocks = {
4980 {4 * 1024, 16}, /* sector */
4981 {4 * 1024, 16}, /* sector */
4982 {64 * 1024, 5}, /* block */
4983 {4 * 1024, 16}, /* sector */
4984 },
4985 .block_erase = NULL,
4986 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004987 .eraseblocks = { {64 * 1024, 8}, },
4988 .block_erase = erase_block_stm50flw0x0x,
4989 }, {
4990 .eraseblocks = { {512 * 1024, 1} },
4991 .block_erase = erase_chip_stm50flw0x0x,
4992 }
4993 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004994 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004995 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004996 },
4997
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004998 {
4999 .vendor = "ST",
5000 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005001 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005002 .manufacture_id = ST_ID,
5003 .model_id = ST_M50FLW080A,
5004 .total_size = 1024,
5005 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005006 .feature_bits = 0,
5007 .tested = TEST_UNTESTED,
5008 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005009 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005010 .block_erasers =
5011 {
5012 {
Sean Nelson329bde72010-01-19 16:39:19 +00005013 .eraseblocks = {
5014 {4 * 1024, 16}, /* sector */
5015 {64 * 1024, 13}, /* block */
5016 {4 * 1024, 16}, /* sector */
5017 {4 * 1024, 16}, /* sector */
5018 },
5019 .block_erase = NULL,
5020 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005021 .eraseblocks = { {64 * 1024, 16}, },
5022 .block_erase = erase_block_stm50flw0x0x,
5023 }, {
5024 .eraseblocks = { {1024 * 1024, 1} },
5025 .block_erase = erase_chip_stm50flw0x0x,
5026 }
5027 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005028 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005029 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005030 },
5031
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005032 {
5033 .vendor = "ST",
5034 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005035 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005036 .manufacture_id = ST_ID,
5037 .model_id = ST_M50FLW080B,
5038 .total_size = 1024,
5039 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005040 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005041 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005042 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005043 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005044 .block_erasers =
5045 {
5046 {
Sean Nelson329bde72010-01-19 16:39:19 +00005047 .eraseblocks = {
5048 {4 * 1024, 16}, /* sector */
5049 {4 * 1024, 16}, /* sector */
5050 {64 * 1024, 13}, /* block */
5051 {4 * 1024, 16}, /* sector */
5052 },
5053 .block_erase = NULL,
5054 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005055 .eraseblocks = { {64 * 1024, 16}, },
5056 .block_erase = erase_block_stm50flw0x0x,
5057 }, {
5058 .eraseblocks = { {1024 * 1024, 1} },
5059 .block_erase = erase_chip_stm50flw0x0x,
5060 }
5061 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005062 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005063 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005064 },
5065
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005066 {
5067 .vendor = "ST",
5068 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005069 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005070 .manufacture_id = ST_ID,
5071 .model_id = ST_M50FW002,
5072 .total_size = 256,
5073 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005074 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005075 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005076 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005077 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005078 .block_erasers =
5079 {
5080 {
5081 .eraseblocks = {
5082 {64 * 1024, 3},
5083 {32 * 1024, 1},
5084 {8 * 1024, 2},
5085 {16 * 1024, 1},
5086 },
5087 .block_erase = erase_block_stm50flw0x0x,
5088 }, {
5089 .eraseblocks = { {256 * 1024, 1} },
5090 .block_erase = erase_chip_stm50flw0x0x,
5091 }
5092 },
Sean Nelson35727f72010-01-28 23:55:12 +00005093 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005094 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005095 },
5096
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005097 {
5098 .vendor = "ST",
5099 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005100 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005101 .manufacture_id = ST_ID,
5102 .model_id = ST_M50FW016,
5103 .total_size = 2048,
5104 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005105 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005106 .tested = TEST_UNTESTED,
5107 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005108 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005109 .block_erasers =
5110 {
5111 {
5112 .eraseblocks = { {64 * 1024, 32}, },
5113 .block_erase = erase_block_stm50flw0x0x,
5114 }, {
5115 .eraseblocks = { {2 * 1024 * 1024, 1} },
5116 .block_erase = erase_chip_stm50flw0x0x,
5117 }
5118 },
5119 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005120 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005121 },
5122
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005123 {
5124 .vendor = "ST",
5125 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005126 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005127 .manufacture_id = ST_ID,
5128 .model_id = ST_M50FW040,
5129 .total_size = 512,
5130 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005131 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005132 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005133 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005134 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005135 .block_erasers =
5136 {
5137 {
5138 .eraseblocks = { {64 * 1024, 8}, },
5139 .block_erase = erase_block_stm50flw0x0x,
5140 }, {
5141 .eraseblocks = { {512 * 1024, 1} },
5142 .block_erase = erase_chip_stm50flw0x0x,
5143 }
5144 },
5145 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005146 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005147 },
5148
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005149 {
5150 .vendor = "ST",
5151 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005152 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005153 .manufacture_id = ST_ID,
5154 .model_id = ST_M50FW080,
5155 .total_size = 1024,
5156 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005157 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005158 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005159 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005160 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005161 .block_erasers =
5162 {
5163 {
5164 .eraseblocks = { {64 * 1024, 16}, },
5165 .block_erase = erase_block_stm50flw0x0x,
5166 }, {
5167 .eraseblocks = { {1024 * 1024, 1} },
5168 .block_erase = erase_chip_stm50flw0x0x,
5169 }
5170 },
5171 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005172 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005173 },
5174
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005175 {
5176 .vendor = "ST",
5177 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005178 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005179 .manufacture_id = ST_ID,
5180 .model_id = ST_M50LPW116,
5181 .total_size = 2048,
5182 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005183 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005184 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005185 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005186 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005187 .block_erasers =
5188 {
5189 {
5190 .eraseblocks = {
5191 {4 * 1024, 16},
5192 {64 * 1024, 30},
5193 {32 * 1024, 1},
5194 {8 * 1024, 2},
5195 {16 * 1024, 1},
5196 },
5197 .block_erase = erase_block_stm50flw0x0x,
5198 }, {
5199 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005200 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005201 }
5202 },
Sean Nelson35727f72010-01-28 23:55:12 +00005203 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005204 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005205 },
5206
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005207 {
5208 .vendor = "SyncMOS",
5209 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005210 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005211 .manufacture_id = SYNCMOS_ID,
5212 .model_id = S29C31004T,
5213 .total_size = 512,
5214 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005215 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005216 .tested = TEST_UNTESTED,
5217 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005218 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005219 .block_erasers =
5220 {
5221 {
5222 .eraseblocks = { {1 * 1024, 512} },
5223 .block_erase = erase_sector_jedec,
5224 }, {
5225 .eraseblocks = { {512 * 1024, 1} },
5226 .block_erase = erase_chip_block_jedec,
5227 },
5228 },
Sean Nelson35727f72010-01-28 23:55:12 +00005229 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005230 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005231 },
5232
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005233 {
5234 .vendor = "SyncMOS",
5235 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005236 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005237 .manufacture_id = SYNCMOS_ID,
5238 .model_id = S29C51001T,
5239 .total_size = 128,
5240 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005241 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005242 .tested = TEST_UNTESTED,
5243 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005244 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005245 .block_erasers =
5246 {
5247 {
5248 .eraseblocks = { {512, 256} },
5249 .block_erase = erase_sector_jedec,
5250 }, {
5251 .eraseblocks = { {128 * 1024, 1} },
5252 .block_erase = erase_chip_block_jedec,
5253 },
5254 },
Sean Nelson35727f72010-01-28 23:55:12 +00005255 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005256 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005257 },
5258
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005259 {
5260 .vendor = "SyncMOS",
5261 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005262 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005263 .manufacture_id = SYNCMOS_ID,
5264 .model_id = S29C51002T,
5265 .total_size = 256,
5266 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005267 .feature_bits = FEATURE_EITHER_RESET,
5268 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005269 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005270 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005271 .block_erasers =
5272 {
5273 {
5274 .eraseblocks = { {512, 512} },
5275 .block_erase = erase_sector_jedec,
5276 }, {
5277 .eraseblocks = { {256 * 1024, 1} },
5278 .block_erase = erase_chip_block_jedec,
5279 },
5280 },
Sean Nelson35727f72010-01-28 23:55:12 +00005281 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005282 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005283 },
5284
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005285 {
5286 .vendor = "SyncMOS",
5287 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005288 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005289 .manufacture_id = SYNCMOS_ID,
5290 .model_id = S29C51004T,
5291 .total_size = 512,
5292 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005293 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005294 .tested = TEST_UNTESTED,
5295 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005296 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005297 .block_erasers =
5298 {
5299 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005300 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005301 .block_erase = erase_sector_jedec,
5302 }, {
5303 .eraseblocks = { {512 * 1024, 1} },
5304 .block_erase = erase_chip_block_jedec,
5305 },
5306 },
Sean Nelson35727f72010-01-28 23:55:12 +00005307 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005308 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005309 },
5310
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005311 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005312 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005313 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005314 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005315 .manufacture_id = TI_OLD_ID,
5316 .model_id = TI_TMS29F002RB,
5317 .total_size = 256,
5318 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005319 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005320 .tested = TEST_UNTESTED,
5321 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005322 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005323 .block_erasers =
5324 {
5325 {
5326 .eraseblocks = {
5327 {16 * 1024, 1},
5328 {8 * 1024, 2},
5329 {32 * 1024, 1},
5330 {64 * 1024, 3},
5331 },
5332 .block_erase = erase_sector_jedec,
5333 }, {
5334 .eraseblocks = { {256 * 1024, 1} },
5335 .block_erase = erase_chip_block_jedec,
5336 },
5337 },
Sean Nelson35727f72010-01-28 23:55:12 +00005338 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005339 .read = read_memmapped,
5340 },
5341
5342 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005343 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005344 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005345 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005346 .manufacture_id = TI_OLD_ID,
5347 .model_id = TI_TMS29F002RT,
5348 .total_size = 256,
5349 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005350 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005351 .tested = TEST_UNTESTED,
5352 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005353 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005354 .block_erasers =
5355 {
5356 {
5357 .eraseblocks = {
5358 {64 * 1024, 3},
5359 {32 * 1024, 1},
5360 {8 * 1024, 2},
5361 {16 * 1024, 1},
5362 },
5363 .block_erase = erase_sector_jedec,
5364 }, {
5365 .eraseblocks = { {256 * 1024, 1} },
5366 .block_erase = erase_chip_block_jedec,
5367 },
5368 },
Sean Nelson35727f72010-01-28 23:55:12 +00005369 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005370 .read = read_memmapped,
5371 },
5372
5373 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005374 .vendor = "Winbond",
5375 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005376 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005377 .manufacture_id = WINBOND_NEX_ID,
5378 .model_id = W_25X10,
5379 .total_size = 128,
5380 .page_size = 256,
5381 .tested = TEST_UNTESTED,
5382 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005383 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005384 .block_erasers =
5385 {
5386 {
5387 .eraseblocks = { {4 * 1024, 32} },
5388 .block_erase = spi_block_erase_20,
5389 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005390 .eraseblocks = { {64 * 1024, 2} },
5391 .block_erase = spi_block_erase_d8,
5392 }, {
5393 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005394 .block_erase = spi_block_erase_c7,
5395 }
5396 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005397 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005398 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005399 },
5400
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005401 {
5402 .vendor = "Winbond",
5403 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005404 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005405 .manufacture_id = WINBOND_NEX_ID,
5406 .model_id = W_25X20,
5407 .total_size = 256,
5408 .page_size = 256,
5409 .tested = TEST_UNTESTED,
5410 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005411 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005412 .block_erasers =
5413 {
5414 {
5415 .eraseblocks = { {4 * 1024, 64} },
5416 .block_erase = spi_block_erase_20,
5417 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005418 .eraseblocks = { {64 * 1024, 4} },
5419 .block_erase = spi_block_erase_d8,
5420 }, {
5421 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005422 .block_erase = spi_block_erase_c7,
5423 }
5424 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005425 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005426 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005427 },
5428
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005429 {
5430 .vendor = "Winbond",
5431 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005432 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005433 .manufacture_id = WINBOND_NEX_ID,
5434 .model_id = W_25X40,
5435 .total_size = 512,
5436 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005437 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005438 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005439 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005440 .block_erasers =
5441 {
5442 {
5443 .eraseblocks = { {4 * 1024, 128} },
5444 .block_erase = spi_block_erase_20,
5445 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005446 .eraseblocks = { {64 * 1024, 8} },
5447 .block_erase = spi_block_erase_d8,
5448 }, {
5449 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005450 .block_erase = spi_block_erase_c7,
5451 }
5452 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005453 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005454 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005455 },
5456
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005457 {
5458 .vendor = "Winbond",
5459 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005460 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005461 .manufacture_id = WINBOND_NEX_ID,
5462 .model_id = W_25X80,
5463 .total_size = 1024,
5464 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005465 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005466 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005467 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005468 .block_erasers =
5469 {
5470 {
5471 .eraseblocks = { {4 * 1024, 256} },
5472 .block_erase = spi_block_erase_20,
5473 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005474 .eraseblocks = { {64 * 1024, 16} },
5475 .block_erase = spi_block_erase_d8,
5476 }, {
5477 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005478 .block_erase = spi_block_erase_c7,
5479 }
5480 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005481 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005482 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005483 },
5484
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005485 {
5486 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005487 .name = "W25x16",
5488 .bustype = CHIP_BUSTYPE_SPI,
5489 .manufacture_id = WINBOND_NEX_ID,
5490 .model_id = W_25X16,
5491 .total_size = 2048,
5492 .page_size = 256,
5493 .tested = TEST_OK_PR,
5494 .probe = probe_spi_rdid,
5495 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005496 .block_erasers =
5497 {
5498 {
5499 .eraseblocks = { {4 * 1024, 512} },
5500 .block_erase = spi_block_erase_20,
5501 }, {
5502 .eraseblocks = { {32 * 1024, 64} },
5503 .block_erase = spi_block_erase_52,
5504 }, {
5505 .eraseblocks = { {64 * 1024, 32} },
5506 .block_erase = spi_block_erase_d8,
5507 }, {
5508 .eraseblocks = { {2 * 1024 * 1024, 1} },
5509 .block_erase = spi_block_erase_60,
5510 }, {
5511 .eraseblocks = { {2 * 1024 * 1024, 1} },
5512 .block_erase = spi_block_erase_c7,
5513 }
5514 },
Hector Martina721ae22009-07-11 19:39:11 +00005515 .write = spi_chip_write_256,
5516 .read = spi_chip_read,
5517 },
5518
5519 {
5520 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005521 .name = "W25x32",
5522 .bustype = CHIP_BUSTYPE_SPI,
5523 .manufacture_id = WINBOND_NEX_ID,
5524 .model_id = W_25X32,
5525 .total_size = 4096,
5526 .page_size = 256,
5527 .tested = TEST_OK_PROBE,
5528 .probe = probe_spi_rdid,
5529 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005530 .block_erasers =
5531 {
5532 {
5533 .eraseblocks = { {4 * 1024, 1024} },
5534 .block_erase = spi_block_erase_20,
5535 }, {
5536 .eraseblocks = { {32 * 1024, 128} },
5537 .block_erase = spi_block_erase_52,
5538 }, {
5539 .eraseblocks = { {64 * 1024, 64} },
5540 .block_erase = spi_block_erase_d8,
5541 }, {
5542 .eraseblocks = { {4 * 1024 * 1024, 1} },
5543 .block_erase = spi_block_erase_60,
5544 }, {
5545 .eraseblocks = { {4 * 1024 * 1024, 1} },
5546 .block_erase = spi_block_erase_c7,
5547 }
5548 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005549 .write = spi_chip_write_256,
5550 .read = spi_chip_read,
5551 },
5552
5553 {
5554 .vendor = "Winbond",
5555 .name = "W25x64",
5556 .bustype = CHIP_BUSTYPE_SPI,
5557 .manufacture_id = WINBOND_NEX_ID,
5558 .model_id = W_25X64,
5559 .total_size = 8192,
5560 .page_size = 256,
5561 .tested = TEST_UNTESTED,
5562 .probe = probe_spi_rdid,
5563 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005564 .block_erasers =
5565 {
5566 {
5567 .eraseblocks = { {4 * 1024, 2048} },
5568 .block_erase = spi_block_erase_20,
5569 }, {
5570 .eraseblocks = { {32 * 1024, 256} },
5571 .block_erase = spi_block_erase_52,
5572 }, {
5573 .eraseblocks = { {64 * 1024, 128} },
5574 .block_erase = spi_block_erase_d8,
5575 }, {
5576 .eraseblocks = { {8 * 1024 * 1024, 1} },
5577 .block_erase = spi_block_erase_60,
5578 }, {
5579 .eraseblocks = { {8 * 1024 * 1024, 1} },
5580 .block_erase = spi_block_erase_c7,
5581 }
5582 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005583 .write = spi_chip_write_256,
5584 .read = spi_chip_read,
5585 },
5586
5587 {
5588 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005589 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005590 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005591 .manufacture_id = WINBOND_ID,
5592 .model_id = W_29C011,
5593 .total_size = 128,
5594 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005595 .feature_bits = FEATURE_LONG_RESET,
5596 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005597 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005598 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005599 .block_erasers =
5600 {
5601 {
5602 .eraseblocks = { {128 * 1024, 1} },
5603 .block_erase = erase_chip_block_jedec,
5604 }
5605 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005606 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005607 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005608 },
5609
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005610 {
5611 .vendor = "Winbond",
5612 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005613 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005614 .manufacture_id = WINBOND_ID,
5615 .model_id = W_29C020C,
5616 .total_size = 256,
5617 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005618 .feature_bits = FEATURE_LONG_RESET,
5619 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005620 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005621 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005622 .block_erasers =
5623 {
5624 {
5625 .eraseblocks = { {256 * 1024, 1} },
5626 .block_erase = erase_chip_block_jedec,
5627 }
5628 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005629 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005630 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005631 },
5632
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005633 {
5634 .vendor = "Winbond",
5635 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005636 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005637 .manufacture_id = WINBOND_ID,
5638 .model_id = W_29C040P,
5639 .total_size = 512,
5640 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005641 .feature_bits = FEATURE_LONG_RESET,
5642 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005643 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005644 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005645 .block_erasers =
5646 {
5647 {
5648 .eraseblocks = { {512 * 1024, 1} },
5649 .block_erase = erase_chip_block_jedec,
5650 }
5651 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005652 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005653 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005654 },
5655
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005656 {
5657 .vendor = "Winbond",
5658 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005659 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005660 .manufacture_id = WINBOND_ID,
5661 .model_id = W_29C011,
5662 .total_size = 128,
5663 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005664 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005665 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005666 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005667 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005668 .block_erasers =
5669 {
5670 {
5671 .eraseblocks = { {128 * 1024, 1} },
5672 .block_erase = erase_chip_block_jedec,
5673 }
5674 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005675 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005676 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005677 },
5678
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005679 {
5680 .vendor = "Winbond",
5681 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005682 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005683 .manufacture_id = WINBOND_ID,
5684 .model_id = W_39V040A,
5685 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005686 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005687 .feature_bits = FEATURE_EITHER_RESET,
5688 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005689 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005690 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005691 .block_erasers =
5692 {
5693 {
5694 .eraseblocks = { {64 * 1024, 8} },
5695 .block_erase = erase_sector_jedec,
5696 }, {
5697 .eraseblocks = { {512 * 1024, 1} },
5698 .block_erase = erase_chip_block_jedec,
5699 }
5700 },
Sean Nelson35727f72010-01-28 23:55:12 +00005701 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005702 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005703 },
5704
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005705 {
5706 .vendor = "Winbond",
5707 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005708 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005709 .manufacture_id = WINBOND_ID,
5710 .model_id = W_39V040B,
5711 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005712 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005713 .feature_bits = FEATURE_EITHER_RESET,
5714 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005715 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005716 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005717 .block_erasers =
5718 {
5719 {
5720 .eraseblocks = { {64 * 1024, 8} },
5721 .block_erase = erase_sector_jedec,
5722 }, {
5723 .eraseblocks = { {512 * 1024, 1} },
5724 .block_erase = erase_chip_block_jedec,
5725 }
5726 },
Sean Nelson35727f72010-01-28 23:55:12 +00005727 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005728 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005729 },
5730
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005731 {
5732 .vendor = "Winbond",
5733 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005734 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005735 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005736 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005737 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005738 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005739 .feature_bits = FEATURE_EITHER_RESET,
5740 .tested = TEST_UNTESTED,
5741 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005742 .probe_timing = TIMING_FIXME,
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00005743 /* .erase = NULL, Was erase_w39v040c */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005744 .block_erasers =
5745 {
5746 {
5747 .eraseblocks = { {64 * 1024, 8} },
5748 .block_erase = erase_sector_jedec,
5749 }, {
5750 .eraseblocks = { {512 * 1024, 1} },
5751 .block_erase = erase_chip_block_jedec,
5752 }
5753 },
Sean Nelson35727f72010-01-28 23:55:12 +00005754 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005755 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005756 },
5757
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005758 {
5759 .vendor = "Winbond",
5760 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005761 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005762 .manufacture_id = WINBOND_ID,
5763 .model_id = W_39V040FA,
5764 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005765 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005766 .feature_bits = FEATURE_EITHER_RESET,
5767 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005768 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005769 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005770 .block_erasers =
5771 {
5772 {
5773 .eraseblocks = { {4 * 1024, 128} },
5774 .block_erase = erase_block_jedec,
5775 }, {
5776 .eraseblocks = { {64 * 1024, 8} },
5777 .block_erase = erase_sector_jedec,
5778 }, {
5779 .eraseblocks = { {512 * 1024, 1} },
5780 .block_erase = erase_chip_block_jedec,
5781 }
5782 },
Sean Nelson35727f72010-01-28 23:55:12 +00005783 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005784 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005785 },
5786
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005787 {
5788 .vendor = "Winbond",
5789 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005790 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005791 .manufacture_id = WINBOND_ID,
5792 .model_id = W_39V080A,
5793 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005794 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005795 .feature_bits = FEATURE_EITHER_RESET,
5796 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005797 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005798 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005799 .block_erasers =
5800 {
5801 {
5802 .eraseblocks = { {64 * 1024, 16} },
5803 .block_erase = erase_sector_jedec,
5804 }, {
5805 .eraseblocks = { {1024 * 1024, 1} },
5806 .block_erase = erase_chip_block_jedec,
5807 }
5808 },
Sean Nelson35727f72010-01-28 23:55:12 +00005809 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005810 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005811 },
5812
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005813 {
5814 .vendor = "Winbond",
5815 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00005816 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005817 .manufacture_id = WINBOND_ID,
5818 .model_id = W_49F002U,
5819 .total_size = 256,
5820 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005821 .feature_bits = FEATURE_EITHER_RESET,
5822 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005823 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005824 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005825 .block_erasers =
5826 {
5827 {
5828 .eraseblocks = {
5829 {128 * 1024, 1},
5830 {96 * 1024, 1},
5831 {8 * 1024, 2},
5832 {16 * 1024, 1},
5833 },
5834 .block_erase = erase_sector_jedec,
5835 }, {
5836 .eraseblocks = { {256 * 1024, 1} },
5837 .block_erase = erase_chip_block_jedec,
5838 }
5839 },
Sean Nelson35727f72010-01-28 23:55:12 +00005840 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005841 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005842 },
5843
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005844 {
5845 .vendor = "Winbond",
5846 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005847 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005848 .manufacture_id = WINBOND_ID,
5849 .model_id = W_49V002A,
5850 .total_size = 256,
5851 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005852 .feature_bits = FEATURE_EITHER_RESET,
5853 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005854 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005855 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005856 .block_erasers =
5857 {
5858 {
5859 .eraseblocks = {
5860 {64 * 1024, 3},
5861 {32 * 1024, 1},
5862 {8 * 1024, 2},
5863 {16 * 1024, 1},
5864 },
5865 .block_erase = erase_sector_jedec,
5866 }, {
5867 .eraseblocks = { {256 * 1024, 1} },
5868 .block_erase = erase_chip_block_jedec,
5869 }
5870 },
Sean Nelson35727f72010-01-28 23:55:12 +00005871 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005872 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005873 },
5874
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005875 {
5876 .vendor = "Winbond",
5877 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005878 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005879 .manufacture_id = WINBOND_ID,
5880 .model_id = W_49V002FA,
5881 .total_size = 256,
5882 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005883 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005884 .tested = TEST_UNTESTED,
5885 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005886 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005887 .block_erasers =
5888 {
5889 {
5890 .eraseblocks = {
5891 {64 * 1024, 3},
5892 {32 * 1024, 1},
5893 {8 * 1024, 2},
5894 {16 * 1024, 1},
5895 },
5896 .block_erase = erase_sector_jedec,
5897 }, {
5898 .eraseblocks = { {256 * 1024, 1} },
5899 .block_erase = erase_chip_block_jedec,
5900 }
5901 },
Sean Nelson35727f72010-01-28 23:55:12 +00005902 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005903 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005904 },
5905
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005906 {
5907 .vendor = "Winbond",
5908 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005909 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005910 .manufacture_id = WINBOND_ID,
5911 .model_id = W_39V080FA,
5912 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005913 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005914 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
5915 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005916 .probe = probe_jedec,
5917 .probe_timing = TIMING_FIXME,
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00005918 /* .erase = NULL, Was erase_winbond_fwhub */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005919 .block_erasers =
5920 {
5921 {
5922 .eraseblocks = { {64 * 1024, 16}, },
5923 .block_erase = erase_sector_jedec,
5924 }, {
5925 .eraseblocks = { {1024 * 1024, 1} },
5926 .block_erase = erase_chip_block_jedec,
5927 }
5928 },
Sean Nelson35727f72010-01-28 23:55:12 +00005929 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005930 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005931 },
5932
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005933 {
5934 .vendor = "Winbond",
5935 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005936 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005937 .manufacture_id = WINBOND_ID,
5938 .model_id = W_39V080FA_DM,
5939 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005940 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005941 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005942 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005943 .probe = probe_jedec,
5944 .probe_timing = TIMING_FIXME,
Carl-Daniel Hailfinger48f1d732010-02-11 23:03:53 +00005945 /* .erase = NULL, Was erase_winbond_fwhub */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005946 .block_erasers =
5947 {
5948 {
5949 .eraseblocks = { {64 * 1024, 8}, },
5950 .block_erase = erase_sector_jedec,
5951 }, {
5952 .eraseblocks = { {512 * 1024, 1} },
5953 .block_erase = erase_chip_block_jedec,
5954 }
5955 },
Sean Nelson35727f72010-01-28 23:55:12 +00005956 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005957 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005958 },
5959
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005960 {
5961 .vendor = "Atmel",
5962 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005963 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005964 .manufacture_id = ATMEL_ID,
5965 .model_id = GENERIC_DEVICE_ID,
5966 .total_size = 0,
5967 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005968 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005969 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005970 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005971 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005972 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005973 },
5974
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005975 {
5976 .vendor = "EON",
5977 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005978 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005979 .manufacture_id = EON_ID_NOPREFIX,
5980 .model_id = GENERIC_DEVICE_ID,
5981 .total_size = 0,
5982 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005983 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005984 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005985 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005986 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005987 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005988 },
5989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005990 {
5991 .vendor = "Macronix",
5992 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005993 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005994 .manufacture_id = MX_ID,
5995 .model_id = GENERIC_DEVICE_ID,
5996 .total_size = 0,
5997 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005998 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005999 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006000 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006001 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006002 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006003 },
6004
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006005 {
6006 .vendor = "PMC",
6007 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006008 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006009 .manufacture_id = PMC_ID,
6010 .model_id = GENERIC_DEVICE_ID,
6011 .total_size = 0,
6012 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006013 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006014 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006015 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006016 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006017 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006018 },
6019
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006020 {
6021 .vendor = "SST",
6022 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006023 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006024 .manufacture_id = SST_ID,
6025 .model_id = GENERIC_DEVICE_ID,
6026 .total_size = 0,
6027 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006028 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006029 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006030 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006031 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006032 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006033 },
6034
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006035 {
6036 .vendor = "ST",
6037 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006038 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006039 .manufacture_id = ST_ID,
6040 .model_id = GENERIC_DEVICE_ID,
6041 .total_size = 0,
6042 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006043 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006044 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006045 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006046 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006047 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006048 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006049
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006050 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006051 .vendor = "Sanyo",
6052 .name = "unknown Sanyo SPI chip",
6053 .bustype = CHIP_BUSTYPE_SPI,
6054 .manufacture_id = SANYO_ID,
6055 .model_id = GENERIC_DEVICE_ID,
6056 .total_size = 0,
6057 .page_size = 256,
6058 .tested = TEST_BAD_PREW,
6059 .probe = probe_spi_rdid,
6060 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006061 .write = NULL,
6062 .read = NULL,
6063 },
6064
6065 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006066 .vendor = "Generic",
6067 .name = "unknown SPI chip (RDID)",
6068 .bustype = CHIP_BUSTYPE_SPI,
6069 .manufacture_id = GENERIC_MANUF_ID,
6070 .model_id = GENERIC_DEVICE_ID,
6071 .total_size = 0,
6072 .page_size = 256,
6073 .tested = TEST_BAD_PREW,
6074 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006075 .write = NULL,
6076 },
6077 {
6078 .vendor = "Generic",
6079 .name = "unknown SPI chip (REMS)",
6080 .bustype = CHIP_BUSTYPE_SPI,
6081 .manufacture_id = GENERIC_MANUF_ID,
6082 .model_id = GENERIC_DEVICE_ID,
6083 .total_size = 0,
6084 .page_size = 256,
6085 .tested = TEST_BAD_PREW,
6086 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006087 .write = NULL,
6088 },
6089
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006090 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006091};