blob: 45e67c64e5d47d11a0d9a91072504f59974c54d3 [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"
Sean Nelson14ba6682010-02-26 05:48:29 +000027#include "chipdrivers.h"
Ollie Lho184a4042005-11-26 21:55:36 +000028
Uwe Hermannfc425e82008-03-16 02:06:25 +000029/**
Uwe Hermanna9720402009-05-21 15:55:46 +000030 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000031 *
32 * Please keep the list sorted by vendor name and chip name, so that
33 * the output of 'flashrom -L' is alphabetically sorted.
34 */
Ollie Lho184a4042005-11-26 21:55:36 +000035struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000036
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000037 /*
38 * .vendor = Vendor name
39 * .name = Chip name
40 * .bustype = Supported flash bus types (Parallel, LPC...)
41 * .manufacture_id = Manufacturer chip ID
42 * .model_id = Model chip ID
43 * .total_size = Total size in (binary) kbytes
44 * .page_size = Page or eraseblock(?) size in bytes
45 * .tested = Test status
46 * .probe = Probe function
47 * .probe_timing = Probe function delay
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000048 * .block_erasers[] = Array of erase layouts and erase functions
49 * {
50 * .eraseblocks[] = Array of { blocksize, blockcount }
51 * .block_erase = Block erase function
52 * }
Sean Nelson6e0b9122010-02-19 00:52:10 +000053 * .printlock = Chip lock status function
54 * .unlock = Chip unlock function
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000055 * .write = Chip write function
56 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000057 */
58
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000059 {
60 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000061 .name = "Am29F010A/B",
62 .bustype = CHIP_BUSTYPE_PARALLEL,
63 .manufacture_id = AMD_ID,
64 .model_id = AM_29F010B, /* Same as Am29F010A */
65 .total_size = 128,
66 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000067 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
68 .tested = TEST_UNTESTED,
69 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000070 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000071 .block_erasers =
72 {
73 {
74 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000075 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000076 }, {
77 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000078 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000079 },
80 },
Sean Nelson35727f72010-01-28 23:55:12 +000081 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000082 .read = read_memmapped,
83 },
84
85 {
86 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000087 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000088 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000089 .manufacture_id = AMD_ID,
90 .model_id = AM_29F002BB,
91 .total_size = 256,
92 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000093 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000094 .tested = TEST_UNTESTED,
95 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000096 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000097 .block_erasers =
98 {
99 {
100 .eraseblocks = {
101 {16 * 1024, 1},
102 {8 * 1024, 2},
103 {32 * 1024, 1},
104 {64 * 1024, 3},
105 },
106 .block_erase = erase_sector_jedec,
107 }, {
108 .eraseblocks = { {256 * 1024, 1} },
109 .block_erase = erase_chip_block_jedec,
110 },
111 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000112 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000113 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000114 },
115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000116 {
117 .vendor = "AMD",
118 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000119 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000120 .manufacture_id = AMD_ID,
121 .model_id = AM_29F002BT,
122 .total_size = 256,
123 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000124 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
125 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000126 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000127 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000128 .block_erasers =
129 {
130 {
131 .eraseblocks = {
132 {64 * 1024, 3},
133 {32 * 1024, 1},
134 {8 * 1024, 2},
135 {16 * 1024, 1},
136 },
137 .block_erase = erase_sector_jedec,
138 }, {
139 .eraseblocks = { {256 * 1024, 1} },
140 .block_erase = erase_chip_block_jedec,
141 },
142 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000143 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000144 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000145 },
146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000147 {
148 .vendor = "AMD",
149 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000150 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 .manufacture_id = AMD_ID,
152 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000153 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000154 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000155 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000156 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000157 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000158 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000159 .block_erasers =
160 {
161 {
162 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000163 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000164 }, {
165 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000166 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000167 },
168 },
Sean Nelson35727f72010-01-28 23:55:12 +0000169 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000170 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000171 },
172
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000173 {
174 .vendor = "AMD",
175 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000176 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000177 .manufacture_id = AMD_ID,
178 .model_id = AM_29F040B,
179 .total_size = 512,
180 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000181 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
182 .tested = TEST_UNTESTED,
183 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000184 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000185 .block_erasers =
186 {
187 {
188 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000189 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000190 }, {
191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000192 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000193 },
194 },
Sean Nelson35727f72010-01-28 23:55:12 +0000195 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000196 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000197 },
198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000199 {
200 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000201 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000202 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000203 .manufacture_id = AMD_ID,
204 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000205 .total_size = 1024,
206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000208 .tested = TEST_UNTESTED,
209 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000210 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000211 .block_erasers =
212 {
213 {
214 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000215 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000216 }, {
217 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000218 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000219 },
220 },
Sean Nelson35727f72010-01-28 23:55:12 +0000221 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000222 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000223 },
224
225 {
226 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000227 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000228 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000229 .manufacture_id = AMD_ID,
230 .model_id = AM_29LV040B,
231 .total_size = 512,
232 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000233 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000234 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000235 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000236 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000237 .block_erasers =
238 {
239 {
240 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000241 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000242 }, {
243 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000244 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000245 },
246 },
Sean Nelson35727f72010-01-28 23:55:12 +0000247 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000248 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000249 },
250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000251 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000252 .vendor = "AMD",
253 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000254 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000255 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000256 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000257 .total_size = 1024,
258 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000259 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000260 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000261 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000262 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000263 .block_erasers =
264 {
265 {
266 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000267 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000268 }, {
269 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000270 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000271 },
272 },
Sean Nelson35727f72010-01-28 23:55:12 +0000273 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000274 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000275 },
276
277 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000278 .vendor = "ASD",
279 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +0000280 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000281 .manufacture_id = ASD_ID,
282 .model_id = ASD_AE49F2008,
283 .total_size = 256,
284 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000285 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000286 .tested = TEST_UNTESTED,
287 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000288 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +0000289 .block_erasers =
290 {
291 {
292 .eraseblocks = {
293 {128 * 1024, 1},
294 {96 * 1024, 1},
295 {8 * 1024, 2},
296 {16 * 1024, 1},
297 },
298 .block_erase = erase_sector_jedec,
299 }, {
300 .eraseblocks = { {256 * 1024, 1} },
301 .block_erase = erase_chip_block_jedec,
302 }
303 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000304 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000305 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000306 },
307
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000308 {
309 .vendor = "Atmel",
310 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000311 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000312 .manufacture_id = ATMEL_ID,
313 .model_id = AT_25DF021,
314 .total_size = 256,
315 .page_size = 256,
316 .tested = TEST_UNTESTED,
317 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000318 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000319 .block_erasers =
320 {
321 {
322 .eraseblocks = { {4 * 1024, 64} },
323 .block_erase = spi_block_erase_20,
324 }, {
325 .eraseblocks = { {32 * 1024, 8} },
326 .block_erase = spi_block_erase_52,
327 }, {
328 .eraseblocks = { {64 * 1024, 4} },
329 .block_erase = spi_block_erase_d8,
330 }, {
331 .eraseblocks = { {256 * 1024, 1} },
332 .block_erase = spi_block_erase_60,
333 }, {
334 .eraseblocks = { {256 * 1024, 1} },
335 .block_erase = spi_block_erase_c7,
336 }
337 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000338 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000339 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000340 },
341
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000342 {
343 .vendor = "Atmel",
344 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000345 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000346 .manufacture_id = ATMEL_ID,
347 .model_id = AT_25DF041A,
348 .total_size = 512,
349 .page_size = 256,
350 .tested = TEST_UNTESTED,
351 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000352 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000353 .block_erasers =
354 {
355 {
356 .eraseblocks = { {4 * 1024, 128} },
357 .block_erase = spi_block_erase_20,
358 }, {
359 .eraseblocks = { {32 * 1024, 16} },
360 .block_erase = spi_block_erase_52,
361 }, {
362 .eraseblocks = { {64 * 1024, 8} },
363 .block_erase = spi_block_erase_d8,
364 }, {
365 .eraseblocks = { {512 * 1024, 1} },
366 .block_erase = spi_block_erase_60,
367 }, {
368 .eraseblocks = { {512 * 1024, 1} },
369 .block_erase = spi_block_erase_c7,
370 }
371 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000372 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000373 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000374 },
375
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000376 {
377 .vendor = "Atmel",
378 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000379 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000380 .manufacture_id = ATMEL_ID,
381 .model_id = AT_25DF081,
382 .total_size = 1024,
383 .page_size = 256,
384 .tested = TEST_UNTESTED,
385 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000386 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000387 .block_erasers =
388 {
389 {
390 .eraseblocks = { {4 * 1024, 256} },
391 .block_erase = spi_block_erase_20,
392 }, {
393 .eraseblocks = { {32 * 1024, 32} },
394 .block_erase = spi_block_erase_52,
395 }, {
396 .eraseblocks = { {64 * 1024, 16} },
397 .block_erase = spi_block_erase_d8,
398 }, {
399 .eraseblocks = { {1024 * 1024, 1} },
400 .block_erase = spi_block_erase_60,
401 }, {
402 .eraseblocks = { {1024 * 1024, 1} },
403 .block_erase = spi_block_erase_c7,
404 }
405 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000406 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000407 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000408 },
409
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000410 {
411 .vendor = "Atmel",
412 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000413 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000414 .manufacture_id = ATMEL_ID,
415 .model_id = AT_25DF161,
416 .total_size = 2048,
417 .page_size = 256,
418 .tested = TEST_UNTESTED,
419 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000420 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000421 .block_erasers =
422 {
423 {
424 .eraseblocks = { {4 * 1024, 512} },
425 .block_erase = spi_block_erase_20,
426 }, {
427 .eraseblocks = { {32 * 1024, 64} },
428 .block_erase = spi_block_erase_52,
429 }, {
430 .eraseblocks = { {64 * 1024, 32} },
431 .block_erase = spi_block_erase_d8,
432 }, {
433 .eraseblocks = { {2 * 1024 * 1024, 1} },
434 .block_erase = spi_block_erase_60,
435 }, {
436 .eraseblocks = { {2 * 1024 * 1024, 1} },
437 .block_erase = spi_block_erase_c7,
438 }
439 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000440 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000441 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000442 },
443
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000444 {
445 .vendor = "Atmel",
446 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000447 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000448 .manufacture_id = ATMEL_ID,
449 .model_id = AT_25DF321,
450 .total_size = 4096,
451 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000452 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000453 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000454 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000455 .block_erasers =
456 {
457 {
458 .eraseblocks = { {4 * 1024, 1024} },
459 .block_erase = spi_block_erase_20,
460 }, {
461 .eraseblocks = { {32 * 1024, 128} },
462 .block_erase = spi_block_erase_52,
463 }, {
464 .eraseblocks = { {64 * 1024, 64} },
465 .block_erase = spi_block_erase_d8,
466 }, {
467 .eraseblocks = { {4 * 1024 * 1024, 1} },
468 .block_erase = spi_block_erase_60,
469 }, {
470 .eraseblocks = { {4 * 1024 * 1024, 1} },
471 .block_erase = spi_block_erase_c7,
472 }
473 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000474 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000475 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000476 },
477
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000478 {
479 .vendor = "Atmel",
480 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000481 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000482 .manufacture_id = ATMEL_ID,
483 .model_id = AT_25DF321A,
484 .total_size = 4096,
485 .page_size = 256,
486 .tested = TEST_UNTESTED,
487 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000488 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000489 .block_erasers =
490 {
491 {
492 .eraseblocks = { {4 * 1024, 1024} },
493 .block_erase = spi_block_erase_20,
494 }, {
495 .eraseblocks = { {32 * 1024, 128} },
496 .block_erase = spi_block_erase_52,
497 }, {
498 .eraseblocks = { {64 * 1024, 64} },
499 .block_erase = spi_block_erase_d8,
500 }, {
501 .eraseblocks = { {4 * 1024 * 1024, 1} },
502 .block_erase = spi_block_erase_60,
503 }, {
504 .eraseblocks = { {4 * 1024 * 1024, 1} },
505 .block_erase = spi_block_erase_c7,
506 }
507 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000508 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000509 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000510 },
511
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000512 {
513 .vendor = "Atmel",
514 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000515 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000516 .manufacture_id = ATMEL_ID,
517 .model_id = AT_25DF641,
518 .total_size = 8192,
519 .page_size = 256,
520 .tested = TEST_UNTESTED,
521 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000522 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000523 .block_erasers =
524 {
525 {
526 .eraseblocks = { {4 * 1024, 2048} },
527 .block_erase = spi_block_erase_20,
528 }, {
529 .eraseblocks = { {32 * 1024, 256} },
530 .block_erase = spi_block_erase_52,
531 }, {
532 .eraseblocks = { {64 * 1024, 128} },
533 .block_erase = spi_block_erase_d8,
534 }, {
535 .eraseblocks = { {8 * 1024 * 1024, 1} },
536 .block_erase = spi_block_erase_60,
537 }, {
538 .eraseblocks = { {8 * 1024 * 1024, 1} },
539 .block_erase = spi_block_erase_c7,
540 }
541 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000542 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000543 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000544 },
545
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000546 {
547 .vendor = "Atmel",
548 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000549 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000550 .manufacture_id = ATMEL_ID,
551 .model_id = AT_25F512B,
552 .total_size = 64,
553 .page_size = 256,
554 .tested = TEST_UNTESTED,
555 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000556 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000557 .block_erasers =
558 {
559 {
560 .eraseblocks = { {4 * 1024, 16} },
561 .block_erase = spi_block_erase_20,
562 }, {
563 .eraseblocks = { {32 * 1024, 2} },
564 .block_erase = spi_block_erase_52,
565 }, {
566 .eraseblocks = { {32 * 1024, 2} },
567 .block_erase = spi_block_erase_d8,
568 }, {
569 .eraseblocks = { {64 * 1024, 1} },
570 .block_erase = spi_block_erase_60,
571 }, {
572 .eraseblocks = { {64 * 1024, 1} },
573 .block_erase = spi_block_erase_c7,
574 }
575 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000576 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000577 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000578 },
579
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000580 {
581 .vendor = "Atmel",
582 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000583 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000584 .manufacture_id = ATMEL_ID,
585 .model_id = AT_25FS010,
586 .total_size = 128,
587 .page_size = 256,
588 .tested = TEST_UNTESTED,
589 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000590 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000591 .block_erasers =
592 {
593 {
594 .eraseblocks = { {4 * 1024, 32} },
595 .block_erase = spi_block_erase_20,
596 }, {
597 .eraseblocks = { {32 * 1024, 4} },
598 .block_erase = spi_block_erase_52,
599 }, {
600 .eraseblocks = { {32 * 1024, 4} },
601 .block_erase = spi_block_erase_d8,
602 }, {
603 .eraseblocks = { {128 * 1024, 1} },
604 .block_erase = spi_block_erase_60,
605 }, {
606 .eraseblocks = { {128 * 1024, 1} },
607 .block_erase = spi_block_erase_c7,
608 }
609 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000610 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000611 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000612 },
613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000614 {
615 .vendor = "Atmel",
616 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000617 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000618 .manufacture_id = ATMEL_ID,
619 .model_id = AT_25FS040,
620 .total_size = 512,
621 .page_size = 256,
622 .tested = TEST_UNTESTED,
623 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000624 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000625 .block_erasers =
626 {
627 {
628 .eraseblocks = { {4 * 1024, 128} },
629 .block_erase = spi_block_erase_20,
630 }, {
631 .eraseblocks = { {64 * 1024, 8} },
632 .block_erase = spi_block_erase_52,
633 }, {
634 .eraseblocks = { {64 * 1024, 8} },
635 .block_erase = spi_block_erase_d8,
636 }, {
637 .eraseblocks = { {512 * 1024, 1} },
638 .block_erase = spi_block_erase_60,
639 }, {
640 .eraseblocks = { {512 * 1024, 1} },
641 .block_erase = spi_block_erase_c7,
642 }
643 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000644 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000645 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000646 },
647
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000648 {
649 .vendor = "Atmel",
650 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000651 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000652 .manufacture_id = ATMEL_ID,
653 .model_id = AT_26DF041,
654 .total_size = 512,
655 .page_size = 256,
656 .tested = TEST_UNTESTED,
657 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000658 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000659 .block_erasers =
660 {
661 {
662 .eraseblocks = { {4 * 1024, 128} },
663 .block_erase = spi_block_erase_20,
664 }
665 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000666 .write = NULL /* Incompatible Page write */,
667 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000668 },
669
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000670 {
671 .vendor = "Atmel",
672 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000673 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000674 .manufacture_id = ATMEL_ID,
675 .model_id = AT_26DF081A,
676 .total_size = 1024,
677 .page_size = 256,
678 .tested = TEST_UNTESTED,
679 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000680 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000681 .block_erasers =
682 {
683 {
684 .eraseblocks = { {4 * 1024, 256} },
685 .block_erase = spi_block_erase_20,
686 }, {
687 .eraseblocks = { {32 * 1024, 32} },
688 .block_erase = spi_block_erase_52,
689 }, {
690 .eraseblocks = { {64 * 1024, 16} },
691 .block_erase = spi_block_erase_d8,
692 }, {
693 .eraseblocks = { {1024 * 1024, 1} },
694 .block_erase = spi_block_erase_60,
695 }, {
696 .eraseblocks = { {1024 * 1024, 1} },
697 .block_erase = spi_block_erase_c7,
698 }
699 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000700 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000701 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000702 },
703
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000704 {
705 .vendor = "Atmel",
706 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000707 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000708 .manufacture_id = ATMEL_ID,
709 .model_id = AT_26DF161,
710 .total_size = 2048,
711 .page_size = 256,
712 .tested = TEST_UNTESTED,
713 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000714 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000715 .block_erasers =
716 {
717 {
718 .eraseblocks = { {4 * 1024, 512} },
719 .block_erase = spi_block_erase_20,
720 }, {
721 .eraseblocks = { {32 * 1024, 64} },
722 .block_erase = spi_block_erase_52,
723 }, {
724 .eraseblocks = { {64 * 1024, 32} },
725 .block_erase = spi_block_erase_d8,
726 }, {
727 .eraseblocks = { {2 * 1024 * 1024, 1} },
728 .block_erase = spi_block_erase_60,
729 }, {
730 .eraseblocks = { {2 * 1024 * 1024, 1} },
731 .block_erase = spi_block_erase_c7,
732 }
733 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000734 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000735 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000736 },
737
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000738 {
739 .vendor = "Atmel",
740 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000741 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000742 .manufacture_id = ATMEL_ID,
743 .model_id = AT_26DF161A,
744 .total_size = 2048,
745 .page_size = 256,
746 .tested = TEST_UNTESTED,
747 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000748 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000749 .block_erasers =
750 {
751 {
752 .eraseblocks = { {4 * 1024, 512} },
753 .block_erase = spi_block_erase_20,
754 }, {
755 .eraseblocks = { {32 * 1024, 64} },
756 .block_erase = spi_block_erase_52,
757 }, {
758 .eraseblocks = { {64 * 1024, 32} },
759 .block_erase = spi_block_erase_d8,
760 }, {
761 .eraseblocks = { {2 * 1024 * 1024, 1} },
762 .block_erase = spi_block_erase_60,
763 }, {
764 .eraseblocks = { {2 * 1024 * 1024, 1} },
765 .block_erase = spi_block_erase_c7,
766 }
767 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000768 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000769 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000770 },
771
772 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000773 /*{
774 .vendor = "Atmel",
775 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000776 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000777 .manufacture_id = ATMEL_ID,
778 .model_id = AT_26DF321,
779 .total_size = 4096,
780 .page_size = 256,
781 .tested = TEST_UNTESTED,
782 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000783 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000784 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000785 .read = spi_chip_read,
786 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000787
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000788 {
789 .vendor = "Atmel",
790 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000791 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000792 .manufacture_id = ATMEL_ID,
793 .model_id = AT_26F004,
794 .total_size = 512,
795 .page_size = 256,
796 .tested = TEST_UNTESTED,
797 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000798 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000799 .block_erasers =
800 {
801 {
802 .eraseblocks = { {4 * 1024, 128} },
803 .block_erase = spi_block_erase_20,
804 }, {
805 .eraseblocks = { {32 * 1024, 16} },
806 .block_erase = spi_block_erase_52,
807 }, {
808 .eraseblocks = { {64 * 1024, 8} },
809 .block_erase = spi_block_erase_d8,
810 }, {
811 .eraseblocks = { {512 * 1024, 1} },
812 .block_erase = spi_block_erase_60,
813 }, {
814 .eraseblocks = { {512 * 1024, 1} },
815 .block_erase = spi_block_erase_c7,
816 }
817 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000818 .write = NULL /* Incompatible Page write */,
819 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000820 },
821
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000822 {
823 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000824 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000825 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000826 .manufacture_id = ATMEL_ID,
827 .model_id = AT_29C512,
828 .total_size = 64,
829 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000830 .feature_bits = FEATURE_LONG_RESET,
831 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000832 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000833 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000834 .block_erasers =
835 {
836 {
837 .eraseblocks = { {64 * 1024, 1} },
838 .block_erase = erase_chip_block_jedec,
839 }
840 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000841 .write = write_jedec,
842 .read = read_memmapped,
843
844 },
845
846 {
847 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000848 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000849 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000850 .manufacture_id = ATMEL_ID,
851 .model_id = AT_29C010A,
852 .total_size = 128,
853 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000854 .feature_bits = FEATURE_LONG_RESET,
855 .tested = TEST_UNTESTED,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000856 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000857 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000858 .block_erasers =
859 {
860 {
861 .eraseblocks = { {128 * 1024, 1} },
862 .block_erase = erase_chip_block_jedec,
863 }
864 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000865 .write = write_jedec, /* FIXME */
866 .read = read_memmapped,
867 },
868
869 {
870 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000871 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000872 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000873 .manufacture_id = ATMEL_ID,
874 .model_id = AT_29C020,
875 .total_size = 256,
876 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000877 .feature_bits = FEATURE_LONG_RESET,
878 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000879 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000880 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000881 .block_erasers =
882 {
883 {
884 .eraseblocks = { {256 * 1024, 1} },
885 .block_erase = erase_chip_block_jedec,
886 }
887 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000888 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000889 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000890 },
891
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000892 {
893 .vendor = "Atmel",
894 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000895 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000896 .manufacture_id = ATMEL_ID,
897 .model_id = AT_29C040A,
898 .total_size = 512,
899 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000900 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000901 .tested = TEST_UNTESTED,
902 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000903 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000904 .block_erasers =
905 {
906 {
907 .eraseblocks = { {512 * 1024, 1} },
908 .block_erase = erase_chip_block_jedec,
909 }
910 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000911 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000912 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000913 },
914
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000915 {
916 .vendor = "Atmel",
917 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000918 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000919 .manufacture_id = ATMEL_ID,
920 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000921 .total_size = 16896 /* No power of two sizes */,
922 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000923 .tested = TEST_BAD_READ,
924 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000925 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000926 .write = NULL /* Incompatible Page write */,
927 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000928 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000929
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000930 {
931 .vendor = "Atmel",
932 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000933 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000934 .manufacture_id = ATMEL_ID,
935 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000936 .total_size = 128 /* Size can only be determined from status register */,
937 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000938 .tested = TEST_BAD_READ,
939 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000940 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000941 .write = NULL,
942 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000943 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000944
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000945 {
946 .vendor = "Atmel",
947 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000948 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000949 .manufacture_id = ATMEL_ID,
950 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000951 .total_size = 256 /* Size can only be determined from status register */,
952 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000953 .tested = TEST_BAD_READ,
954 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000955 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000956 .write = NULL,
957 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000958 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000959
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000960 {
961 .vendor = "Atmel",
962 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000963 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000964 .manufacture_id = ATMEL_ID,
965 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000966 .total_size = 512 /* Size can only be determined from status register */,
967 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000968 .tested = TEST_BAD_READ,
969 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000970 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000971 .write = NULL,
972 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000973 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000974
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000975 {
976 .vendor = "Atmel",
977 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000978 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000979 .manufacture_id = ATMEL_ID,
980 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000981 .total_size = 1024 /* Size can only be determined from status register */,
982 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000983 .tested = TEST_BAD_READ,
984 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000985 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000986 .write = NULL,
987 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000988 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000990 {
991 .vendor = "Atmel",
992 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000993 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000994 .manufacture_id = ATMEL_ID,
995 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000996 .total_size = 2048 /* Size can only be determined from status register */,
997 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000998 .tested = TEST_BAD_READ,
999 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001000 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001001 .write = NULL,
1002 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001003 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001004
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001005 {
1006 .vendor = "Atmel",
1007 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001008 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001009 .manufacture_id = ATMEL_ID,
1010 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001011 .total_size = 4224 /* No power of two sizes */,
1012 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001013 .tested = TEST_BAD_READ,
1014 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001015 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001016 .write = NULL,
1017 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001018 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001019
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001020 {
1021 .vendor = "Atmel",
1022 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001023 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001024 .manufacture_id = ATMEL_ID,
1025 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001026 .total_size = 4096 /* Size can only be determined from status register */,
1027 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001028 .tested = TEST_BAD_READ,
1029 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001030 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001031 .write = NULL,
1032 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001033 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001034
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001035 {
1036 .vendor = "Atmel",
1037 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001038 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001039 .manufacture_id = ATMEL_ID,
1040 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001041 .total_size = 8192 /* Size can only be determined from status register */,
1042 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001043 .tested = TEST_BAD_READ,
1044 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001045 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001046 .write = NULL,
1047 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001048 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001049
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001050 {
1051 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001052 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001053 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001054 .manufacture_id = ATMEL_ID,
1055 .model_id = AT_49BV512,
1056 .total_size = 64,
1057 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001058 .feature_bits = FEATURE_EITHER_RESET,
1059 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001060 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001061 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001062 .block_erasers =
1063 {
1064 {
1065 .eraseblocks = { {64 * 1024, 1} },
1066 .block_erase = erase_chip_block_jedec,
1067 }
1068 },
Sean Nelson35727f72010-01-28 23:55:12 +00001069 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001070 .read = read_memmapped,
1071 },
1072
1073 {
1074 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001075 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001076 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001077 .manufacture_id = ATMEL_ID,
1078 .model_id = AT_49F002N,
1079 .total_size = 256,
1080 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001081 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001082 .tested = TEST_UNTESTED,
1083 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001084 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001085 .block_erasers =
1086 {
1087 {
1088 .eraseblocks = {
1089 {16 * 1024, 1},
1090 {8 * 1024, 2},
1091 {96 * 1024, 1},
1092 {128 * 1024, 1},
1093 },
1094 .block_erase = erase_sector_jedec,
1095 }, {
1096 .eraseblocks = { {256 * 1024, 1} },
1097 .block_erase = erase_chip_block_jedec,
1098 }
1099 },
Sean Nelson35727f72010-01-28 23:55:12 +00001100 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001101 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001102 },
1103
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001104 {
1105 .vendor = "Atmel",
1106 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001107 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001108 .manufacture_id = ATMEL_ID,
1109 .model_id = AT_49F002NT,
1110 .total_size = 256,
1111 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001112 .feature_bits = FEATURE_EITHER_RESET,
1113 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001114 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001115 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001116 .block_erasers =
1117 {
1118 {
1119 .eraseblocks = {
1120 {128 * 1024, 1},
1121 {96 * 1024, 1},
1122 {8 * 1024, 2},
1123 {16 * 1024, 1},
1124 },
1125 .block_erase = erase_sector_jedec,
1126 }, {
1127 .eraseblocks = { {256 * 1024, 1} },
1128 .block_erase = erase_chip_block_jedec,
1129 }
1130 },
Sean Nelson35727f72010-01-28 23:55:12 +00001131 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001132 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001133 },
1134
Sean Nelson54596372010-01-09 05:30:14 +00001135 /* The next two chip definitions have top/bottom boot blocks, but has no
1136 device differenciation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001137 {
1138 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001139 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001140 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001141 .manufacture_id = AMIC_ID,
1142 .model_id = AMIC_A25L40P,
1143 .total_size = 512,
1144 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001145 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001146 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001147 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001148 .block_erasers =
1149 {
1150 {
1151 .eraseblocks = {
1152 {64 * 1024, 7},
1153 {32 * 1024, 1},
1154 {16 * 1024, 1},
1155 {8 * 1024, 1},
1156 {4 * 1024, 2},
1157 },
1158 .block_erase = spi_block_erase_d8,
1159 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001160 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001161 .block_erase = spi_block_erase_c7,
1162 }
1163 },
1164 .write = spi_chip_write_256,
1165 .read = spi_chip_read,
1166 },
1167
1168 {
1169 .vendor = "AMIC",
1170 .name = "A25L40PU",
1171 .bustype = CHIP_BUSTYPE_SPI,
1172 .manufacture_id = AMIC_ID,
1173 .model_id = AMIC_A25L40P,
1174 .total_size = 512,
1175 .page_size = 256,
1176 .tested = TEST_OK_PRW,
1177 .probe = probe_spi_rdid4,
1178 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001179 .block_erasers =
1180 {
1181 {
1182 .eraseblocks = {
1183 {4 * 1024, 2},
1184 {8 * 1024, 1},
1185 {16 * 1024, 1},
1186 {32 * 1024, 1},
1187 {64 * 1024, 7},
1188 },
1189 .block_erase = spi_block_erase_d8,
1190 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001192 .block_erase = spi_block_erase_c7,
1193 }
1194 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001195 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001196 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001197 },
1198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001199 {
1200 .vendor = "AMIC",
1201 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001202 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001203 .manufacture_id = AMIC_ID_NOPREFIX,
1204 .model_id = AMIC_A29002B,
1205 .total_size = 256,
1206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001208 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001209 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001210 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001211 .block_erasers =
1212 {
1213 {
1214 .eraseblocks = {
1215 {16 * 1024, 1},
1216 {8 * 1024, 2},
1217 {32 * 1024, 1},
1218 {64 * 1024, 3},
1219 },
Sean Nelson35727f72010-01-28 23:55:12 +00001220 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001221 }, {
1222 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001223 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001224 },
1225 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001226 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001227 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001228 },
1229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001230 {
1231 .vendor = "AMIC",
1232 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001233 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001234 .manufacture_id = AMIC_ID_NOPREFIX,
1235 .model_id = AMIC_A29002T,
1236 .total_size = 256,
1237 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001238 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1239 .tested = TEST_UNTESTED,
1240 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001241 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001242 .block_erasers =
1243 {
1244 {
1245 .eraseblocks = {
1246 {64 * 1024, 3},
1247 {32 * 1024, 1},
1248 {8 * 1024, 2},
1249 {16 * 1024, 1},
1250 },
Sean Nelson35727f72010-01-28 23:55:12 +00001251 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001252 }, {
1253 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001254 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001255 },
1256 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001257 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001258 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001259 },
1260
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001261 {
1262 .vendor = "AMIC",
1263 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001264 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001265 .manufacture_id = AMIC_ID_NOPREFIX,
1266 .model_id = AMIC_A29040B,
1267 .total_size = 512,
1268 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001269 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1270 .tested = TEST_UNTESTED,
1271 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001272 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001273 .block_erasers =
1274 {
1275 {
1276 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001277 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001278 }, {
1279 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001280 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001281 },
1282 },
Sean Nelson35727f72010-01-28 23:55:12 +00001283 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001284 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001285 },
1286
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001287 {
1288 .vendor = "AMIC",
1289 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001290 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001291 .manufacture_id = AMIC_ID_NOPREFIX,
1292 .model_id = AMIC_A49LF040A,
1293 .total_size = 512,
1294 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001295 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
1296 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001297 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001298 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001299 .block_erasers =
1300 {
1301 {
1302 .eraseblocks = { {64 * 1024, 8} },
1303 .block_erase = erase_block_jedec,
1304 }, {
1305 .eraseblocks = { {512 * 1024, 1} },
1306 .block_erase = erase_chip_block_jedec,
1307 }
1308 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001309 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001310 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001311 },
1312
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001313 {
1314 .vendor = "EMST",
1315 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001316 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001317 .manufacture_id = EMST_ID,
1318 .model_id = EMST_F49B002UA,
1319 .total_size = 256,
1320 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001321 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001322 .tested = TEST_UNTESTED,
1323 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001324 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001325 .block_erasers =
1326 {
1327 {
1328 .eraseblocks = {
1329 {128 * 1024, 1},
1330 {96 * 1024, 1},
1331 {8 * 1024, 2},
1332 {16 * 1024, 1},
1333 },
1334 .block_erase = erase_sector_jedec,
1335 }, {
1336 .eraseblocks = { {256 * 1024, 1} },
1337 .block_erase = erase_chip_block_jedec,
1338 }
1339 },
Sean Nelson35727f72010-01-28 23:55:12 +00001340 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001341 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001342 },
1343
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001344 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001345 .vendor = "Eon",
1346 .name = "EN25B05",
1347 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001348 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001349 .model_id = EN_25B05,
1350 .total_size = 64,
1351 .page_size = 256,
1352 .tested = TEST_UNTESTED,
1353 .probe = probe_spi_rdid,
1354 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001355 .block_erasers =
1356 {
1357 {
1358 .eraseblocks = {
1359 {4 * 1024, 2},
1360 {8 * 1024, 1},
1361 {16 * 1024, 1},
1362 {32 * 1024, 1},
1363 },
1364 .block_erase = spi_block_erase_d8,
1365 }, {
1366 .eraseblocks = { {64 * 1024, 1} },
1367 .block_erase = spi_block_erase_c7,
1368 }
1369 },
1370 .write = spi_chip_write_256,
1371 .read = spi_chip_read,
1372 },
1373
1374 {
1375 .vendor = "Eon",
1376 .name = "EN25B05T",
1377 .bustype = CHIP_BUSTYPE_SPI,
1378 .manufacture_id = EON_ID_NOPREFIX,
1379 .model_id = EN_25B05,
1380 .total_size = 64,
1381 .page_size = 256,
1382 .tested = TEST_UNTESTED,
1383 .probe = probe_spi_rdid,
1384 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001385 .block_erasers =
1386 {
1387 {
1388 .eraseblocks = {
1389 {32 * 1024, 1},
1390 {16 * 1024, 1},
1391 {8 * 1024, 1},
1392 {4 * 1024, 2},
1393 },
1394 .block_erase = spi_block_erase_d8,
1395 }, {
1396 .eraseblocks = { {64 * 1024, 1} },
1397 .block_erase = spi_block_erase_c7,
1398 }
1399 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001400 .write = spi_chip_write_256,
1401 .read = spi_chip_read,
1402 },
1403
1404 {
1405 .vendor = "Eon",
1406 .name = "EN25B10",
1407 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001408 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001409 .model_id = EN_25B10,
1410 .total_size = 128,
1411 .page_size = 256,
1412 .tested = TEST_UNTESTED,
1413 .probe = probe_spi_rdid,
1414 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001415 .block_erasers =
1416 {
1417 {
1418 .eraseblocks = {
1419 {4 * 1024, 2},
1420 {8 * 1024, 1},
1421 {16 * 1024, 1},
1422 {32 * 1024, 3},
1423 },
1424 .block_erase = spi_block_erase_d8,
1425 }, {
1426 .eraseblocks = { {128 * 1024, 1} },
1427 .block_erase = spi_block_erase_c7,
1428 }
1429 },
1430 .write = spi_chip_write_256,
1431 .read = spi_chip_read,
1432 },
1433
1434 {
1435 .vendor = "Eon",
1436 .name = "EN25B10T",
1437 .bustype = CHIP_BUSTYPE_SPI,
1438 .manufacture_id = EON_ID_NOPREFIX,
1439 .model_id = EN_25B10,
1440 .total_size = 128,
1441 .page_size = 256,
1442 .tested = TEST_UNTESTED,
1443 .probe = probe_spi_rdid,
1444 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001445 .block_erasers =
1446 {
1447 {
1448 .eraseblocks = {
1449 {32 * 1024, 3},
1450 {16 * 1024, 1},
1451 {8 * 1024, 1},
1452 {4 * 1024, 2},
1453 },
1454 .block_erase = spi_block_erase_d8,
1455 }, {
1456 .eraseblocks = { {128 * 1024, 1} },
1457 .block_erase = spi_block_erase_c7,
1458 }
1459 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001460 .write = spi_chip_write_256,
1461 .read = spi_chip_read,
1462 },
1463
1464 {
1465 .vendor = "Eon",
1466 .name = "EN25B20",
1467 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001468 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001469 .model_id = EN_25B20,
1470 .total_size = 256,
1471 .page_size = 256,
1472 .tested = TEST_UNTESTED,
1473 .probe = probe_spi_rdid,
1474 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001475 .block_erasers =
1476 {
1477 {
1478 .eraseblocks = {
1479 {4 * 1024, 2},
1480 {8 * 1024, 1},
1481 {16 * 1024, 1},
1482 {32 * 1024, 1},
1483 {64 * 1024, 3}
1484 },
1485 .block_erase = spi_block_erase_d8,
1486 }, {
1487 .eraseblocks = { {256 * 1024, 1} },
1488 .block_erase = spi_block_erase_c7,
1489 }
1490 },
1491 .write = spi_chip_write_256,
1492 .read = spi_chip_read,
1493 },
1494
1495 {
1496 .vendor = "Eon",
1497 .name = "EN25B20T",
1498 .bustype = CHIP_BUSTYPE_SPI,
1499 .manufacture_id = EON_ID_NOPREFIX,
1500 .model_id = EN_25B20,
1501 .total_size = 256,
1502 .page_size = 256,
1503 .tested = TEST_UNTESTED,
1504 .probe = probe_spi_rdid,
1505 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001506 .block_erasers =
1507 {
1508 {
1509 .eraseblocks = {
1510 {64 * 1024, 3},
1511 {32 * 1024, 1},
1512 {16 * 1024, 1},
1513 {8 * 1024, 1},
1514 {4 * 1024, 2},
1515 },
1516 .block_erase = spi_block_erase_d8,
1517 }, {
1518 .eraseblocks = { {256 * 1024, 1} },
1519 .block_erase = spi_block_erase_c7,
1520 }
1521 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001522 .write = spi_chip_write_256,
1523 .read = spi_chip_read,
1524 },
1525
1526 {
1527 .vendor = "Eon",
1528 .name = "EN25B40",
1529 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001530 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001531 .model_id = EN_25B40,
1532 .total_size = 512,
1533 .page_size = 256,
1534 .tested = TEST_UNTESTED,
1535 .probe = probe_spi_rdid,
1536 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001537 .block_erasers =
1538 {
1539 {
1540 .eraseblocks = {
1541 {4 * 1024, 2},
1542 {8 * 1024, 1},
1543 {16 * 1024, 1},
1544 {32 * 1024, 1},
1545 {64 * 1024, 7}
1546 },
1547 .block_erase = spi_block_erase_d8,
1548 }, {
1549 .eraseblocks = { {512 * 1024, 1} },
1550 .block_erase = spi_block_erase_c7,
1551 }
1552 },
1553 .write = spi_chip_write_256,
1554 .read = spi_chip_read,
1555 },
1556
1557 {
1558 .vendor = "Eon",
1559 .name = "EN25B40T",
1560 .bustype = CHIP_BUSTYPE_SPI,
1561 .manufacture_id = EON_ID_NOPREFIX,
1562 .model_id = EN_25B40,
1563 .total_size = 512,
1564 .page_size = 256,
1565 .tested = TEST_UNTESTED,
1566 .probe = probe_spi_rdid,
1567 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001568 .block_erasers =
1569 {
1570 {
1571 .eraseblocks = {
1572 {64 * 1024, 7},
1573 {32 * 1024, 1},
1574 {16 * 1024, 1},
1575 {8 * 1024, 1},
1576 {4 * 1024, 2},
1577 },
1578 .block_erase = spi_block_erase_d8,
1579 }, {
1580 .eraseblocks = { {512 * 1024, 1} },
1581 .block_erase = spi_block_erase_c7,
1582 }
1583 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001584 .write = spi_chip_write_256,
1585 .read = spi_chip_read,
1586 },
1587
1588 {
1589 .vendor = "Eon",
1590 .name = "EN25B80",
1591 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001592 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001593 .model_id = EN_25B80,
1594 .total_size = 1024,
1595 .page_size = 256,
1596 .tested = TEST_UNTESTED,
1597 .probe = probe_spi_rdid,
1598 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001599 .block_erasers =
1600 {
1601 {
1602 .eraseblocks = {
1603 {4 * 1024, 2},
1604 {8 * 1024, 1},
1605 {16 * 1024, 1},
1606 {32 * 1024, 1},
1607 {64 * 1024, 15}
1608 },
1609 .block_erase = spi_block_erase_d8,
1610 }, {
1611 .eraseblocks = { {1024 * 1024, 1} },
1612 .block_erase = spi_block_erase_c7,
1613 }
1614 },
1615 .write = spi_chip_write_256,
1616 .read = spi_chip_read,
1617 },
1618
1619 {
1620 .vendor = "Eon",
1621 .name = "EN25B80T",
1622 .bustype = CHIP_BUSTYPE_SPI,
1623 .manufacture_id = EON_ID_NOPREFIX,
1624 .model_id = EN_25B80,
1625 .total_size = 1024,
1626 .page_size = 256,
1627 .tested = TEST_UNTESTED,
1628 .probe = probe_spi_rdid,
1629 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001630 .block_erasers =
1631 {
1632 {
1633 .eraseblocks = {
1634 {64 * 1024, 15},
1635 {32 * 1024, 1},
1636 {16 * 1024, 1},
1637 {8 * 1024, 1},
1638 {4 * 1024, 2},
1639 },
1640 .block_erase = spi_block_erase_d8,
1641 }, {
1642 .eraseblocks = { {1024 * 1024, 1} },
1643 .block_erase = spi_block_erase_c7,
1644 }
1645 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001646 .write = spi_chip_write_256,
1647 .read = spi_chip_read,
1648 },
1649
1650 {
1651 .vendor = "Eon",
1652 .name = "EN25B16",
1653 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001654 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001655 .model_id = EN_25B16,
1656 .total_size = 2048,
1657 .page_size = 256,
1658 .tested = TEST_UNTESTED,
1659 .probe = probe_spi_rdid,
1660 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001661 .block_erasers =
1662 {
1663 {
1664 .eraseblocks = {
1665 {4 * 1024, 2},
1666 {8 * 1024, 1},
1667 {16 * 1024, 1},
1668 {32 * 1024, 1},
1669 {64 * 1024, 31},
1670 },
1671 .block_erase = spi_block_erase_d8,
1672 }, {
1673 .eraseblocks = { {2 * 1024 * 1024, 1} },
1674 .block_erase = spi_block_erase_c7,
1675 }
1676 },
1677 .write = spi_chip_write_256,
1678 .read = spi_chip_read,
1679 },
1680
1681 {
1682 .vendor = "Eon",
1683 .name = "EN25B16T",
1684 .bustype = CHIP_BUSTYPE_SPI,
1685 .manufacture_id = EON_ID_NOPREFIX,
1686 .model_id = EN_25B16,
1687 .total_size = 2048,
1688 .page_size = 256,
1689 .tested = TEST_UNTESTED,
1690 .probe = probe_spi_rdid,
1691 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001692 .block_erasers =
1693 {
1694 {
1695 .eraseblocks = {
1696 {64 * 1024, 31},
1697 {32 * 1024, 1},
1698 {16 * 1024, 1},
1699 {8 * 1024, 1},
1700 {4 * 1024, 2},
1701 },
1702 .block_erase = spi_block_erase_d8,
1703 }, {
1704 .eraseblocks = { {2 * 1024 * 1024, 1} },
1705 .block_erase = spi_block_erase_c7,
1706 }
1707 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001708 .write = spi_chip_write_256,
1709 .read = spi_chip_read,
1710 },
1711
1712 {
1713 .vendor = "Eon",
1714 .name = "EN25B32",
1715 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001716 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001717 .model_id = EN_25B32,
1718 .total_size = 4096,
1719 .page_size = 256,
1720 .tested = TEST_UNTESTED,
1721 .probe = probe_spi_rdid,
1722 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001723 .block_erasers =
1724 {
1725 {
1726 .eraseblocks = {
1727 {4 * 1024, 2},
1728 {8 * 1024, 1},
1729 {16 * 1024, 1},
1730 {32 * 1024, 1},
1731 {64 * 1024, 63},
1732 },
1733 .block_erase = spi_block_erase_d8,
1734 }, {
1735 .eraseblocks = { {4 * 1024 * 1024, 1} },
1736 .block_erase = spi_block_erase_c7,
1737 }
1738 },
1739 .write = spi_chip_write_256,
1740 .read = spi_chip_read,
1741 },
1742
1743 {
1744 .vendor = "Eon",
1745 .name = "EN25B32T",
1746 .bustype = CHIP_BUSTYPE_SPI,
1747 .manufacture_id = EON_ID_NOPREFIX,
1748 .model_id = EN_25B32,
1749 .total_size = 4096,
1750 .page_size = 256,
1751 .tested = TEST_UNTESTED,
1752 .probe = probe_spi_rdid,
1753 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001754 .block_erasers =
1755 {
1756 {
1757 .eraseblocks = {
1758 {64 * 1024, 63},
1759 {32 * 1024, 1},
1760 {16 * 1024, 1},
1761 {8 * 1024, 1},
1762 {4 * 1024, 2},
1763 },
1764 .block_erase = spi_block_erase_d8,
1765 }, {
1766 .eraseblocks = { {4 * 1024 * 1024, 1} },
1767 .block_erase = spi_block_erase_c7,
1768 }
1769 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001770 .write = spi_chip_write_256,
1771 .read = spi_chip_read,
1772 },
1773
1774 {
1775 .vendor = "Eon",
1776 .name = "EN25B64",
1777 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001778 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001779 .model_id = EN_25B64,
1780 .total_size = 8192,
1781 .page_size = 256,
1782 .tested = TEST_UNTESTED,
1783 .probe = probe_spi_rdid,
1784 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001785 .block_erasers =
1786 {
1787 {
1788 .eraseblocks = {
1789 {4 * 1024, 2},
1790 {8 * 1024, 1},
1791 {16 * 1024, 1},
1792 {32 * 1024, 1},
1793 {64 * 1024, 127},
1794 },
1795 .block_erase = spi_block_erase_d8,
1796 }, {
1797 .eraseblocks = { {8 * 1024 * 1024, 1} },
1798 .block_erase = spi_block_erase_c7,
1799 }
1800 },
1801 .write = spi_chip_write_256,
1802 .read = spi_chip_read,
1803 },
1804
1805 {
1806 .vendor = "Eon",
1807 .name = "EN25B64T",
1808 .bustype = CHIP_BUSTYPE_SPI,
1809 .manufacture_id = EON_ID_NOPREFIX,
1810 .model_id = EN_25B64,
1811 .total_size = 8192,
1812 .page_size = 256,
1813 .tested = TEST_UNTESTED,
1814 .probe = probe_spi_rdid,
1815 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001816 .block_erasers =
1817 {
1818 {
1819 .eraseblocks = {
1820 {64 * 1024, 127},
1821 {32 * 1024, 1},
1822 {16 * 1024, 1},
1823 {8 * 1024, 1},
1824 {4 * 1024, 2},
1825 },
1826 .block_erase = spi_block_erase_d8,
1827 }, {
1828 .eraseblocks = { {8 * 1024 * 1024, 1} },
1829 .block_erase = spi_block_erase_c7,
1830 }
1831 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001832 .write = spi_chip_write_256,
1833 .read = spi_chip_read,
1834 },
1835
1836 {
1837 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001838 .name = "EN25D16",
1839 .bustype = CHIP_BUSTYPE_SPI,
1840 .manufacture_id = EON_ID_NOPREFIX,
1841 .model_id = EN_25D16,
1842 .total_size = 2048,
1843 .page_size = 256,
1844 .tested = TEST_UNTESTED,
1845 .probe = probe_spi_rdid,
1846 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001847 .block_erasers =
1848 {
1849 {
1850 .eraseblocks = { {4 * 1024, 512} },
1851 .block_erase = spi_block_erase_20,
1852 }, {
1853 .eraseblocks = { {64 * 1024, 32} },
1854 .block_erase = spi_block_erase_d8,
1855 }, {
1856 .eraseblocks = { {64 * 1024, 32} },
1857 .block_erase = spi_block_erase_52,
1858 }, {
1859 .eraseblocks = { {2 * 1024 * 1024, 1} },
1860 .block_erase = spi_block_erase_60,
1861 }, {
1862 .eraseblocks = { {2 * 1024 * 1024, 1} },
1863 .block_erase = spi_block_erase_c7,
1864 }
1865 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001866 .write = spi_chip_write_256,
1867 .read = spi_chip_read,
1868 },
1869
1870 {
1871 .vendor = "Eon",
1872 .name = "EN25F05",
1873 .bustype = CHIP_BUSTYPE_SPI,
1874 .manufacture_id = EON_ID_NOPREFIX,
1875 .model_id = EN_25F05,
1876 .total_size = 64,
1877 .page_size = 256,
1878 .tested = TEST_UNTESTED,
1879 .probe = probe_spi_rdid,
1880 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001881 .block_erasers =
1882 {
1883 {
1884 .eraseblocks = { {4 * 1024, 16} },
1885 .block_erase = spi_block_erase_20,
1886 }, {
1887 .eraseblocks = { {32 * 1024, 2} },
1888 .block_erase = spi_block_erase_d8,
1889 }, {
1890 .eraseblocks = { {32 * 1024, 2} },
1891 .block_erase = spi_block_erase_52,
1892 }, {
1893 .eraseblocks = { {64 * 1024, 1} },
1894 .block_erase = spi_block_erase_60,
1895 }, {
1896 .eraseblocks = { {64 * 1024, 1} },
1897 .block_erase = spi_block_erase_c7,
1898 }
1899 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001900 .write = spi_chip_write_256,
1901 .read = spi_chip_read,
1902 },
1903
1904 {
1905 .vendor = "Eon",
1906 .name = "EN25F10",
1907 .bustype = CHIP_BUSTYPE_SPI,
1908 .manufacture_id = EON_ID_NOPREFIX,
1909 .model_id = EN_25F10,
1910 .total_size = 128,
1911 .page_size = 256,
1912 .tested = TEST_UNTESTED,
1913 .probe = probe_spi_rdid,
1914 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001915 .block_erasers =
1916 {
1917 {
1918 .eraseblocks = { {4 * 1024, 32} },
1919 .block_erase = spi_block_erase_20,
1920 }, {
1921 .eraseblocks = { {32 * 1024, 4} },
1922 .block_erase = spi_block_erase_d8,
1923 }, {
1924 .eraseblocks = { {32 * 1024, 4} },
1925 .block_erase = spi_block_erase_52,
1926 }, {
1927 .eraseblocks = { {128 * 1024, 1} },
1928 .block_erase = spi_block_erase_60,
1929 }, {
1930 .eraseblocks = { {128 * 1024, 1} },
1931 .block_erase = spi_block_erase_c7,
1932 }
1933 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001934 .write = spi_chip_write_256,
1935 .read = spi_chip_read,
1936 },
1937
1938 {
1939 .vendor = "Eon",
1940 .name = "EN25F20",
1941 .bustype = CHIP_BUSTYPE_SPI,
1942 .manufacture_id = EON_ID_NOPREFIX,
1943 .model_id = EN_25F20,
1944 .total_size = 256,
1945 .page_size = 256,
1946 .tested = TEST_UNTESTED,
1947 .probe = probe_spi_rdid,
1948 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001949 .block_erasers =
1950 {
1951 {
1952 .eraseblocks = { {4 * 1024, 64} },
1953 .block_erase = spi_block_erase_20,
1954 }, {
1955 .eraseblocks = { {64 * 1024, 4} },
1956 .block_erase = spi_block_erase_d8,
1957 }, {
1958 .eraseblocks = { {64 * 1024, 4} },
1959 .block_erase = spi_block_erase_52,
1960 }, {
1961 .eraseblocks = { {256 * 1024, 1} },
1962 .block_erase = spi_block_erase_60,
1963 }, {
1964 .eraseblocks = { {256 * 1024, 1} },
1965 .block_erase = spi_block_erase_c7,
1966 }
1967 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001968 .write = spi_chip_write_256,
1969 .read = spi_chip_read,
1970 },
1971
1972 {
1973 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001974 .name = "EN25F40",
1975 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001976 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001977 .model_id = EN_25F40,
1978 .total_size = 512,
1979 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001980 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001981 .probe = probe_spi_rdid,
1982 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001983 .block_erasers =
1984 {
1985 {
Sean Nelson54596372010-01-09 05:30:14 +00001986 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001987 .block_erase = spi_block_erase_20,
1988 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001989 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001990 .block_erase = spi_block_erase_d8,
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_60,
1994 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001995 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001996 .block_erase = spi_block_erase_c7,
1997 },
1998 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001999 .write = spi_chip_write_256,
2000 .read = spi_chip_read,
2001 },
2002
2003 {
2004 .vendor = "Eon",
2005 .name = "EN25F80",
2006 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002007 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002008 .model_id = EN_25F80,
2009 .total_size = 1024,
2010 .page_size = 256,
2011 .tested = TEST_UNTESTED,
2012 .probe = probe_spi_rdid,
2013 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002014 .block_erasers =
2015 {
2016 {
2017 .eraseblocks = { {4 * 1024, 256} },
2018 .block_erase = spi_block_erase_20,
2019 }, {
2020 .eraseblocks = { {64 * 1024, 16} },
2021 .block_erase = spi_block_erase_d8,
2022 }, {
2023 .eraseblocks = { {1024 * 1024, 1} },
2024 .block_erase = spi_block_erase_60,
2025 }, {
2026 .eraseblocks = { {1024 * 1024, 1} },
2027 .block_erase = spi_block_erase_c7,
2028 }
2029 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002030 .write = spi_chip_write_256,
2031 .read = spi_chip_read,
2032 },
2033
2034 {
2035 .vendor = "Eon",
2036 .name = "EN25F16",
2037 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002038 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002039 .model_id = EN_25F16,
2040 .total_size = 2048,
2041 .page_size = 256,
2042 .tested = TEST_UNTESTED,
2043 .probe = probe_spi_rdid,
2044 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002045 .block_erasers =
2046 {
2047 {
2048 .eraseblocks = { {4 * 1024, 512} },
2049 .block_erase = spi_block_erase_20,
2050 }, {
2051 .eraseblocks = { {64 * 1024, 32} },
2052 .block_erase = spi_block_erase_d8,
2053 }, {
2054 .eraseblocks = { {2 * 1024 * 1024, 1} },
2055 .block_erase = spi_block_erase_60,
2056 }, {
2057 .eraseblocks = { {2 * 1024 * 1024, 1} },
2058 .block_erase = spi_block_erase_c7,
2059 }
2060 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002061 .write = spi_chip_write_256,
2062 .read = spi_chip_read,
2063 },
2064
2065 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002066 .vendor = "Eon",
2067 .name = "EN25F32",
2068 .bustype = CHIP_BUSTYPE_SPI,
2069 .manufacture_id = EON_ID_NOPREFIX,
2070 .model_id = EN_25F32,
2071 .total_size = 4096,
2072 .page_size = 256,
2073 .tested = TEST_UNTESTED,
2074 .probe = probe_spi_rdid,
2075 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002076 .block_erasers =
2077 {
2078 {
2079 .eraseblocks = { {4 * 1024, 1024} },
2080 .block_erase = spi_block_erase_20,
2081 }, {
2082 .eraseblocks = { {64 * 1024, 64} },
2083 .block_erase = spi_block_erase_d8,
2084 }, {
2085 .eraseblocks = { {4 * 1024 * 1024, 1} },
2086 .block_erase = spi_block_erase_60,
2087 }, {
2088 .eraseblocks = { {4 * 1024 * 1024, 1} },
2089 .block_erase = spi_block_erase_c7,
2090 }
2091 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002092 .write = spi_chip_write_256,
2093 .read = spi_chip_read,
2094 },
2095
2096 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002097 .vendor = "EON",
2098 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002099 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002100 .manufacture_id = EON_ID,
2101 .model_id = EN_29F002B,
2102 .total_size = 256,
2103 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002104 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002105 .tested = TEST_UNTESTED,
2106 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002107 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002108 .block_erasers =
2109 {
2110 {
2111 .eraseblocks = {
2112 {64 * 1024, 3},
2113 {32 * 1024, 1},
2114 {8 * 1024, 2},
2115 {16 * 1024, 1},
2116 },
2117 .block_erase = erase_sector_jedec,
2118 }, {
2119 .eraseblocks = { {256 * 1024, 1} },
2120 .block_erase = erase_chip_block_jedec,
2121 },
2122 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002123 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002124 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002125 },
2126
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002127 {
2128 .vendor = "EON",
2129 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002130 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002131 .manufacture_id = EON_ID,
2132 .model_id = EN_29F002T,
2133 .total_size = 256,
2134 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002135 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
2136 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002137 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002138 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002139 .block_erasers =
2140 {
2141 {
2142 .eraseblocks = {
2143 {16 * 1024, 1},
2144 {8 * 1024, 2},
2145 {32 * 1024, 1},
2146 {64 * 1024, 3},
2147 },
2148 .block_erase = erase_sector_jedec,
2149 }, {
2150 .eraseblocks = { {256 * 1024, 1} },
2151 .block_erase = erase_chip_block_jedec,
2152 },
2153 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002154 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002155 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002156 },
2157
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002158 {
2159 .vendor = "Fujitsu",
2160 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002161 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002162 .manufacture_id = FUJITSU_ID,
2163 .model_id = MBM29F004BC,
2164 .total_size = 512,
2165 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002166 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002167 .tested = TEST_UNTESTED,
2168 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002169 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002170 .block_erasers =
2171 {
2172 {
2173 .eraseblocks = {
2174 {16 * 1024, 1},
2175 {8 * 1024, 2},
2176 {32 * 1024, 1},
2177 {64 * 1024, 7},
2178 },
Sean Nelson35727f72010-01-28 23:55:12 +00002179 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002180 }, {
2181 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002182 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002183 },
2184 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002185 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002186 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002187 },
2188
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002189 {
2190 .vendor = "Fujitsu",
2191 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002192 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002193 .manufacture_id = FUJITSU_ID,
2194 .model_id = MBM29F004TC,
2195 .total_size = 512,
2196 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002197 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002198 .tested = TEST_UNTESTED,
2199 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002200 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002201 .block_erasers =
2202 {
2203 {
2204 .eraseblocks = {
2205 {64 * 1024, 7},
2206 {32 * 1024, 1},
2207 {8 * 1024, 2},
2208 {16 * 1024, 1},
2209 },
Sean Nelson35727f72010-01-28 23:55:12 +00002210 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002211 }, {
2212 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002213 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002214 },
2215 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002216 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002217 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002218 },
2219
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002220 {
Sean Nelson35727f72010-01-28 23:55:12 +00002221 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002222 .vendor = "Fujitsu",
2223 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002224 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002225 .manufacture_id = FUJITSU_ID,
2226 .model_id = MBM29F400BC,
2227 .total_size = 512,
2228 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002229 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002230 .tested = TEST_UNTESTED,
2231 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002232 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002233 .block_erasers =
2234 {
2235 {
2236 .eraseblocks = {
2237 {16 * 1024, 1},
2238 {8 * 1024, 2},
2239 {32 * 1024, 1},
2240 {64 * 1024, 7},
2241 },
2242 .block_erase = block_erase_m29f400bt,
2243 }, {
2244 .eraseblocks = { {512 * 1024, 1} },
2245 .block_erase = block_erase_chip_m29f400bt,
2246 },
2247 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002248 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002249 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002250 },
2251
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002252 {
2253 .vendor = "Fujitsu",
2254 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002255 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002256 .manufacture_id = FUJITSU_ID,
2257 .model_id = MBM29F400TC,
2258 .total_size = 512,
2259 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002260 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002261 .tested = TEST_UNTESTED,
2262 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002263 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002264 .block_erasers =
2265 {
2266 {
2267 .eraseblocks = {
2268 {64 * 1024, 7},
2269 {32 * 1024, 1},
2270 {8 * 1024, 2},
2271 {16 * 1024, 1},
2272 },
2273 .block_erase = block_erase_m29f400bt,
2274 }, {
2275 .eraseblocks = { {512 * 1024, 1} },
2276 .block_erase = block_erase_chip_m29f400bt,
2277 },
2278 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002279 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002280 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002281 },
2282
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002283 {
2284 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002285 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002286 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002287 .manufacture_id = INTEL_ID,
2288 .model_id = P28F001BXB,
2289 .total_size = 128,
2290 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelson35727f72010-01-28 23:55:12 +00002291 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002292 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002293 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002294 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002295 .block_erasers =
2296 {
2297 {
2298 .eraseblocks = {
2299 {8 * 1024, 1},
2300 {4 * 1024, 2},
2301 {112 * 1024, 1},
2302 },
2303 .block_erase = erase_82802ab_block,
2304 },
2305 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002306 .write = NULL,
2307 .read = read_memmapped,
2308 },
2309
2310 {
2311 .vendor = "Intel",
2312 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002313 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002314 .manufacture_id = INTEL_ID,
2315 .model_id = P28F001BXT,
2316 .total_size = 128,
2317 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelson35727f72010-01-28 23:55:12 +00002318 .feature_bits = 0,
2319 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002320 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002321 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002322 .block_erasers =
2323 {
2324 {
2325 .eraseblocks = {
2326 {112 * 1024, 1},
2327 {4 * 1024, 2},
2328 {8 * 1024, 1},
2329 },
2330 .block_erase = erase_82802ab_block,
2331 },
2332 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002333 .write = NULL,
2334 .read = read_memmapped,
2335 },
2336
2337 {
2338 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002339 .name = "28F004S5",
2340 .bustype = CHIP_BUSTYPE_PARALLEL,
2341 .manufacture_id = INTEL_ID,
2342 .model_id = E_28F004S5,
2343 .total_size = 512,
2344 .page_size = 256,
2345 .tested = TEST_UNTESTED,
2346 .probe = probe_82802ab,
2347 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002348 .block_erasers =
2349 {
2350 {
2351 .eraseblocks = { {64 * 1024, 8} },
2352 .block_erase = erase_82802ab_block,
2353 },
2354 },
2355 .write = write_82802ab,
2356 .read = read_memmapped,
2357 },
2358
2359 {
2360 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002361 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002362 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002363 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002364 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002365 .total_size = 512,
2366 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002367 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002368 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002369 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002370 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002371 .block_erasers =
2372 {
2373 {
2374 .eraseblocks = { {64 * 1024, 8} },
2375 .block_erase = erase_82802ab_block,
2376 },
2377 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002378 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002379 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002380 },
2381
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002382 {
2383 .vendor = "Intel",
2384 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002385 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002386 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002387 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002388 .total_size = 1024,
2389 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002390 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002391 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002392 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002393 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002394 .block_erasers =
2395 {
2396 {
2397 .eraseblocks = { {64 * 1024, 16} },
2398 .block_erase = erase_82802ab_block,
2399 },
2400 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002401 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002402 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002403 },
2404
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002405 {
2406 .vendor = "Macronix",
2407 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002408 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002409 .manufacture_id = MX_ID,
2410 .model_id = MX_25L512,
2411 .total_size = 64,
2412 .page_size = 256,
2413 .tested = TEST_UNTESTED,
2414 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002415 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002416 .block_erasers =
2417 {
2418 {
2419 .eraseblocks = { {4 * 1024, 16} },
2420 .block_erase = spi_block_erase_20,
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_52,
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_d8,
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_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002430 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002431 .eraseblocks = { {64 * 1024, 1} },
2432 .block_erase = spi_block_erase_c7,
2433 },
2434 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002435 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002436 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002437 },
2438
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002439 {
2440 .vendor = "Macronix",
2441 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002442 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002443 .manufacture_id = MX_ID,
2444 .model_id = MX_25L1005,
2445 .total_size = 128,
2446 .page_size = 256,
2447 .tested = TEST_UNTESTED,
2448 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002449 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002450 .block_erasers =
2451 {
2452 {
2453 .eraseblocks = { {4 * 1024, 32} },
2454 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002455 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002456 .eraseblocks = { {64 * 1024, 2} },
2457 .block_erase = spi_block_erase_d8,
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_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002461 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002462 .eraseblocks = { {128 * 1024, 1} },
2463 .block_erase = spi_block_erase_c7,
2464 },
2465 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002466 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002467 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002468 },
2469
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002470 {
2471 .vendor = "Macronix",
2472 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002473 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002474 .manufacture_id = MX_ID,
2475 .model_id = MX_25L2005,
2476 .total_size = 256,
2477 .page_size = 256,
2478 .tested = TEST_UNTESTED,
2479 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002480 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002481 .block_erasers =
2482 {
2483 {
2484 .eraseblocks = { {4 * 1024, 64} },
2485 .block_erase = spi_block_erase_20,
2486 }, {
2487 .eraseblocks = { {64 * 1024, 4} },
2488 .block_erase = spi_block_erase_52,
2489 }, {
2490 .eraseblocks = { {64 * 1024, 4} },
2491 .block_erase = spi_block_erase_d8,
2492 }, {
2493 .eraseblocks = { {256 * 1024, 1} },
2494 .block_erase = spi_block_erase_60,
2495 }, {
2496 .eraseblocks = { {256 * 1024, 1} },
2497 .block_erase = spi_block_erase_c7,
2498 },
2499 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002500 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002501 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002502 },
2503
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002504 {
2505 .vendor = "Macronix",
2506 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002507 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002508 .manufacture_id = MX_ID,
2509 .model_id = MX_25L4005,
2510 .total_size = 512,
2511 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002512 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002513 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002514 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002515 .block_erasers =
2516 {
2517 {
2518 .eraseblocks = { {4 * 1024, 128} },
2519 .block_erase = spi_block_erase_20,
2520 }, {
2521 .eraseblocks = { {64 * 1024, 8} },
2522 .block_erase = spi_block_erase_52,
2523 }, {
2524 .eraseblocks = { {64 * 1024, 8} },
2525 .block_erase = spi_block_erase_d8,
2526 }, {
2527 .eraseblocks = { {512 * 1024, 1} },
2528 .block_erase = spi_block_erase_60,
2529 }, {
2530 .eraseblocks = { {512 * 1024, 1} },
2531 .block_erase = spi_block_erase_c7,
2532 },
2533 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002534 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002535 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002536 },
2537
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002538 {
2539 .vendor = "Macronix",
2540 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002541 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002542 .manufacture_id = MX_ID,
2543 .model_id = MX_25L8005,
2544 .total_size = 1024,
2545 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002546 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002547 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002548 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002549 .block_erasers =
2550 {
2551 {
2552 .eraseblocks = { {4 * 1024, 256} },
2553 .block_erase = spi_block_erase_20,
2554 }, {
2555 .eraseblocks = { {64 * 1024, 16} },
2556 .block_erase = spi_block_erase_52,
2557 }, {
2558 .eraseblocks = { {64 * 1024, 16} },
2559 .block_erase = spi_block_erase_d8,
2560 }, {
2561 .eraseblocks = { {1024 * 1024, 1} },
2562 .block_erase = spi_block_erase_60,
2563 }, {
2564 .eraseblocks = { {1024 * 1024, 1} },
2565 .block_erase = spi_block_erase_c7,
2566 },
2567 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002568 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002569 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002570 },
2571
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002572 {
2573 .vendor = "Macronix",
2574 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002575 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002576 .manufacture_id = MX_ID,
2577 .model_id = MX_25L1605,
2578 .total_size = 2048,
2579 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002580 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002581 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002582 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002583 .block_erasers =
2584 {
2585 {
2586 .eraseblocks = { {4 * 1024, 512} },
2587 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2588 }, {
2589 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2590 .block_erase = spi_block_erase_52,
2591 }, {
2592 .eraseblocks = { {64 * 1024, 32} },
2593 .block_erase = spi_block_erase_d8,
2594 }, {
2595 .eraseblocks = { {2 * 1024 * 1024, 1} },
2596 .block_erase = spi_block_erase_60,
2597 }, {
2598 .eraseblocks = { {2 * 1024 * 1024, 1} },
2599 .block_erase = spi_block_erase_c7,
2600 },
2601 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002602 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002603 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002604 },
2605
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002606 {
2607 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002608 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002609 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002610 .manufacture_id = MX_ID,
2611 .model_id = MX_25L1635D,
2612 .total_size = 2048,
2613 .page_size = 256,
2614 .tested = TEST_UNTESTED,
2615 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002616 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002617 .block_erasers =
2618 {
2619 {
2620 .eraseblocks = { {4 * 1024, 512} },
2621 .block_erase = spi_block_erase_20,
2622 }, {
2623 .eraseblocks = { {64 * 1024, 32} },
2624 .block_erase = spi_block_erase_d8,
2625 }, {
2626 .eraseblocks = { {2 * 1024 * 1024, 1} },
2627 .block_erase = spi_block_erase_60,
2628 }, {
2629 .eraseblocks = { {2 * 1024 * 1024, 1} },
2630 .block_erase = spi_block_erase_c7,
2631 }
2632 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002633 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002634 .read = spi_chip_read,
2635 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002636
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002637 {
2638 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002639 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002640 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002641 .manufacture_id = MX_ID,
2642 .model_id = MX_25L3205,
2643 .total_size = 4096,
2644 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002645 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002646 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002647 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002648 .block_erasers =
2649 {
2650 {
2651 .eraseblocks = { {4 * 1024, 1024} },
2652 .block_erase = spi_block_erase_20,
2653 }, {
2654 .eraseblocks = { {4 * 1024, 1024} },
2655 .block_erase = spi_block_erase_d8,
2656 }, {
2657 .eraseblocks = { {4 * 1024 * 1024, 1} },
2658 .block_erase = spi_block_erase_60,
2659 }, {
2660 .eraseblocks = { {4 * 1024 * 1024, 1} },
2661 .block_erase = spi_block_erase_c7,
2662 },
2663 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002664 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002665 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002666 },
2667
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002668 {
2669 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002670 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002671 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002672 .manufacture_id = MX_ID,
2673 .model_id = MX_25L3235D,
2674 .total_size = 4096,
2675 .page_size = 256,
2676 .tested = TEST_UNTESTED,
2677 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002678 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002679 .block_erasers =
2680 {
2681 {
2682 .eraseblocks = { {4 * 1024, 1024} },
2683 .block_erase = spi_block_erase_20,
2684 }, {
2685 .eraseblocks = { {64 * 1024, 64} },
2686 .block_erase = spi_block_erase_d8,
2687 }, {
2688 .eraseblocks = { {4 * 1024 * 1024, 1} },
2689 .block_erase = spi_block_erase_60,
2690 }, {
2691 .eraseblocks = { {4 * 1024 * 1024, 1} },
2692 .block_erase = spi_block_erase_c7,
2693 }
2694 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002695 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002696 .read = spi_chip_read,
2697 },
2698
2699 {
2700 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002701 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002702 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002703 .manufacture_id = MX_ID,
2704 .model_id = MX_25L6405,
2705 .total_size = 8192,
2706 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002707 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002708 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002709 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002710 .block_erasers =
2711 {
2712 {
2713 .eraseblocks = { {64 * 1024, 128} },
2714 .block_erase = spi_block_erase_20,
2715 }, {
2716 .eraseblocks = { {64 * 1024, 128} },
2717 .block_erase = spi_block_erase_d8,
2718 }, {
2719 .eraseblocks = { {8 * 1024 * 1024, 1} },
2720 .block_erase = spi_block_erase_60,
2721 }, {
2722 .eraseblocks = { {8 * 1024 * 1024, 1} },
2723 .block_erase = spi_block_erase_c7,
2724 }
2725 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002726 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002727 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002728 },
2729
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002730 {
2731 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002732 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002733 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002734 .manufacture_id = MX_ID,
2735 .model_id = MX_25L12805,
2736 .total_size = 16384,
2737 .page_size = 256,
2738 .tested = TEST_UNTESTED,
2739 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002740 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002741 .block_erasers =
2742 {
2743 {
2744 .eraseblocks = { {4 * 1024, 4096} },
2745 .block_erase = spi_block_erase_20,
2746 }, {
2747 .eraseblocks = { {64 * 1024, 256} },
2748 .block_erase = spi_block_erase_d8,
2749 }, {
2750 .eraseblocks = { {16 * 1024 * 1024, 1} },
2751 .block_erase = spi_block_erase_60,
2752 }, {
2753 .eraseblocks = { {16 * 1024 * 1024, 1} },
2754 .block_erase = spi_block_erase_c7,
2755 }
2756 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002757 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002758 .read = spi_chip_read,
2759 },
2760
2761 {
2762 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002763 .name = "MX29F001B",
2764 .bustype = CHIP_BUSTYPE_PARALLEL,
2765 .manufacture_id = MX_ID,
2766 .model_id = MX_29F001B,
2767 .total_size = 128,
2768 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002769 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2770 .tested = TEST_UNTESTED,
2771 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002772 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002773 .block_erasers =
2774 {
2775 {
2776 .eraseblocks = {
2777 {8 * 1024, 1},
2778 {4 * 1024, 2},
2779 {8 * 1024, 2},
2780 {32 * 1024, 1},
2781 {64 * 1024, 1},
2782 },
Sean Nelson35727f72010-01-28 23:55:12 +00002783 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002784 }, {
2785 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002786 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002787 }
2788 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002789 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002790 .read = read_memmapped,
2791 },
2792
2793 {
2794 .vendor = "Macronix",
2795 .name = "MX29F001T",
2796 .bustype = CHIP_BUSTYPE_PARALLEL,
2797 .manufacture_id = MX_ID,
2798 .model_id = MX_29F001T,
2799 .total_size = 128,
2800 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002801 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2802 .tested = TEST_UNTESTED,
2803 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002804 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002805 .block_erasers =
2806 {
2807 {
2808 .eraseblocks = {
2809 {64 * 1024, 1},
2810 {32 * 1024, 1},
2811 {8 * 1024, 2},
2812 {4 * 1024, 2},
2813 {8 * 1024, 1},
2814 },
Sean Nelson35727f72010-01-28 23:55:12 +00002815 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002816 }, {
2817 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002818 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002819 }
2820 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002821 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002822 .read = read_memmapped,
2823 },
2824
2825 {
2826 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002827 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002828 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002829 .manufacture_id = MX_ID,
2830 .model_id = MX_29F002B,
2831 .total_size = 256,
2832 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002833 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002834 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002835 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002836 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002837 .block_erasers =
2838 {
2839 {
2840 .eraseblocks = {
2841 {16 * 1024, 1},
2842 {8 * 1024, 2},
2843 {32 * 1024, 1},
2844 {64 * 1024, 3},
2845 },
Sean Nelson35727f72010-01-28 23:55:12 +00002846 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002847 }, {
2848 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002849 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002850 },
2851 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002852 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002853 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002854 },
2855
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002856 {
2857 .vendor = "Macronix",
2858 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002859 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002860 .manufacture_id = MX_ID,
2861 .model_id = MX_29F002T,
2862 .total_size = 256,
2863 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002864 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2865 .tested = TEST_UNTESTED,
2866 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002867 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002868 .block_erasers =
2869 {
2870 {
2871 .eraseblocks = {
2872 {64 * 1024, 3},
2873 {32 * 1024, 1},
2874 {8 * 1024, 2},
2875 {16 * 1024, 1},
2876 },
Sean Nelson35727f72010-01-28 23:55:12 +00002877 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002878 }, {
2879 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002880 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002881 },
2882 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002883 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002884 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002885 },
2886
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002887 {
2888 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002889 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002890 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002891 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002892 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002893 .total_size = 512,
2894 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002895 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2896 .tested = TEST_UNTESTED,
2897 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002898 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002899 .block_erasers =
2900 {
2901 {
2902 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00002903 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002904 }, {
2905 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002906 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002907 },
2908 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002909 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002910 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002911 },
2912
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002913 {
2914 .vendor = "Numonyx",
2915 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002916 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002917 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002918 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002919 .total_size = 128,
2920 .page_size = 256,
2921 .tested = TEST_UNTESTED,
2922 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002923 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002924 .block_erasers =
2925 {
2926 {
2927 .eraseblocks = { {4 * 1024, 32} },
2928 .block_erase = spi_block_erase_20,
2929 }, {
2930 .eraseblocks = { {64 * 1024, 2} },
2931 .block_erase = spi_block_erase_d8,
2932 }, {
2933 .eraseblocks = { {128 * 1024, 1} },
2934 .block_erase = spi_block_erase_c7,
2935 }
2936 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002937 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002938 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002939 },
2940
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002941 {
2942 .vendor = "Numonyx",
2943 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002944 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002945 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002946 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002947 .total_size = 256,
2948 .page_size = 256,
2949 .tested = TEST_UNTESTED,
2950 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002951 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002952 .block_erasers =
2953 {
2954 {
2955 .eraseblocks = { {4 * 1024, 64} },
2956 .block_erase = spi_block_erase_20,
2957 }, {
2958 .eraseblocks = { {64 * 1024, 4} },
2959 .block_erase = spi_block_erase_d8,
2960 }, {
2961 .eraseblocks = { {256 * 1024, 1} },
2962 .block_erase = spi_block_erase_c7,
2963 }
2964 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002965 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002966 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002967 },
2968
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002969 {
2970 .vendor = "Numonyx",
2971 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002972 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002973 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002974 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00002975 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002976 .page_size = 256,
2977 .tested = TEST_UNTESTED,
2978 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002979 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002980 .block_erasers =
2981 {
2982 {
2983 .eraseblocks = { {4 * 1024, 128} },
2984 .block_erase = spi_block_erase_20,
2985 }, {
2986 .eraseblocks = { {64 * 1024, 8} },
2987 .block_erase = spi_block_erase_d8,
2988 }, {
2989 .eraseblocks = { {512 * 1024, 1} },
2990 .block_erase = spi_block_erase_c7,
2991 }
2992 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002993 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002994 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002995 },
2996
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002997 {
2998 .vendor = "Numonyx",
2999 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003000 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003001 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003002 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003003 .total_size = 1024,
3004 .page_size = 256,
3005 .tested = TEST_OK_PREW,
3006 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003007 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003008 .block_erasers =
3009 {
3010 {
3011 .eraseblocks = { {4 * 1024, 256} },
3012 .block_erase = spi_block_erase_20,
3013 }, {
3014 .eraseblocks = { {64 * 1024, 16} },
3015 .block_erase = spi_block_erase_d8,
3016 }, {
3017 .eraseblocks = { {1024 * 1024, 1} },
3018 .block_erase = spi_block_erase_c7,
3019 }
3020 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003021 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003022 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003023 },
3024
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003025 {
3026 .vendor = "Numonyx",
3027 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003028 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003029 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003030 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003031 .total_size = 2048,
3032 .page_size = 256,
3033 .tested = TEST_UNTESTED,
3034 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003035 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003036 .block_erasers =
3037 {
3038 {
3039 .eraseblocks = { {4 * 1024, 512} },
3040 .block_erase = spi_block_erase_20,
3041 }, {
3042 .eraseblocks = { {64 * 1024, 32} },
3043 .block_erase = spi_block_erase_d8,
3044 }, {
3045 .eraseblocks = { {2 * 1024 * 1024, 1} },
3046 .block_erase = spi_block_erase_c7,
3047 }
3048 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003049 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003050 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003051 },
3052
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003053 {
3054 .vendor = "PMC",
3055 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003056 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003057 .manufacture_id = PMC_ID,
3058 .model_id = PMC_25LV010,
3059 .total_size = 128,
3060 .page_size = 256,
3061 .tested = TEST_UNTESTED,
3062 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003063 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003064 .block_erasers =
3065 {
3066 {
3067 .eraseblocks = { {4 * 1024, 32} },
3068 .block_erase = spi_block_erase_d7,
3069 }, {
3070 .eraseblocks = { {32 * 1024, 4} },
3071 .block_erase = spi_block_erase_d8,
3072 }, {
3073 .eraseblocks = { {128 * 1024, 1} },
3074 .block_erase = spi_block_erase_c7,
3075 }
3076 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003077 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003078 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003079 },
3080
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003081 {
3082 .vendor = "PMC",
3083 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003084 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003085 .manufacture_id = PMC_ID,
3086 .model_id = PMC_25LV016B,
3087 .total_size = 2048,
3088 .page_size = 256,
3089 .tested = TEST_UNTESTED,
3090 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003091 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003092 .block_erasers =
3093 {
3094 {
3095 .eraseblocks = { {4 * 1024, 512} },
3096 .block_erase = spi_block_erase_d7,
3097 }, {
3098 .eraseblocks = { {4 * 1024, 512} },
3099 .block_erase = spi_block_erase_20,
3100 }, {
3101 .eraseblocks = { {64 * 1024, 32} },
3102 .block_erase = spi_block_erase_d8,
3103 }, {
3104 .eraseblocks = { {2 * 1024 * 1024, 1} },
3105 .block_erase = spi_block_erase_60,
3106 }, {
3107 .eraseblocks = { {2 * 1024 * 1024, 1} },
3108 .block_erase = spi_block_erase_c7,
3109 }
3110 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003111 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003112 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003113 },
3114
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003115 {
3116 .vendor = "PMC",
3117 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003118 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003119 .manufacture_id = PMC_ID,
3120 .model_id = PMC_25LV020,
3121 .total_size = 256,
3122 .page_size = 256,
3123 .tested = TEST_UNTESTED,
3124 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003125 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003126 .block_erasers =
3127 {
3128 {
3129 .eraseblocks = { {4 * 1024, 64} },
3130 .block_erase = spi_block_erase_d7,
3131 }, {
3132 .eraseblocks = { {64 * 1024, 4} },
3133 .block_erase = spi_block_erase_d8,
3134 }, {
3135 .eraseblocks = { {256 * 1024, 1} },
3136 .block_erase = spi_block_erase_c7,
3137 }
3138 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003139 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003140 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003141 },
3142
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003143 {
3144 .vendor = "PMC",
3145 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003146 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003147 .manufacture_id = PMC_ID,
3148 .model_id = PMC_25LV040,
3149 .total_size = 512,
3150 .page_size = 256,
3151 .tested = TEST_UNTESTED,
3152 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003153 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003154 .block_erasers =
3155 {
3156 {
3157 .eraseblocks = { {4 * 1024, 128} },
3158 .block_erase = spi_block_erase_d7,
3159 }, {
3160 .eraseblocks = { {64 * 1024, 8} },
3161 .block_erase = spi_block_erase_d8,
3162 }, {
3163 .eraseblocks = { {512 * 1024, 1} },
3164 .block_erase = spi_block_erase_c7,
3165 }
3166 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003167 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003168 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003169 },
3170
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003171 {
3172 .vendor = "PMC",
3173 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003174 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003175 .manufacture_id = PMC_ID,
3176 .model_id = PMC_25LV080B,
3177 .total_size = 1024,
3178 .page_size = 256,
3179 .tested = TEST_UNTESTED,
3180 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003181 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003182 .block_erasers =
3183 {
3184 {
3185 .eraseblocks = { {4 * 1024, 256} },
3186 .block_erase = spi_block_erase_d7,
3187 }, {
3188 .eraseblocks = { {4 * 1024, 256} },
3189 .block_erase = spi_block_erase_20,
3190 }, {
3191 .eraseblocks = { {64 * 1024, 16} },
3192 .block_erase = spi_block_erase_d8,
3193 }, {
3194 .eraseblocks = { {1024 * 1024, 1} },
3195 .block_erase = spi_block_erase_60,
3196 }, {
3197 .eraseblocks = { {1024 * 1024, 1} },
3198 .block_erase = spi_block_erase_c7,
3199 }
3200 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003201 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003202 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003203 },
3204
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003205 {
3206 .vendor = "PMC",
3207 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003208 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003209 .manufacture_id = PMC_ID,
3210 .model_id = PMC_25LV512,
3211 .total_size = 64,
3212 .page_size = 256,
3213 .tested = TEST_UNTESTED,
3214 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003215 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003216 .block_erasers =
3217 {
3218 {
3219 .eraseblocks = { {4 * 1024, 16} },
3220 .block_erase = spi_block_erase_d7,
3221 }, {
3222 .eraseblocks = { {32 * 1024, 2} },
3223 .block_erase = spi_block_erase_d8,
3224 }, {
3225 .eraseblocks = { {64 * 1024, 1} },
3226 .block_erase = spi_block_erase_c7,
3227 }
3228 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003229 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003230 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003231 },
3232
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003233 {
3234 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003235 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003236 .bustype = CHIP_BUSTYPE_PARALLEL,
3237 .manufacture_id = PMC_ID_NOPREFIX,
3238 .model_id = PMC_29F002T,
3239 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003240 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003241 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3242 .tested = TEST_UNTESTED,
3243 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003244 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003245 .block_erasers =
3246 {
3247 {
3248 .eraseblocks = {
3249 {128 * 1024, 1},
3250 {96 * 1024, 1},
3251 {8 * 1024, 2},
3252 {16 * 1024, 1},
3253 },
Sean Nelson35727f72010-01-28 23:55:12 +00003254 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003255 }, {
3256 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003257 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003258 },
3259 },
Sean Nelson35727f72010-01-28 23:55:12 +00003260 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003261 .read = read_memmapped,
3262 },
3263
3264 {
3265 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003266 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003267 .bustype = CHIP_BUSTYPE_PARALLEL,
3268 .manufacture_id = PMC_ID_NOPREFIX,
3269 .model_id = PMC_29F002B,
3270 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003271 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003272 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003273 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003274 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003275 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003276 .block_erasers =
3277 {
3278 {
3279 .eraseblocks = {
3280 {16 * 1024, 1},
3281 {8 * 1024, 2},
3282 {96 * 1024, 1},
3283 {128 * 1024, 1},
3284 },
Sean Nelson35727f72010-01-28 23:55:12 +00003285 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003286 }, {
3287 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003288 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003289 },
3290 },
Sean Nelson35727f72010-01-28 23:55:12 +00003291 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003292 .read = read_memmapped,
3293 },
3294
3295 {
3296 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003297 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003298 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003299 .manufacture_id = PMC_ID_NOPREFIX,
3300 .model_id = PMC_39F010,
3301 .total_size = 128,
3302 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003303 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3304 .tested = TEST_UNTESTED,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003305 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003306 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003307 .block_erasers =
3308 {
3309 {
3310 .eraseblocks = { {4 * 1024, 32} },
3311 .block_erase = erase_sector_jedec,
3312 }, {
3313 .eraseblocks = { {64 * 1024, 2} },
3314 .block_erase = erase_block_jedec,
3315 }, {
3316 .eraseblocks = { {128 * 1024, 1} },
3317 .block_erase = erase_chip_block_jedec,
3318 }
3319 },
Sean Nelson35727f72010-01-28 23:55:12 +00003320 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003321 .read = read_memmapped,
3322 },
3323
3324 {
3325 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003326 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003327 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003328 .manufacture_id = PMC_ID_NOPREFIX,
3329 .model_id = PMC_49FL002,
3330 .total_size = 256,
3331 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003332 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3333 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003334 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003335 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003336 .block_erasers =
3337 {
3338 {
3339 .eraseblocks = { {4 * 1024, 64} },
3340 .block_erase = erase_sector_jedec,
3341 }, {
3342 .eraseblocks = { {16 * 1024, 16} },
3343 .block_erase = erase_block_jedec,
3344 }, {
3345 .eraseblocks = { {256 * 1024, 1} },
3346 .block_erase = erase_chip_block_jedec,
3347 }
3348 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003349 .unlock = unlock_49fl00x,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003350 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003351 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003352 },
3353
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003354 {
3355 .vendor = "PMC",
3356 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003357 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003358 .manufacture_id = PMC_ID_NOPREFIX,
3359 .model_id = PMC_49FL004,
3360 .total_size = 512,
3361 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003362 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3363 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003364 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003365 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003366 .block_erasers =
3367 {
3368 {
3369 .eraseblocks = { {4 * 1024, 128} },
3370 .block_erase = erase_sector_jedec,
3371 }, {
3372 .eraseblocks = { {64 * 1024, 8} },
3373 .block_erase = erase_block_jedec,
3374 }, {
3375 .eraseblocks = { {512 * 1024, 1} },
3376 .block_erase = erase_chip_block_jedec,
3377 }
3378 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003379 .unlock = unlock_49fl00x,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003380 .write = write_49fl00x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003381 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003382 },
3383
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003384 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003385 .vendor = "Sanyo",
3386 .name = "LF25FW203A",
3387 .bustype = CHIP_BUSTYPE_SPI,
3388 .manufacture_id = SANYO_ID,
3389 .model_id = SANYO_LE25FW203A,
3390 .total_size = 2048,
3391 .page_size = 256,
3392 .tested = TEST_UNTESTED,
3393 .probe = probe_spi_rdid,
3394 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003395 .block_erasers =
3396 {
3397 {
3398 .eraseblocks = { {64 * 1024, 32} },
3399 .block_erase = spi_block_erase_d8,
3400 }, {
3401 .eraseblocks = { {2 * 1024 * 1024, 1} },
3402 .block_erase = spi_block_erase_c7,
3403 }
3404 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003405 .write = spi_chip_write_256,
3406 .read = spi_chip_read,
3407 },
3408
3409 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003410 .vendor = "Sharp",
3411 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003412 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003413 .manufacture_id = SHARP_ID,
3414 .model_id = SHARP_LHF00L04,
3415 .total_size = 1024,
3416 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003417 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003418 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003419 .probe = probe_49lfxxxc,
3420 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003421 .block_erasers =
3422 {
3423 {
3424 .eraseblocks = {
3425 {64 * 1024, 15},
3426 {8 * 1024, 8}
3427 },
3428 .block_erase = erase_lhf00l04_block,
3429 }, {
3430 .eraseblocks = {
3431 {1024 * 1024, 1}
3432 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003433 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003434 },
3435 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003436 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003437 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003438 },
3439
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003440 {
3441 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003442 .name = "S25FL008A",
3443 .bustype = CHIP_BUSTYPE_SPI,
3444 .manufacture_id = SPANSION_ID,
3445 .model_id = SPANSION_S25FL008A,
3446 .total_size = 1024,
3447 .page_size = 256,
3448 .tested = TEST_OK_PREW,
3449 .probe = probe_spi_rdid,
3450 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003451 .block_erasers =
3452 {
3453 {
3454 .eraseblocks = { {64 * 1024, 16} },
3455 .block_erase = spi_block_erase_d8,
3456 }, {
3457 .eraseblocks = { {1024 * 1024, 1} },
3458 .block_erase = spi_block_erase_c7,
3459 }
3460 },
3461 .write = spi_chip_write_256,
3462 .read = spi_chip_read,
3463 },
3464
3465 {
3466 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003467 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003468 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003469 .manufacture_id = SPANSION_ID,
3470 .model_id = SPANSION_S25FL016A,
3471 .total_size = 2048,
3472 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003473 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003474 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003475 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003476 .block_erasers =
3477 {
3478 {
3479 .eraseblocks = { {64 * 1024, 32} },
3480 .block_erase = spi_block_erase_d8,
3481 }, {
3482 .eraseblocks = { {2 * 1024 * 1024, 1} },
3483 .block_erase = spi_block_erase_c7,
3484 }
3485 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003486 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003487 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003488 },
3489
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003490 {
3491 .vendor = "SST",
3492 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003493 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003494 .manufacture_id = SST_ID,
3495 .model_id = SST_25VF016B,
3496 .total_size = 2048,
3497 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003498 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003499 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003500 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003501 .block_erasers =
3502 {
3503 {
3504 .eraseblocks = { {4 * 1024, 512} },
3505 .block_erase = spi_block_erase_20,
3506 }, {
3507 .eraseblocks = { {32 * 1024, 64} },
3508 .block_erase = spi_block_erase_52,
3509 }, {
3510 .eraseblocks = { {64 * 1024, 32} },
3511 .block_erase = spi_block_erase_d8,
3512 }, {
3513 .eraseblocks = { {2 * 1024 * 1024, 1} },
3514 .block_erase = spi_block_erase_60,
3515 }, {
3516 .eraseblocks = { {2 * 1024 * 1024, 1} },
3517 .block_erase = spi_block_erase_c7,
3518 },
3519 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003520 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003521 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003522 },
3523
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003524 {
3525 .vendor = "SST",
3526 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003527 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003528 .manufacture_id = SST_ID,
3529 .model_id = SST_25VF032B,
3530 .total_size = 4096,
3531 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003532 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003533 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003534 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003535 .block_erasers =
3536 {
3537 {
3538 .eraseblocks = { {4 * 1024, 1024} },
3539 .block_erase = spi_block_erase_20,
3540 }, {
3541 .eraseblocks = { {32 * 1024, 128} },
3542 .block_erase = spi_block_erase_52,
3543 }, {
3544 .eraseblocks = { {64 * 1024, 64} },
3545 .block_erase = spi_block_erase_d8,
3546 }, {
3547 .eraseblocks = { {4 * 1024 * 1024, 1} },
3548 .block_erase = spi_block_erase_60,
3549 }, {
3550 .eraseblocks = { {4 * 1024 * 1024, 1} },
3551 .block_erase = spi_block_erase_c7,
3552 },
3553 },
3554 .write = spi_chip_write_1,
3555 .read = spi_chip_read,
3556 },
3557
3558 {
3559 .vendor = "SST",
3560 .name = "SST25VF040.REMS",
3561 .bustype = CHIP_BUSTYPE_SPI,
3562 .manufacture_id = SST_ID,
3563 .model_id = SST_25VF040_REMS,
3564 .total_size = 512,
3565 .page_size = 256,
3566 .tested = TEST_OK_PR,
3567 .probe = probe_spi_rems,
3568 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003569 .block_erasers =
3570 {
3571 {
3572 .eraseblocks = { {4 * 1024, 128} },
3573 .block_erase = spi_block_erase_20,
3574 }, {
3575 .eraseblocks = { {32 * 1024, 16} },
3576 .block_erase = spi_block_erase_52,
3577 }, {
3578 .eraseblocks = { {512 * 1024, 1} },
3579 .block_erase = spi_block_erase_60,
3580 },
3581 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003582 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003583 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003584 },
3585
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003586 {
3587 .vendor = "SST",
3588 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003589 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003590 .manufacture_id = SST_ID,
3591 .model_id = SST_25VF040B,
3592 .total_size = 512,
3593 .page_size = 256,
3594 .tested = TEST_UNTESTED,
3595 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003596 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003597 .block_erasers =
3598 {
3599 {
3600 .eraseblocks = { {4 * 1024, 128} },
3601 .block_erase = spi_block_erase_20,
3602 }, {
3603 .eraseblocks = { {32 * 1024, 16} },
3604 .block_erase = spi_block_erase_52,
3605 }, {
3606 .eraseblocks = { {64 * 1024, 8} },
3607 .block_erase = spi_block_erase_d8,
3608 }, {
3609 .eraseblocks = { {512 * 1024, 1} },
3610 .block_erase = spi_block_erase_60,
3611 }, {
3612 .eraseblocks = { {512 * 1024, 1} },
3613 .block_erase = spi_block_erase_c7,
3614 },
3615 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003616 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003617 .read = spi_chip_read,
3618 },
3619
3620 {
3621 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003622 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003623 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003624 .manufacture_id = SST_ID,
3625 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003626 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003627 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003628 .tested = TEST_OK_PR,
3629 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003630 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003631 .block_erasers =
3632 {
3633 {
3634 .eraseblocks = { {4 * 1024, 128} },
3635 .block_erase = spi_block_erase_20,
3636 }, {
3637 .eraseblocks = { {32 * 1024, 16} },
3638 .block_erase = spi_block_erase_52,
3639 }, {
3640 .eraseblocks = { {64 * 1024, 8} },
3641 .block_erase = spi_block_erase_d8,
3642 }, {
3643 .eraseblocks = { {512 * 1024, 1} },
3644 .block_erase = spi_block_erase_60,
3645 }, {
3646 .eraseblocks = { {512 * 1024, 1} },
3647 .block_erase = spi_block_erase_c7,
3648 },
3649 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003650 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003651 .read = spi_chip_read,
3652 },
3653
3654 {
3655 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003656 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003657 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003658 .manufacture_id = SST_ID,
3659 .model_id = SST_25VF080B,
3660 .total_size = 1024,
3661 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003662 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003663 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003664 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003665 .block_erasers =
3666 {
3667 {
3668 .eraseblocks = { {4 * 1024, 256} },
3669 .block_erase = spi_block_erase_20,
3670 }, {
3671 .eraseblocks = { {32 * 1024, 32} },
3672 .block_erase = spi_block_erase_52,
3673 }, {
3674 .eraseblocks = { {64 * 1024, 16} },
3675 .block_erase = spi_block_erase_d8,
3676 }, {
3677 .eraseblocks = { {1024 * 1024, 1} },
3678 .block_erase = spi_block_erase_60,
3679 }, {
3680 .eraseblocks = { {1024 * 1024, 1} },
3681 .block_erase = spi_block_erase_c7,
3682 },
3683 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003684 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003685 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003686 },
3687
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003688 {
3689 .vendor = "SST",
3690 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003691 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003692 .manufacture_id = SST_ID,
3693 .model_id = SST_28SF040,
3694 .total_size = 512,
3695 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003696 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003697 .tested = TEST_UNTESTED,
3698 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003699 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003700 .block_erasers =
3701 {
3702 {
3703 .eraseblocks = { {128, 4096} },
3704 .block_erase = erase_sector_28sf040,
3705 }, {
3706 .eraseblocks = { {512 * 1024, 1} },
3707 .block_erase = erase_chip_28sf040,
3708 }
3709 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003710 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003711 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003712 },
3713
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003714 {
3715 .vendor = "SST",
3716 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003717 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003718 .manufacture_id = SST_ID,
3719 .model_id = SST_29EE010,
3720 .total_size = 128,
3721 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003722 .feature_bits = FEATURE_LONG_RESET,
3723 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003724 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003725 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003726 .block_erasers =
3727 {
3728 {
3729 .eraseblocks = { {128 * 1024, 1} },
3730 .block_erase = erase_chip_block_jedec,
3731 }
3732 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003733 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003734 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003735 },
3736
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003737 {
3738 .vendor = "SST",
3739 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003740 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003741 .manufacture_id = SST_ID,
3742 .model_id = SST_29LE010,
3743 .total_size = 128,
3744 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003745 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003746 .tested = TEST_UNTESTED,
3747 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003748 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003749 .block_erasers =
3750 {
3751 {
3752 .eraseblocks = { {128 * 1024, 1} },
3753 .block_erase = erase_chip_block_jedec,
3754 }
3755 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003756 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003757 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003758 },
3759
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003760 {
3761 .vendor = "SST",
3762 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003763 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003764 .manufacture_id = SST_ID,
3765 .model_id = SST_29EE020A,
3766 .total_size = 256,
3767 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003768 .feature_bits = FEATURE_LONG_RESET,
3769 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003770 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003771 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003772 .block_erasers =
3773 {
3774 {
3775 .eraseblocks = { {256 * 1024, 1} },
3776 .block_erase = erase_chip_block_jedec,
3777 }
3778 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003779 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003780 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003781 },
3782
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003783 {
3784 .vendor = "SST",
3785 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003786 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003787 .manufacture_id = SST_ID,
3788 .model_id = SST_29LE020,
3789 .total_size = 256,
3790 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003791 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003792 .tested = TEST_UNTESTED,
3793 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003794 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003795 .block_erasers =
3796 {
3797 {
3798 .eraseblocks = { {256 * 1024, 1} },
3799 .block_erase = erase_chip_block_jedec,
3800 }
3801 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003802 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003803 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003804 },
3805
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003806 {
3807 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00003808 .name = "SST39SF512",
3809 .bustype = CHIP_BUSTYPE_PARALLEL,
3810 .manufacture_id = SST_ID,
3811 .model_id = SST_39SF512,
3812 .total_size = 64,
3813 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003814 .feature_bits = FEATURE_EITHER_RESET,
3815 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003816 .probe = probe_jedec,
3817 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00003818 .block_erasers =
3819 {
3820 {
3821 .eraseblocks = { {4 * 1024, 16} },
3822 .block_erase = erase_sector_jedec,
3823 }, {
3824 .eraseblocks = { {64 * 1024, 1} },
3825 .block_erase = erase_chip_block_jedec,
3826 }
3827 },
Sean Nelson35727f72010-01-28 23:55:12 +00003828 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003829 .read = read_memmapped,
3830 },
3831
3832 {
3833 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003834 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003835 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003836 .manufacture_id = SST_ID,
3837 .model_id = SST_39SF010,
3838 .total_size = 128,
3839 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003840 .feature_bits = FEATURE_EITHER_RESET,
3841 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003842 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003843 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003844 .block_erasers =
3845 {
3846 {
3847 .eraseblocks = { {4 * 1024, 32} },
3848 .block_erase = erase_sector_jedec,
3849 }, {
3850 .eraseblocks = { {128 * 1024, 1} },
3851 .block_erase = erase_chip_block_jedec,
3852 }
3853 },
Sean Nelson35727f72010-01-28 23:55:12 +00003854 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003855 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003856 },
3857
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003858 {
3859 .vendor = "SST",
3860 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003861 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003862 .manufacture_id = SST_ID,
3863 .model_id = SST_39SF020,
3864 .total_size = 256,
3865 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003866 .feature_bits = FEATURE_EITHER_RESET,
3867 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003868 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003869 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003870 .block_erasers =
3871 {
3872 {
3873 .eraseblocks = { {4 * 1024, 64} },
3874 .block_erase = erase_sector_jedec,
3875 }, {
3876 .eraseblocks = { {256 * 1024, 1} },
3877 .block_erase = erase_chip_block_jedec,
3878 }
3879 },
Sean Nelson35727f72010-01-28 23:55:12 +00003880 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003881 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003882 },
3883
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003884 {
3885 .vendor = "SST",
3886 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003887 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003888 .manufacture_id = SST_ID,
3889 .model_id = SST_39SF040,
3890 .total_size = 512,
3891 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003892 .feature_bits = FEATURE_EITHER_RESET,
3893 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003894 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003895 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003896 .block_erasers =
3897 {
3898 {
3899 .eraseblocks = { {4 * 1024, 128} },
3900 .block_erase = erase_sector_jedec,
3901 }, {
3902 .eraseblocks = { {512 * 1024, 1} },
3903 .block_erase = erase_chip_block_jedec,
3904 }
3905 },
Sean Nelson35727f72010-01-28 23:55:12 +00003906 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003907 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003908 },
3909
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003910 {
3911 .vendor = "SST",
3912 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00003913 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003914 .manufacture_id = SST_ID,
3915 .model_id = SST_39VF512,
3916 .total_size = 64,
3917 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003918 .feature_bits = FEATURE_EITHER_RESET,
3919 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003920 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003921 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00003922 .block_erasers =
3923 {
3924 {
3925 .eraseblocks = { {4 * 1024, 16} },
3926 .block_erase = erase_sector_jedec,
3927 }, {
3928 .eraseblocks = { {64 * 1024, 1} },
3929 .block_erase = erase_chip_block_jedec,
3930 }
3931 },
Sean Nelson35727f72010-01-28 23:55:12 +00003932 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003933 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003934 },
3935
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003936 {
3937 .vendor = "SST",
3938 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003939 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003940 .manufacture_id = SST_ID,
3941 .model_id = SST_39VF010,
3942 .total_size = 128,
3943 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003944 .feature_bits = FEATURE_EITHER_RESET,
3945 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003946 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003947 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003948 .block_erasers =
3949 {
3950 {
3951 .eraseblocks = { {4 * 1024, 32} },
3952 .block_erase = erase_sector_jedec,
3953 }, {
3954 .eraseblocks = { {128 * 1024, 1} },
3955 .block_erase = erase_chip_block_jedec,
3956 }
3957 },
Sean Nelson35727f72010-01-28 23:55:12 +00003958 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003959 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003960 },
3961
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003962 {
3963 .vendor = "SST",
3964 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003965 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003966 .manufacture_id = SST_ID,
3967 .model_id = SST_39VF020,
3968 .total_size = 256,
3969 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003970 .feature_bits = FEATURE_EITHER_RESET,
3971 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003972 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003973 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003974 .block_erasers =
3975 {
3976 {
3977 .eraseblocks = { {4 * 1024, 64} },
3978 .block_erase = erase_sector_jedec,
3979 }, {
3980 .eraseblocks = { {256 * 1024, 1} },
3981 .block_erase = erase_chip_block_jedec,
3982 }
3983 },
Sean Nelson35727f72010-01-28 23:55:12 +00003984 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003985 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003986 },
3987
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003988 {
3989 .vendor = "SST",
3990 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003991 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003992 .manufacture_id = SST_ID,
3993 .model_id = SST_39VF040,
3994 .total_size = 512,
3995 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003996 .feature_bits = FEATURE_EITHER_RESET,
3997 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003998 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003999 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004000 .block_erasers =
4001 {
4002 {
4003 .eraseblocks = { {4 * 1024, 128} },
4004 .block_erase = erase_sector_jedec,
4005 }, {
4006 .eraseblocks = { {512 * 1024, 1} },
4007 .block_erase = erase_chip_block_jedec,
4008 }
4009 },
Sean Nelson35727f72010-01-28 23:55:12 +00004010 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004011 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004012 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004013
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004014 {
4015 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004016 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004017 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004018 .manufacture_id = SST_ID,
4019 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004020 .total_size = 1024,
4021 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004022 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004023 .tested = TEST_UNTESTED,
4024 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004025 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004026 .block_erasers =
4027 {
4028 {
4029 .eraseblocks = { {4 * 1024, 256} },
4030 .block_erase = erase_sector_jedec,
4031 }, {
4032 .eraseblocks = { {64 * 1024, 16} },
4033 .block_erase = erase_block_jedec,
4034 }, {
4035 .eraseblocks = { {1024 * 1024, 1} },
4036 .block_erase = erase_chip_block_jedec,
4037 }
4038 },
Sean Nelson35727f72010-01-28 23:55:12 +00004039 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004040 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004041 },
4042
4043 {
4044 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004045 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004046 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004047 .manufacture_id = SST_ID,
4048 .model_id = SST_49LF002A,
4049 .total_size = 256,
4050 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004051 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004052 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004053 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004054 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004055 .block_erasers =
4056 {
4057 {
4058 .eraseblocks = { {4 * 1024, 64} },
4059 .block_erase = erase_sst_fwhub_sector,
4060 }, {
4061 .eraseblocks = { {16 * 1024, 16} },
4062 .block_erase = erase_sst_fwhub_block,
4063 }, {
4064 .eraseblocks = { {256 * 1024, 1} },
4065 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4066 }
4067 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004068 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004069 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004070 },
4071
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004072 {
4073 .vendor = "SST",
4074 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004075 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004076 .manufacture_id = SST_ID,
4077 .model_id = SST_49LF003A,
4078 .total_size = 384,
4079 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004080 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004081 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004082 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004083 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004084 .block_erasers =
4085 {
4086 {
4087 .eraseblocks = { {4 * 1024, 96} },
4088 .block_erase = erase_sst_fwhub_sector,
4089 }, {
4090 .eraseblocks = { {64 * 1024, 6} },
4091 .block_erase = erase_sst_fwhub_block,
4092 }, {
4093 .eraseblocks = { {384 * 1024, 1} },
4094 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4095 }
4096 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004097 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004098 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004099 },
4100
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004101 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004102 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4103 * and is only honored for 64k block erase, but not 4k sector erase.
4104 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004105 .vendor = "SST",
4106 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004107 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004108 .manufacture_id = SST_ID,
4109 .model_id = SST_49LF004A,
4110 .total_size = 512,
4111 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004112 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004113 .tested = TEST_OK_PREW,
4114 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004115 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004116 .block_erasers =
4117 {
4118 {
4119 .eraseblocks = { {4 * 1024, 128} },
4120 .block_erase = erase_sector_jedec, /* missing unlock */
4121 }, {
4122 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00004123 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004124 }, {
4125 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004126 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004127 },
4128 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004129 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004130 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004131 },
4132
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004133 {
4134 .vendor = "SST",
4135 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004136 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004137 .manufacture_id = SST_ID,
4138 .model_id = SST_49LF004C,
4139 .total_size = 512,
4140 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004141 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004142 .tested = TEST_UNTESTED,
4143 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004144 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004145 .block_erasers =
4146 {
4147 {
4148 .eraseblocks = { {4 * 1024, 128} },
4149 .block_erase = erase_sector_49lfxxxc,
4150 }, {
4151 .eraseblocks = {
4152 {64 * 1024, 7},
4153 {32 * 1024, 1},
4154 {8 * 1024, 2},
4155 {16 * 1024, 1},
4156 },
4157 .block_erase = erase_block_49lfxxxc,
4158 }
4159 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004160 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004161 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004162 },
4163
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004164 {
4165 .vendor = "SST",
4166 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004167 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004168 .manufacture_id = SST_ID,
4169 .model_id = SST_49LF008A,
4170 .total_size = 1024,
4171 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004172 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004173 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004174 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004175 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004176 .block_erasers =
4177 {
4178 {
4179 .eraseblocks = { {4 * 1024, 256} },
4180 .block_erase = erase_sst_fwhub_sector,
4181 }, {
4182 .eraseblocks = { {64 * 1024, 16} },
4183 .block_erase = erase_sst_fwhub_block,
4184 }, {
4185 .eraseblocks = { {1024 * 1024, 1} },
4186 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4187 }
4188 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004189 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004190 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004191 },
4192
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004193 {
4194 .vendor = "SST",
4195 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004196 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004197 .manufacture_id = SST_ID,
4198 .model_id = SST_49LF008C,
4199 .total_size = 1024,
4200 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004201 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004202 .tested = TEST_UNTESTED,
4203 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004204 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004205 .block_erasers =
4206 {
4207 {
4208 .eraseblocks = { {4 * 1024, 256} },
4209 .block_erase = erase_sector_49lfxxxc,
4210 }, {
4211 .eraseblocks = {
4212 {64 * 1024, 15},
4213 {32 * 1024, 1},
4214 {8 * 1024, 2},
4215 {16 * 1024, 1},
4216 },
4217 .block_erase = erase_block_49lfxxxc,
4218 }
4219 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004220 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004221 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004222 },
4223
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004224 {
4225 .vendor = "SST",
4226 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004227 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004228 .manufacture_id = SST_ID,
4229 .model_id = SST_49LF016C,
4230 .total_size = 2048,
4231 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004232 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004233 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004234 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004235 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004236 .block_erasers =
4237 {
4238 {
4239 .eraseblocks = { {4 * 1024, 512} },
4240 .block_erase = erase_sector_49lfxxxc,
4241 }, {
4242 .eraseblocks = {
4243 {64 * 1024, 31},
4244 {32 * 1024, 1},
4245 {8 * 1024, 2},
4246 {16 * 1024, 1},
4247 },
4248 .block_erase = erase_block_49lfxxxc,
4249 }
4250 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004251 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004252 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004253 },
4254
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004255 {
4256 .vendor = "SST",
4257 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004258 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004259 .manufacture_id = SST_ID,
4260 .model_id = SST_49LF020,
4261 .total_size = 256,
4262 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004263 .feature_bits = FEATURE_EITHER_RESET,
4264 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004265 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004266 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004267 .block_erasers =
4268 {
4269 {
4270 .eraseblocks = { {4 * 1024, 64} },
4271 .block_erase = erase_sector_jedec,
4272 }, {
4273 .eraseblocks = { {16 * 1024, 16} },
4274 .block_erase = erase_block_jedec,
4275 }, {
4276 .eraseblocks = { {256 * 1024, 1} },
4277 .block_erase = NULL,
4278 }
4279 },
Sean Nelson35727f72010-01-28 23:55:12 +00004280 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004281 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004282 },
4283
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004284 {
4285 .vendor = "SST",
4286 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004287 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004288 .manufacture_id = SST_ID,
4289 .model_id = SST_49LF020A,
4290 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004291 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004292 .feature_bits = FEATURE_EITHER_RESET,
4293 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004294 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004295 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004296 .block_erasers =
4297 {
4298 {
4299 .eraseblocks = { {4 * 1024, 64} },
4300 .block_erase = erase_sector_jedec,
4301 }, {
4302 .eraseblocks = { {16 * 1024, 16} },
4303 .block_erase = erase_block_jedec,
4304 }, {
4305 .eraseblocks = { {256 * 1024, 1} },
4306 .block_erase = NULL,
4307 }
4308 },
Sean Nelson35727f72010-01-28 23:55:12 +00004309 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004310 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004311 },
4312
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004313 {
4314 .vendor = "SST",
4315 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004316 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004317 .manufacture_id = SST_ID,
4318 .model_id = SST_49LF040,
4319 .total_size = 512,
4320 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004321 .feature_bits = FEATURE_EITHER_RESET,
4322 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004323 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004324 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004325 .block_erasers =
4326 {
4327 {
4328 .eraseblocks = { {4 * 1024, 128} },
4329 .block_erase = erase_sector_jedec,
4330 }, {
4331 .eraseblocks = { {64 * 1024, 8} },
4332 .block_erase = erase_block_jedec,
4333 }, {
4334 .eraseblocks = { {512 * 1024, 1} },
4335 .block_erase = NULL,
4336 }
4337 },
Sean Nelson35727f72010-01-28 23:55:12 +00004338 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004339 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004340 },
4341
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004342 {
4343 .vendor = "SST",
4344 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004345 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004346 .manufacture_id = SST_ID,
4347 .model_id = SST_49LF040B,
4348 .total_size = 512,
4349 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004350 .feature_bits = FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004351 .tested = TEST_UNTESTED,
4352 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004353 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004354 .block_erasers =
4355 {
4356 {
4357 .eraseblocks = { {4 * 1024, 128} },
4358 .block_erase = erase_sector_jedec,
4359 }, {
4360 .eraseblocks = { {64 * 1024, 8} },
4361 .block_erase = erase_block_jedec,
4362 }, {
4363 .eraseblocks = { {512 * 1024, 1} },
4364 .block_erase = NULL,
4365 }
4366 },
Sean Nelson35727f72010-01-28 23:55:12 +00004367 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004368 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004369 },
4370
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004371 {
4372 .vendor = "SST",
4373 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004374 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004375 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004376 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004377 .total_size = 1024,
4378 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004379 .feature_bits = FEATURE_EITHER_RESET,
4380 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004381 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004382 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004383 .block_erasers =
4384 {
4385 {
4386 .eraseblocks = { {4 * 1024, 256} },
4387 .block_erase = erase_sector_jedec,
4388 }, {
4389 .eraseblocks = { {64 * 1024, 16} },
4390 .block_erase = erase_block_jedec,
4391 }, {
4392 .eraseblocks = { {1024 * 1024, 1} },
4393 .block_erase = NULL,
4394 }
4395 },
Sean Nelson35727f72010-01-28 23:55:12 +00004396 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004397 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004398 },
4399
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004400 {
4401 .vendor = "SST",
4402 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004403 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004404 .manufacture_id = SST_ID,
4405 .model_id = SST_49LF160C,
4406 .total_size = 2048,
4407 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004408 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004409 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004410 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004411 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004412 .block_erasers =
4413 {
4414 {
4415 .eraseblocks = { {4 * 1024, 512} },
4416 .block_erase = erase_sector_49lfxxxc,
4417 }, {
4418 .eraseblocks = {
4419 {64 * 1024, 31},
4420 {32 * 1024, 1},
4421 {8 * 1024, 2},
4422 {16 * 1024, 1},
4423 },
4424 .block_erase = erase_block_49lfxxxc,
4425 }
4426 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004427 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004428 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004429 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004430 },
4431
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004432 {
4433 .vendor = "ST",
4434 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004435 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004436 .manufacture_id = ST_ID,
4437 .model_id = ST_M25P05A,
4438 .total_size = 64,
4439 .page_size = 256,
4440 .tested = TEST_UNTESTED,
4441 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004442 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004443 .block_erasers =
4444 {
4445 {
4446 .eraseblocks = { {32 * 1024, 2} },
4447 .block_erase = spi_block_erase_d8,
4448 }, {
4449 .eraseblocks = { {64 * 1024, 1} },
4450 .block_erase = spi_block_erase_c7,
4451 }
4452 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004453 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004454 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004455 },
4456
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004457 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4458 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
4459 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
4460 * only is successful if RDID does not work.
4461 */
4462 {
4463 .vendor = "ST",
4464 .name = "M25P05.RES",
4465 .bustype = CHIP_BUSTYPE_SPI,
4466 .manufacture_id = ST_ID,
4467 .model_id = ST_M25P05_RES,
4468 .total_size = 64,
4469 .page_size = 256,
4470 .tested = TEST_UNTESTED,
4471 .probe = probe_spi_res,
4472 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004473 .block_erasers =
4474 {
4475 {
4476 .eraseblocks = { {32 * 1024, 2} },
4477 .block_erase = spi_block_erase_d8,
4478 }, {
4479 .eraseblocks = { {64 * 1024, 1} },
4480 .block_erase = spi_block_erase_c7,
4481 }
4482 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004483 .write = spi_chip_write_1, /* 128 */
4484 .read = spi_chip_read,
4485 },
4486
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004487 {
4488 .vendor = "ST",
4489 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004490 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004491 .manufacture_id = ST_ID,
4492 .model_id = ST_M25P10A,
4493 .total_size = 128,
4494 .page_size = 256,
4495 .tested = TEST_UNTESTED,
4496 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004497 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004498 .block_erasers =
4499 {
4500 {
4501 .eraseblocks = { {32 * 1024, 4} },
4502 .block_erase = spi_block_erase_d8,
4503 }, {
4504 .eraseblocks = { {128 * 1024, 1} },
4505 .block_erase = spi_block_erase_c7,
4506 }
4507 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004508 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004509 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004510 },
4511
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004512 /* The ST M25P10 has the same problem as the M25P05. */
4513 {
4514 .vendor = "ST",
4515 .name = "M25P10.RES",
4516 .bustype = CHIP_BUSTYPE_SPI,
4517 .manufacture_id = ST_ID,
4518 .model_id = ST_M25P10_RES,
4519 .total_size = 128,
4520 .page_size = 256,
4521 .tested = TEST_UNTESTED,
4522 .probe = probe_spi_res,
4523 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004524 .block_erasers =
4525 {
4526 {
4527 .eraseblocks = { {32 * 1024, 4} },
4528 .block_erase = spi_block_erase_d8,
4529 }, {
4530 .eraseblocks = { {128 * 1024, 1} },
4531 .block_erase = spi_block_erase_c7,
4532 }
4533 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004534 .write = spi_chip_write_1, /* 128 */
4535 .read = spi_chip_read,
4536 },
4537
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004538 {
4539 .vendor = "ST",
4540 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004541 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004542 .manufacture_id = ST_ID,
4543 .model_id = ST_M25P20,
4544 .total_size = 256,
4545 .page_size = 256,
4546 .tested = TEST_UNTESTED,
4547 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004548 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004549 .block_erasers =
4550 {
4551 {
4552 .eraseblocks = { {64 * 1024, 4} },
4553 .block_erase = spi_block_erase_d8,
4554 }, {
4555 .eraseblocks = { {256 * 1024, 1} },
4556 .block_erase = spi_block_erase_c7,
4557 }
4558 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004559 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004560 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004561 },
4562
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004563 {
4564 .vendor = "ST",
4565 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004566 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004567 .manufacture_id = ST_ID,
4568 .model_id = ST_M25P40,
4569 .total_size = 512,
4570 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004571 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004572 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004573 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004574 .block_erasers =
4575 {
4576 {
4577 .eraseblocks = { {64 * 1024, 8} },
4578 .block_erase = spi_block_erase_d8,
4579 }, {
4580 .eraseblocks = { {512 * 1024, 1} },
4581 .block_erase = spi_block_erase_c7,
4582 }
4583 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004584 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004585 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004586 },
4587
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004588 {
4589 .vendor = "ST",
4590 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004591 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004592 .manufacture_id = ST_ID,
4593 .model_id = ST_M25P40_RES,
4594 .total_size = 512,
4595 .page_size = 256,
4596 .tested = TEST_UNTESTED,
4597 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004598 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004599 .block_erasers =
4600 {
4601 {
4602 .eraseblocks = { {64 * 1024, 8} },
4603 .block_erase = spi_block_erase_d8,
4604 }, {
4605 .eraseblocks = { {512 * 1024, 1} },
4606 .block_erase = spi_block_erase_c7,
4607 }
4608 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004609 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004610 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004611 },
4612
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004613 {
4614 .vendor = "ST",
4615 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004616 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004617 .manufacture_id = ST_ID,
4618 .model_id = ST_M25P80,
4619 .total_size = 1024,
4620 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004621 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004622 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004623 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004624 .block_erasers =
4625 {
4626 {
4627 .eraseblocks = { {64 * 1024, 16} },
4628 .block_erase = spi_block_erase_d8,
4629 }, {
4630 .eraseblocks = { {1024 * 1024, 1} },
4631 .block_erase = spi_block_erase_c7,
4632 }
4633 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004634 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004635 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004636 },
4637
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004638 {
4639 .vendor = "ST",
4640 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004641 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004642 .manufacture_id = ST_ID,
4643 .model_id = ST_M25P16,
4644 .total_size = 2048,
4645 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004646 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004647 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004648 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004649 .block_erasers =
4650 {
4651 {
4652 .eraseblocks = { {64 * 1024, 32} },
4653 .block_erase = spi_block_erase_d8,
4654 }, {
4655 .eraseblocks = { {2 * 1024 * 1024, 1} },
4656 .block_erase = spi_block_erase_c7,
4657 }
4658 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004659 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004660 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004661 },
4662
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004663 {
4664 .vendor = "ST",
4665 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004666 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004667 .manufacture_id = ST_ID,
4668 .model_id = ST_M25P32,
4669 .total_size = 4096,
4670 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004671 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004672 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004673 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004674 .block_erasers =
4675 {
4676 {
4677 .eraseblocks = { {64 * 1024, 64} },
4678 .block_erase = spi_block_erase_d8,
4679 }, {
4680 .eraseblocks = { {4 * 1024 * 1024, 1} },
4681 .block_erase = spi_block_erase_c7,
4682 }
4683 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004684 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004685 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004686 },
4687
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004688 {
4689 .vendor = "ST",
4690 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004691 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004692 .manufacture_id = ST_ID,
4693 .model_id = ST_M25P64,
4694 .total_size = 8192,
4695 .page_size = 256,
4696 .tested = TEST_UNTESTED,
4697 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004698 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004699 .block_erasers =
4700 {
4701 {
4702 .eraseblocks = { {64 * 1024, 128} },
4703 .block_erase = spi_block_erase_d8,
4704 }, {
4705 .eraseblocks = { {8 * 1024 * 1024, 1} },
4706 .block_erase = spi_block_erase_c7,
4707 }
4708 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004709 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004710 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004711 },
4712
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004713 {
4714 .vendor = "ST",
4715 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004716 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004717 .manufacture_id = ST_ID,
4718 .model_id = ST_M25P128,
4719 .total_size = 16384,
4720 .page_size = 256,
4721 .tested = TEST_UNTESTED,
4722 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004723 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004724 .block_erasers =
4725 {
4726 {
4727 .eraseblocks = { {256 * 1024, 64} },
4728 .block_erase = spi_block_erase_d8,
4729 }, {
4730 .eraseblocks = { {16 * 1024 * 1024, 1} },
4731 .block_erase = spi_block_erase_c7,
4732 }
4733 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004734 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004735 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004736 },
4737
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004738 {
4739 .vendor = "ST",
4740 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004741 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004742 .manufacture_id = ST_ID,
4743 .model_id = ST_M29F002B,
4744 .total_size = 256,
4745 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004746 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004747 .tested = TEST_UNTESTED,
4748 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004749 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004750 .block_erasers =
4751 {
4752 {
4753 .eraseblocks = {
4754 {16 * 1024, 1},
4755 {8 * 1024, 2},
4756 {32 * 1024, 1},
4757 {64 * 1024, 3},
4758 },
4759 .block_erase = erase_sector_jedec,
4760 }, {
4761 .eraseblocks = { {256 * 1024, 1} },
4762 .block_erase = erase_chip_block_jedec,
4763 }
4764 },
Sean Nelson35727f72010-01-28 23:55:12 +00004765 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004766 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004767 },
4768
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004769 {
4770 .vendor = "ST",
4771 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004772 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004773 .manufacture_id = ST_ID,
4774 .model_id = ST_M29F002T,
4775 .total_size = 256,
4776 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004777 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
4778 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004779 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004780 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004781 .block_erasers =
4782 {
4783 {
4784 .eraseblocks = {
4785 {64 * 1024, 3},
4786 {32 * 1024, 1},
4787 {8 * 1024, 2},
4788 {16 * 1024, 1},
4789 },
4790 .block_erase = erase_sector_jedec,
4791 }, {
4792 .eraseblocks = { {256 * 1024, 1} },
4793 .block_erase = erase_chip_block_jedec,
4794 }
4795 },
Sean Nelson35727f72010-01-28 23:55:12 +00004796 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004797 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004798 },
4799
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004800 {
4801 .vendor = "ST",
4802 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004803 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004804 .manufacture_id = ST_ID,
4805 .model_id = ST_M29F040B,
4806 .total_size = 512,
4807 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004808 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4809 .tested = TEST_UNTESTED,
4810 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004811 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004812 .block_erasers =
4813 {
4814 {
4815 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004816 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004817 }, {
4818 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004819 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004820 }
4821 },
Sean Nelson35727f72010-01-28 23:55:12 +00004822 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004823 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004824 },
4825
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004826 {
Sean Nelson35727f72010-01-28 23:55:12 +00004827 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004828 .vendor = "ST",
4829 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004830 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004831 .manufacture_id = ST_ID,
4832 .model_id = ST_M29F400BT,
4833 .total_size = 512,
4834 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004835 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004836 .tested = TEST_UNTESTED,
4837 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004838 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004839 .block_erasers =
4840 {
4841 {
4842 .eraseblocks = {
4843 {64 * 1024, 7},
4844 {32 * 1024, 1},
4845 {8 * 1024, 2},
4846 {16 * 1024, 1},
4847 },
4848 .block_erase = block_erase_m29f400bt,
4849 }, {
4850 .eraseblocks = { {512 * 1024, 1} },
4851 .block_erase = block_erase_chip_m29f400bt,
4852 }
4853 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004854 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004855 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004856 },
4857
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004858 {
4859 .vendor = "ST",
4860 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004861 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004862 .manufacture_id = ST_ID,
4863 .model_id = ST_M29W010B,
4864 .total_size = 128,
4865 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004866 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004867 .tested = TEST_UNTESTED,
4868 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004869 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004870 .block_erasers =
4871 {
4872 {
4873 .eraseblocks = { {16 * 1024, 8}, },
4874 .block_erase = erase_sector_jedec,
4875 }, {
4876 .eraseblocks = { {128 * 1024, 1} },
4877 .block_erase = erase_chip_block_jedec,
4878 }
4879 },
Sean Nelson35727f72010-01-28 23:55:12 +00004880 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004881 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004882 },
4883
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004884 {
4885 .vendor = "ST",
4886 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004887 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004888 .manufacture_id = ST_ID,
4889 .model_id = ST_M29W040B,
4890 .total_size = 512,
4891 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004892 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004893 .tested = TEST_UNTESTED,
4894 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004895 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004896 .block_erasers =
4897 {
4898 {
4899 .eraseblocks = { {64 * 1024, 8}, },
4900 .block_erase = erase_sector_jedec,
4901 }, {
4902 .eraseblocks = { {512 * 1024, 1} },
4903 .block_erase = erase_chip_block_jedec,
4904 }
4905 },
Sean Nelson35727f72010-01-28 23:55:12 +00004906 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004907 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004908 },
4909
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004910 {
4911 .vendor = "ST",
4912 .name = "M29W512B",
4913 .bustype = CHIP_BUSTYPE_PARALLEL,
4914 .manufacture_id = ST_ID,
4915 .model_id = ST_M29W512B,
4916 .total_size = 64,
4917 .page_size = 64 * 1024,
4918 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4919 .tested = TEST_OK_PREW,
4920 .probe = probe_jedec,
4921 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004922 .block_erasers =
4923 {
4924 {
4925 .eraseblocks = { {64 * 1024, 1} },
4926 .block_erase = erase_chip_block_jedec,
4927 }
4928 },
4929 .write = write_jedec_1,
4930 .read = read_memmapped,
4931 },
4932
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004933 {
4934 .vendor = "ST",
4935 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00004936 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004937 .manufacture_id = ST_ID,
4938 .model_id = ST_M50FLW040A,
4939 .total_size = 512,
4940 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004941 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004942 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004943 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004944 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004945 .block_erasers =
4946 {
4947 {
Sean Nelson329bde72010-01-19 16:39:19 +00004948 .eraseblocks = {
4949 {4 * 1024, 16}, /* sector */
4950 {64 * 1024, 5}, /* block */
4951 {4 * 1024, 16}, /* sector */
4952 {4 * 1024, 16}, /* sector */
4953 },
4954 .block_erase = NULL,
4955 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004956 .eraseblocks = { {64 * 1024, 8}, },
4957 .block_erase = erase_block_stm50flw0x0x,
4958 }, {
4959 .eraseblocks = { {512 * 1024, 1} },
4960 .block_erase = erase_chip_stm50flw0x0x,
4961 }
4962 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004963 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004964 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004965 },
4966
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004967 {
4968 .vendor = "ST",
4969 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00004970 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004971 .manufacture_id = ST_ID,
4972 .model_id = ST_M50FLW040B,
4973 .total_size = 512,
4974 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004975 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004976 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004977 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004978 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004979 .block_erasers =
4980 {
4981 {
Sean Nelson329bde72010-01-19 16:39:19 +00004982 .eraseblocks = {
4983 {4 * 1024, 16}, /* sector */
4984 {4 * 1024, 16}, /* sector */
4985 {64 * 1024, 5}, /* block */
4986 {4 * 1024, 16}, /* sector */
4987 },
4988 .block_erase = NULL,
4989 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004990 .eraseblocks = { {64 * 1024, 8}, },
4991 .block_erase = erase_block_stm50flw0x0x,
4992 }, {
4993 .eraseblocks = { {512 * 1024, 1} },
4994 .block_erase = erase_chip_stm50flw0x0x,
4995 }
4996 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004997 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004998 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004999 },
5000
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005001 {
5002 .vendor = "ST",
5003 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005004 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005005 .manufacture_id = ST_ID,
5006 .model_id = ST_M50FLW080A,
5007 .total_size = 1024,
5008 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005009 .feature_bits = 0,
5010 .tested = TEST_UNTESTED,
5011 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005012 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005013 .block_erasers =
5014 {
5015 {
Sean Nelson329bde72010-01-19 16:39:19 +00005016 .eraseblocks = {
5017 {4 * 1024, 16}, /* sector */
5018 {64 * 1024, 13}, /* block */
5019 {4 * 1024, 16}, /* sector */
5020 {4 * 1024, 16}, /* sector */
5021 },
5022 .block_erase = NULL,
5023 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005024 .eraseblocks = { {64 * 1024, 16}, },
5025 .block_erase = erase_block_stm50flw0x0x,
5026 }, {
5027 .eraseblocks = { {1024 * 1024, 1} },
5028 .block_erase = erase_chip_stm50flw0x0x,
5029 }
5030 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005031 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005032 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005033 },
5034
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005035 {
5036 .vendor = "ST",
5037 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005038 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005039 .manufacture_id = ST_ID,
5040 .model_id = ST_M50FLW080B,
5041 .total_size = 1024,
5042 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005043 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005044 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005045 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005046 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005047 .block_erasers =
5048 {
5049 {
Sean Nelson329bde72010-01-19 16:39:19 +00005050 .eraseblocks = {
5051 {4 * 1024, 16}, /* sector */
5052 {4 * 1024, 16}, /* sector */
5053 {64 * 1024, 13}, /* block */
5054 {4 * 1024, 16}, /* sector */
5055 },
5056 .block_erase = NULL,
5057 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005058 .eraseblocks = { {64 * 1024, 16}, },
5059 .block_erase = erase_block_stm50flw0x0x,
5060 }, {
5061 .eraseblocks = { {1024 * 1024, 1} },
5062 .block_erase = erase_chip_stm50flw0x0x,
5063 }
5064 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005065 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005066 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005067 },
5068
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005069 {
5070 .vendor = "ST",
5071 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005072 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005073 .manufacture_id = ST_ID,
5074 .model_id = ST_M50FW002,
5075 .total_size = 256,
5076 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005077 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005078 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005079 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005080 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005081 .block_erasers =
5082 {
5083 {
5084 .eraseblocks = {
5085 {64 * 1024, 3},
5086 {32 * 1024, 1},
5087 {8 * 1024, 2},
5088 {16 * 1024, 1},
5089 },
5090 .block_erase = erase_block_stm50flw0x0x,
5091 }, {
5092 .eraseblocks = { {256 * 1024, 1} },
5093 .block_erase = erase_chip_stm50flw0x0x,
5094 }
5095 },
Sean Nelson35727f72010-01-28 23:55:12 +00005096 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005097 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005098 },
5099
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005100 {
5101 .vendor = "ST",
5102 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005103 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005104 .manufacture_id = ST_ID,
5105 .model_id = ST_M50FW016,
5106 .total_size = 2048,
5107 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005108 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005109 .tested = TEST_UNTESTED,
5110 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005111 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005112 .block_erasers =
5113 {
5114 {
5115 .eraseblocks = { {64 * 1024, 32}, },
5116 .block_erase = erase_block_stm50flw0x0x,
5117 }, {
5118 .eraseblocks = { {2 * 1024 * 1024, 1} },
5119 .block_erase = erase_chip_stm50flw0x0x,
5120 }
5121 },
5122 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005123 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005124 },
5125
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005126 {
5127 .vendor = "ST",
5128 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005129 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005130 .manufacture_id = ST_ID,
5131 .model_id = ST_M50FW040,
5132 .total_size = 512,
5133 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005134 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005135 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005136 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005137 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005138 .block_erasers =
5139 {
5140 {
5141 .eraseblocks = { {64 * 1024, 8}, },
5142 .block_erase = erase_block_stm50flw0x0x,
5143 }, {
5144 .eraseblocks = { {512 * 1024, 1} },
5145 .block_erase = erase_chip_stm50flw0x0x,
5146 }
5147 },
5148 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005149 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005150 },
5151
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005152 {
5153 .vendor = "ST",
5154 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005155 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005156 .manufacture_id = ST_ID,
5157 .model_id = ST_M50FW080,
5158 .total_size = 1024,
5159 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005160 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005161 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005162 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005163 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005164 .block_erasers =
5165 {
5166 {
5167 .eraseblocks = { {64 * 1024, 16}, },
5168 .block_erase = erase_block_stm50flw0x0x,
5169 }, {
5170 .eraseblocks = { {1024 * 1024, 1} },
5171 .block_erase = erase_chip_stm50flw0x0x,
5172 }
5173 },
5174 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005175 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005176 },
5177
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005178 {
5179 .vendor = "ST",
5180 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005181 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005182 .manufacture_id = ST_ID,
5183 .model_id = ST_M50LPW116,
5184 .total_size = 2048,
5185 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005186 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005187 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005188 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005189 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005190 .block_erasers =
5191 {
5192 {
5193 .eraseblocks = {
5194 {4 * 1024, 16},
5195 {64 * 1024, 30},
5196 {32 * 1024, 1},
5197 {8 * 1024, 2},
5198 {16 * 1024, 1},
5199 },
5200 .block_erase = erase_block_stm50flw0x0x,
5201 }, {
5202 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005203 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005204 }
5205 },
Sean Nelson35727f72010-01-28 23:55:12 +00005206 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005207 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005208 },
5209
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005210 {
5211 .vendor = "SyncMOS",
5212 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005213 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005214 .manufacture_id = SYNCMOS_ID,
5215 .model_id = S29C31004T,
5216 .total_size = 512,
5217 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005218 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005219 .tested = TEST_UNTESTED,
5220 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005221 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005222 .block_erasers =
5223 {
5224 {
5225 .eraseblocks = { {1 * 1024, 512} },
5226 .block_erase = erase_sector_jedec,
5227 }, {
5228 .eraseblocks = { {512 * 1024, 1} },
5229 .block_erase = erase_chip_block_jedec,
5230 },
5231 },
Sean Nelson35727f72010-01-28 23:55:12 +00005232 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005233 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005234 },
5235
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005236 {
5237 .vendor = "SyncMOS",
5238 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005239 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005240 .manufacture_id = SYNCMOS_ID,
5241 .model_id = S29C51001T,
5242 .total_size = 128,
5243 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005244 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005245 .tested = TEST_UNTESTED,
5246 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005247 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005248 .block_erasers =
5249 {
5250 {
5251 .eraseblocks = { {512, 256} },
5252 .block_erase = erase_sector_jedec,
5253 }, {
5254 .eraseblocks = { {128 * 1024, 1} },
5255 .block_erase = erase_chip_block_jedec,
5256 },
5257 },
Sean Nelson35727f72010-01-28 23:55:12 +00005258 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005259 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005260 },
5261
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005262 {
5263 .vendor = "SyncMOS",
5264 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005265 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005266 .manufacture_id = SYNCMOS_ID,
5267 .model_id = S29C51002T,
5268 .total_size = 256,
5269 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005270 .feature_bits = FEATURE_EITHER_RESET,
5271 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005272 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005273 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005274 .block_erasers =
5275 {
5276 {
5277 .eraseblocks = { {512, 512} },
5278 .block_erase = erase_sector_jedec,
5279 }, {
5280 .eraseblocks = { {256 * 1024, 1} },
5281 .block_erase = erase_chip_block_jedec,
5282 },
5283 },
Sean Nelson35727f72010-01-28 23:55:12 +00005284 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005285 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005286 },
5287
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005288 {
5289 .vendor = "SyncMOS",
5290 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005291 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005292 .manufacture_id = SYNCMOS_ID,
5293 .model_id = S29C51004T,
5294 .total_size = 512,
5295 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005296 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005297 .tested = TEST_UNTESTED,
5298 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005299 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005300 .block_erasers =
5301 {
5302 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005303 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005304 .block_erase = erase_sector_jedec,
5305 }, {
5306 .eraseblocks = { {512 * 1024, 1} },
5307 .block_erase = erase_chip_block_jedec,
5308 },
5309 },
Sean Nelson35727f72010-01-28 23:55:12 +00005310 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005311 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005312 },
5313
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005314 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005315 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005316 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005317 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005318 .manufacture_id = TI_OLD_ID,
5319 .model_id = TI_TMS29F002RB,
5320 .total_size = 256,
5321 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005322 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005323 .tested = TEST_UNTESTED,
5324 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005325 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005326 .block_erasers =
5327 {
5328 {
5329 .eraseblocks = {
5330 {16 * 1024, 1},
5331 {8 * 1024, 2},
5332 {32 * 1024, 1},
5333 {64 * 1024, 3},
5334 },
5335 .block_erase = erase_sector_jedec,
5336 }, {
5337 .eraseblocks = { {256 * 1024, 1} },
5338 .block_erase = erase_chip_block_jedec,
5339 },
5340 },
Sean Nelson35727f72010-01-28 23:55:12 +00005341 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005342 .read = read_memmapped,
5343 },
5344
5345 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005346 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005347 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005348 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005349 .manufacture_id = TI_OLD_ID,
5350 .model_id = TI_TMS29F002RT,
5351 .total_size = 256,
5352 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005353 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005354 .tested = TEST_UNTESTED,
5355 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005356 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005357 .block_erasers =
5358 {
5359 {
5360 .eraseblocks = {
5361 {64 * 1024, 3},
5362 {32 * 1024, 1},
5363 {8 * 1024, 2},
5364 {16 * 1024, 1},
5365 },
5366 .block_erase = erase_sector_jedec,
5367 }, {
5368 .eraseblocks = { {256 * 1024, 1} },
5369 .block_erase = erase_chip_block_jedec,
5370 },
5371 },
Sean Nelson35727f72010-01-28 23:55:12 +00005372 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005373 .read = read_memmapped,
5374 },
5375
5376 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005377 .vendor = "Winbond",
5378 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005379 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005380 .manufacture_id = WINBOND_NEX_ID,
5381 .model_id = W_25X10,
5382 .total_size = 128,
5383 .page_size = 256,
5384 .tested = TEST_UNTESTED,
5385 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005386 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005387 .block_erasers =
5388 {
5389 {
5390 .eraseblocks = { {4 * 1024, 32} },
5391 .block_erase = spi_block_erase_20,
5392 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005393 .eraseblocks = { {64 * 1024, 2} },
5394 .block_erase = spi_block_erase_d8,
5395 }, {
5396 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005397 .block_erase = spi_block_erase_c7,
5398 }
5399 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005400 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005401 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005402 },
5403
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005404 {
5405 .vendor = "Winbond",
5406 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005407 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005408 .manufacture_id = WINBOND_NEX_ID,
5409 .model_id = W_25X20,
5410 .total_size = 256,
5411 .page_size = 256,
5412 .tested = TEST_UNTESTED,
5413 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005414 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005415 .block_erasers =
5416 {
5417 {
5418 .eraseblocks = { {4 * 1024, 64} },
5419 .block_erase = spi_block_erase_20,
5420 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005421 .eraseblocks = { {64 * 1024, 4} },
5422 .block_erase = spi_block_erase_d8,
5423 }, {
5424 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005425 .block_erase = spi_block_erase_c7,
5426 }
5427 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005428 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005429 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005430 },
5431
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005432 {
5433 .vendor = "Winbond",
5434 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005435 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005436 .manufacture_id = WINBOND_NEX_ID,
5437 .model_id = W_25X40,
5438 .total_size = 512,
5439 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005440 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005441 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005442 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005443 .block_erasers =
5444 {
5445 {
5446 .eraseblocks = { {4 * 1024, 128} },
5447 .block_erase = spi_block_erase_20,
5448 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005449 .eraseblocks = { {64 * 1024, 8} },
5450 .block_erase = spi_block_erase_d8,
5451 }, {
5452 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005453 .block_erase = spi_block_erase_c7,
5454 }
5455 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005456 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005457 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005458 },
5459
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005460 {
5461 .vendor = "Winbond",
5462 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005463 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005464 .manufacture_id = WINBOND_NEX_ID,
5465 .model_id = W_25X80,
5466 .total_size = 1024,
5467 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005468 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005469 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005470 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005471 .block_erasers =
5472 {
5473 {
5474 .eraseblocks = { {4 * 1024, 256} },
5475 .block_erase = spi_block_erase_20,
5476 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005477 .eraseblocks = { {64 * 1024, 16} },
5478 .block_erase = spi_block_erase_d8,
5479 }, {
5480 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005481 .block_erase = spi_block_erase_c7,
5482 }
5483 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005484 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005485 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005486 },
5487
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005488 {
5489 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005490 .name = "W25x16",
5491 .bustype = CHIP_BUSTYPE_SPI,
5492 .manufacture_id = WINBOND_NEX_ID,
5493 .model_id = W_25X16,
5494 .total_size = 2048,
5495 .page_size = 256,
5496 .tested = TEST_OK_PR,
5497 .probe = probe_spi_rdid,
5498 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005499 .block_erasers =
5500 {
5501 {
5502 .eraseblocks = { {4 * 1024, 512} },
5503 .block_erase = spi_block_erase_20,
5504 }, {
5505 .eraseblocks = { {32 * 1024, 64} },
5506 .block_erase = spi_block_erase_52,
5507 }, {
5508 .eraseblocks = { {64 * 1024, 32} },
5509 .block_erase = spi_block_erase_d8,
5510 }, {
5511 .eraseblocks = { {2 * 1024 * 1024, 1} },
5512 .block_erase = spi_block_erase_60,
5513 }, {
5514 .eraseblocks = { {2 * 1024 * 1024, 1} },
5515 .block_erase = spi_block_erase_c7,
5516 }
5517 },
Hector Martina721ae22009-07-11 19:39:11 +00005518 .write = spi_chip_write_256,
5519 .read = spi_chip_read,
5520 },
5521
5522 {
5523 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005524 .name = "W25x32",
5525 .bustype = CHIP_BUSTYPE_SPI,
5526 .manufacture_id = WINBOND_NEX_ID,
5527 .model_id = W_25X32,
5528 .total_size = 4096,
5529 .page_size = 256,
5530 .tested = TEST_OK_PROBE,
5531 .probe = probe_spi_rdid,
5532 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005533 .block_erasers =
5534 {
5535 {
5536 .eraseblocks = { {4 * 1024, 1024} },
5537 .block_erase = spi_block_erase_20,
5538 }, {
5539 .eraseblocks = { {32 * 1024, 128} },
5540 .block_erase = spi_block_erase_52,
5541 }, {
5542 .eraseblocks = { {64 * 1024, 64} },
5543 .block_erase = spi_block_erase_d8,
5544 }, {
5545 .eraseblocks = { {4 * 1024 * 1024, 1} },
5546 .block_erase = spi_block_erase_60,
5547 }, {
5548 .eraseblocks = { {4 * 1024 * 1024, 1} },
5549 .block_erase = spi_block_erase_c7,
5550 }
5551 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005552 .write = spi_chip_write_256,
5553 .read = spi_chip_read,
5554 },
5555
5556 {
5557 .vendor = "Winbond",
5558 .name = "W25x64",
5559 .bustype = CHIP_BUSTYPE_SPI,
5560 .manufacture_id = WINBOND_NEX_ID,
5561 .model_id = W_25X64,
5562 .total_size = 8192,
5563 .page_size = 256,
5564 .tested = TEST_UNTESTED,
5565 .probe = probe_spi_rdid,
5566 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005567 .block_erasers =
5568 {
5569 {
5570 .eraseblocks = { {4 * 1024, 2048} },
5571 .block_erase = spi_block_erase_20,
5572 }, {
5573 .eraseblocks = { {32 * 1024, 256} },
5574 .block_erase = spi_block_erase_52,
5575 }, {
5576 .eraseblocks = { {64 * 1024, 128} },
5577 .block_erase = spi_block_erase_d8,
5578 }, {
5579 .eraseblocks = { {8 * 1024 * 1024, 1} },
5580 .block_erase = spi_block_erase_60,
5581 }, {
5582 .eraseblocks = { {8 * 1024 * 1024, 1} },
5583 .block_erase = spi_block_erase_c7,
5584 }
5585 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005586 .write = spi_chip_write_256,
5587 .read = spi_chip_read,
5588 },
5589
5590 {
5591 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005592 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005593 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005594 .manufacture_id = WINBOND_ID,
5595 .model_id = W_29C011,
5596 .total_size = 128,
5597 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005598 .feature_bits = FEATURE_LONG_RESET,
5599 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005600 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005601 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005602 .block_erasers =
5603 {
5604 {
5605 .eraseblocks = { {128 * 1024, 1} },
5606 .block_erase = erase_chip_block_jedec,
5607 }
5608 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005609 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005610 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005611 },
5612
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005613 {
5614 .vendor = "Winbond",
5615 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005616 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005617 .manufacture_id = WINBOND_ID,
5618 .model_id = W_29C020C,
5619 .total_size = 256,
5620 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005621 .feature_bits = FEATURE_LONG_RESET,
5622 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005623 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005624 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005625 .block_erasers =
5626 {
5627 {
5628 .eraseblocks = { {256 * 1024, 1} },
5629 .block_erase = erase_chip_block_jedec,
5630 }
5631 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005632 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005633 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005634 },
5635
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005636 {
5637 .vendor = "Winbond",
5638 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005639 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005640 .manufacture_id = WINBOND_ID,
5641 .model_id = W_29C040P,
5642 .total_size = 512,
5643 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005644 .feature_bits = FEATURE_LONG_RESET,
5645 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005646 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005647 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005648 .block_erasers =
5649 {
5650 {
5651 .eraseblocks = { {512 * 1024, 1} },
5652 .block_erase = erase_chip_block_jedec,
5653 }
5654 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005655 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005656 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005657 },
5658
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005659 {
5660 .vendor = "Winbond",
5661 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005662 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005663 .manufacture_id = WINBOND_ID,
5664 .model_id = W_29C011,
5665 .total_size = 128,
5666 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005667 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005668 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005669 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005670 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005671 .block_erasers =
5672 {
5673 {
5674 .eraseblocks = { {128 * 1024, 1} },
5675 .block_erase = erase_chip_block_jedec,
5676 }
5677 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005678 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005679 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005680 },
5681
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005682 {
5683 .vendor = "Winbond",
5684 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005685 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005686 .manufacture_id = WINBOND_ID,
5687 .model_id = W_39V040A,
5688 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005689 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005690 .feature_bits = FEATURE_EITHER_RESET,
5691 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005692 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005693 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005694 .block_erasers =
5695 {
5696 {
5697 .eraseblocks = { {64 * 1024, 8} },
5698 .block_erase = erase_sector_jedec,
5699 }, {
5700 .eraseblocks = { {512 * 1024, 1} },
5701 .block_erase = erase_chip_block_jedec,
5702 }
5703 },
Sean Nelson35727f72010-01-28 23:55:12 +00005704 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005705 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005706 },
5707
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005708 {
5709 .vendor = "Winbond",
5710 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005711 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005712 .manufacture_id = WINBOND_ID,
5713 .model_id = W_39V040B,
5714 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005715 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005716 .feature_bits = FEATURE_EITHER_RESET,
5717 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005718 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005719 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005720 .block_erasers =
5721 {
5722 {
5723 .eraseblocks = { {64 * 1024, 8} },
5724 .block_erase = erase_sector_jedec,
5725 }, {
5726 .eraseblocks = { {512 * 1024, 1} },
5727 .block_erase = erase_chip_block_jedec,
5728 }
5729 },
Sean Nelson35727f72010-01-28 23:55:12 +00005730 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005731 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005732 },
5733
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005734 {
5735 .vendor = "Winbond",
5736 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005737 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005738 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005739 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005740 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005741 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005742 .feature_bits = FEATURE_EITHER_RESET,
5743 .tested = TEST_UNTESTED,
5744 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005745 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005746 .block_erasers =
5747 {
5748 {
5749 .eraseblocks = { {64 * 1024, 8} },
5750 .block_erase = erase_sector_jedec,
5751 }, {
5752 .eraseblocks = { {512 * 1024, 1} },
5753 .block_erase = erase_chip_block_jedec,
5754 }
5755 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005756 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00005757 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005758 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005759 },
5760
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005761 {
5762 .vendor = "Winbond",
5763 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005764 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005765 .manufacture_id = WINBOND_ID,
5766 .model_id = W_39V040FA,
5767 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005768 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005769 .feature_bits = FEATURE_EITHER_RESET,
5770 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005771 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005772 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005773 .block_erasers =
5774 {
5775 {
5776 .eraseblocks = { {4 * 1024, 128} },
5777 .block_erase = erase_block_jedec,
5778 }, {
5779 .eraseblocks = { {64 * 1024, 8} },
5780 .block_erase = erase_sector_jedec,
5781 }, {
5782 .eraseblocks = { {512 * 1024, 1} },
5783 .block_erase = erase_chip_block_jedec,
5784 }
5785 },
Sean Nelson35727f72010-01-28 23:55:12 +00005786 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005787 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005788 },
5789
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005790 {
5791 .vendor = "Winbond",
5792 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005793 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005794 .manufacture_id = WINBOND_ID,
5795 .model_id = W_39V080A,
5796 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005797 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005798 .feature_bits = FEATURE_EITHER_RESET,
5799 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005800 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005801 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005802 .block_erasers =
5803 {
5804 {
5805 .eraseblocks = { {64 * 1024, 16} },
5806 .block_erase = erase_sector_jedec,
5807 }, {
5808 .eraseblocks = { {1024 * 1024, 1} },
5809 .block_erase = erase_chip_block_jedec,
5810 }
5811 },
Sean Nelson35727f72010-01-28 23:55:12 +00005812 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005813 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005814 },
5815
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005816 {
5817 .vendor = "Winbond",
5818 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00005819 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005820 .manufacture_id = WINBOND_ID,
5821 .model_id = W_49F002U,
5822 .total_size = 256,
5823 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005824 .feature_bits = FEATURE_EITHER_RESET,
5825 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005826 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005827 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005828 .block_erasers =
5829 {
5830 {
5831 .eraseblocks = {
5832 {128 * 1024, 1},
5833 {96 * 1024, 1},
5834 {8 * 1024, 2},
5835 {16 * 1024, 1},
5836 },
5837 .block_erase = erase_sector_jedec,
5838 }, {
5839 .eraseblocks = { {256 * 1024, 1} },
5840 .block_erase = erase_chip_block_jedec,
5841 }
5842 },
Sean Nelson35727f72010-01-28 23:55:12 +00005843 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005844 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005845 },
5846
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005847 {
5848 .vendor = "Winbond",
5849 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005850 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005851 .manufacture_id = WINBOND_ID,
5852 .model_id = W_49V002A,
5853 .total_size = 256,
5854 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005855 .feature_bits = FEATURE_EITHER_RESET,
5856 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005857 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005858 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005859 .block_erasers =
5860 {
5861 {
5862 .eraseblocks = {
5863 {64 * 1024, 3},
5864 {32 * 1024, 1},
5865 {8 * 1024, 2},
5866 {16 * 1024, 1},
5867 },
5868 .block_erase = erase_sector_jedec,
5869 }, {
5870 .eraseblocks = { {256 * 1024, 1} },
5871 .block_erase = erase_chip_block_jedec,
5872 }
5873 },
Sean Nelson35727f72010-01-28 23:55:12 +00005874 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005875 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005876 },
5877
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005878 {
5879 .vendor = "Winbond",
5880 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005881 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005882 .manufacture_id = WINBOND_ID,
5883 .model_id = W_49V002FA,
5884 .total_size = 256,
5885 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005886 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005887 .tested = TEST_UNTESTED,
5888 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005889 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005890 .block_erasers =
5891 {
5892 {
5893 .eraseblocks = {
5894 {64 * 1024, 3},
5895 {32 * 1024, 1},
5896 {8 * 1024, 2},
5897 {16 * 1024, 1},
5898 },
5899 .block_erase = erase_sector_jedec,
5900 }, {
5901 .eraseblocks = { {256 * 1024, 1} },
5902 .block_erase = erase_chip_block_jedec,
5903 }
5904 },
Sean Nelson35727f72010-01-28 23:55:12 +00005905 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005906 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005907 },
5908
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005909 {
5910 .vendor = "Winbond",
5911 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005912 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005913 .manufacture_id = WINBOND_ID,
5914 .model_id = W_39V080FA,
5915 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005916 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005917 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
5918 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005919 .probe = probe_jedec,
5920 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005921 .block_erasers =
5922 {
5923 {
5924 .eraseblocks = { {64 * 1024, 16}, },
5925 .block_erase = erase_sector_jedec,
5926 }, {
5927 .eraseblocks = { {1024 * 1024, 1} },
5928 .block_erase = erase_chip_block_jedec,
5929 }
5930 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005931 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00005932 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005933 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005934 },
5935
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005936 {
5937 .vendor = "Winbond",
5938 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005939 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005940 .manufacture_id = WINBOND_ID,
5941 .model_id = W_39V080FA_DM,
5942 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005943 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005944 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005945 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005946 .probe = probe_jedec,
5947 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005948 .block_erasers =
5949 {
5950 {
5951 .eraseblocks = { {64 * 1024, 8}, },
5952 .block_erase = erase_sector_jedec,
5953 }, {
5954 .eraseblocks = { {512 * 1024, 1} },
5955 .block_erase = erase_chip_block_jedec,
5956 }
5957 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005958 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00005959 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005960 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005961 },
5962
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005963 {
5964 .vendor = "Atmel",
5965 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005966 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005967 .manufacture_id = ATMEL_ID,
5968 .model_id = GENERIC_DEVICE_ID,
5969 .total_size = 0,
5970 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005971 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005972 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005973 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005974 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005975 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005976 },
5977
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005978 {
5979 .vendor = "EON",
5980 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005981 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005982 .manufacture_id = EON_ID_NOPREFIX,
5983 .model_id = GENERIC_DEVICE_ID,
5984 .total_size = 0,
5985 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005986 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005987 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005988 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005989 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005990 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005991 },
5992
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005993 {
5994 .vendor = "Macronix",
5995 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005996 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005997 .manufacture_id = MX_ID,
5998 .model_id = GENERIC_DEVICE_ID,
5999 .total_size = 0,
6000 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006001 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006002 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006003 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006004 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006005 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006006 },
6007
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006008 {
6009 .vendor = "PMC",
6010 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006011 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006012 .manufacture_id = PMC_ID,
6013 .model_id = GENERIC_DEVICE_ID,
6014 .total_size = 0,
6015 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006016 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006017 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006018 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006019 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006020 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006021 },
6022
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006023 {
6024 .vendor = "SST",
6025 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006026 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006027 .manufacture_id = SST_ID,
6028 .model_id = GENERIC_DEVICE_ID,
6029 .total_size = 0,
6030 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006031 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006032 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006033 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006034 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006035 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006036 },
6037
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006038 {
6039 .vendor = "ST",
6040 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006041 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006042 .manufacture_id = ST_ID,
6043 .model_id = GENERIC_DEVICE_ID,
6044 .total_size = 0,
6045 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006046 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006047 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006048 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006049 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006050 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006051 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006052
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006053 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006054 .vendor = "Sanyo",
6055 .name = "unknown Sanyo SPI chip",
6056 .bustype = CHIP_BUSTYPE_SPI,
6057 .manufacture_id = SANYO_ID,
6058 .model_id = GENERIC_DEVICE_ID,
6059 .total_size = 0,
6060 .page_size = 256,
6061 .tested = TEST_BAD_PREW,
6062 .probe = probe_spi_rdid,
6063 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006064 .write = NULL,
6065 .read = NULL,
6066 },
6067
6068 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006069 .vendor = "Generic",
6070 .name = "unknown SPI chip (RDID)",
6071 .bustype = CHIP_BUSTYPE_SPI,
6072 .manufacture_id = GENERIC_MANUF_ID,
6073 .model_id = GENERIC_DEVICE_ID,
6074 .total_size = 0,
6075 .page_size = 256,
6076 .tested = TEST_BAD_PREW,
6077 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006078 .write = NULL,
6079 },
6080 {
6081 .vendor = "Generic",
6082 .name = "unknown SPI chip (REMS)",
6083 .bustype = CHIP_BUSTYPE_SPI,
6084 .manufacture_id = GENERIC_MANUF_ID,
6085 .model_id = GENERIC_DEVICE_ID,
6086 .total_size = 0,
6087 .page_size = 256,
6088 .tested = TEST_BAD_PREW,
6089 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006090 .write = NULL,
6091 },
6092
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006093 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006094};