blob: 1c30edc445f63be3eeb755df0ca88bdd27017acd [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 },
Sean Nelson36172342010-02-27 18:01:15 +00001309 .unlock = unlock_49fl00x,
1310 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001311 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001312 },
1313
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001314 {
1315 .vendor = "EMST",
1316 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001317 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001318 .manufacture_id = EMST_ID,
1319 .model_id = EMST_F49B002UA,
1320 .total_size = 256,
1321 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001322 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001323 .tested = TEST_UNTESTED,
1324 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001325 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001326 .block_erasers =
1327 {
1328 {
1329 .eraseblocks = {
1330 {128 * 1024, 1},
1331 {96 * 1024, 1},
1332 {8 * 1024, 2},
1333 {16 * 1024, 1},
1334 },
1335 .block_erase = erase_sector_jedec,
1336 }, {
1337 .eraseblocks = { {256 * 1024, 1} },
1338 .block_erase = erase_chip_block_jedec,
1339 }
1340 },
Sean Nelson35727f72010-01-28 23:55:12 +00001341 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001342 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001343 },
1344
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001345 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001346 .vendor = "Eon",
1347 .name = "EN25B05",
1348 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001349 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001350 .model_id = EN_25B05,
1351 .total_size = 64,
1352 .page_size = 256,
1353 .tested = TEST_UNTESTED,
1354 .probe = probe_spi_rdid,
1355 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001356 .block_erasers =
1357 {
1358 {
1359 .eraseblocks = {
1360 {4 * 1024, 2},
1361 {8 * 1024, 1},
1362 {16 * 1024, 1},
1363 {32 * 1024, 1},
1364 },
1365 .block_erase = spi_block_erase_d8,
1366 }, {
1367 .eraseblocks = { {64 * 1024, 1} },
1368 .block_erase = spi_block_erase_c7,
1369 }
1370 },
1371 .write = spi_chip_write_256,
1372 .read = spi_chip_read,
1373 },
1374
1375 {
1376 .vendor = "Eon",
1377 .name = "EN25B05T",
1378 .bustype = CHIP_BUSTYPE_SPI,
1379 .manufacture_id = EON_ID_NOPREFIX,
1380 .model_id = EN_25B05,
1381 .total_size = 64,
1382 .page_size = 256,
1383 .tested = TEST_UNTESTED,
1384 .probe = probe_spi_rdid,
1385 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001386 .block_erasers =
1387 {
1388 {
1389 .eraseblocks = {
1390 {32 * 1024, 1},
1391 {16 * 1024, 1},
1392 {8 * 1024, 1},
1393 {4 * 1024, 2},
1394 },
1395 .block_erase = spi_block_erase_d8,
1396 }, {
1397 .eraseblocks = { {64 * 1024, 1} },
1398 .block_erase = spi_block_erase_c7,
1399 }
1400 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001401 .write = spi_chip_write_256,
1402 .read = spi_chip_read,
1403 },
1404
1405 {
1406 .vendor = "Eon",
1407 .name = "EN25B10",
1408 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001409 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001410 .model_id = EN_25B10,
1411 .total_size = 128,
1412 .page_size = 256,
1413 .tested = TEST_UNTESTED,
1414 .probe = probe_spi_rdid,
1415 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001416 .block_erasers =
1417 {
1418 {
1419 .eraseblocks = {
1420 {4 * 1024, 2},
1421 {8 * 1024, 1},
1422 {16 * 1024, 1},
1423 {32 * 1024, 3},
1424 },
1425 .block_erase = spi_block_erase_d8,
1426 }, {
1427 .eraseblocks = { {128 * 1024, 1} },
1428 .block_erase = spi_block_erase_c7,
1429 }
1430 },
1431 .write = spi_chip_write_256,
1432 .read = spi_chip_read,
1433 },
1434
1435 {
1436 .vendor = "Eon",
1437 .name = "EN25B10T",
1438 .bustype = CHIP_BUSTYPE_SPI,
1439 .manufacture_id = EON_ID_NOPREFIX,
1440 .model_id = EN_25B10,
1441 .total_size = 128,
1442 .page_size = 256,
1443 .tested = TEST_UNTESTED,
1444 .probe = probe_spi_rdid,
1445 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001446 .block_erasers =
1447 {
1448 {
1449 .eraseblocks = {
1450 {32 * 1024, 3},
1451 {16 * 1024, 1},
1452 {8 * 1024, 1},
1453 {4 * 1024, 2},
1454 },
1455 .block_erase = spi_block_erase_d8,
1456 }, {
1457 .eraseblocks = { {128 * 1024, 1} },
1458 .block_erase = spi_block_erase_c7,
1459 }
1460 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001461 .write = spi_chip_write_256,
1462 .read = spi_chip_read,
1463 },
1464
1465 {
1466 .vendor = "Eon",
1467 .name = "EN25B20",
1468 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001469 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001470 .model_id = EN_25B20,
1471 .total_size = 256,
1472 .page_size = 256,
1473 .tested = TEST_UNTESTED,
1474 .probe = probe_spi_rdid,
1475 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001476 .block_erasers =
1477 {
1478 {
1479 .eraseblocks = {
1480 {4 * 1024, 2},
1481 {8 * 1024, 1},
1482 {16 * 1024, 1},
1483 {32 * 1024, 1},
1484 {64 * 1024, 3}
1485 },
1486 .block_erase = spi_block_erase_d8,
1487 }, {
1488 .eraseblocks = { {256 * 1024, 1} },
1489 .block_erase = spi_block_erase_c7,
1490 }
1491 },
1492 .write = spi_chip_write_256,
1493 .read = spi_chip_read,
1494 },
1495
1496 {
1497 .vendor = "Eon",
1498 .name = "EN25B20T",
1499 .bustype = CHIP_BUSTYPE_SPI,
1500 .manufacture_id = EON_ID_NOPREFIX,
1501 .model_id = EN_25B20,
1502 .total_size = 256,
1503 .page_size = 256,
1504 .tested = TEST_UNTESTED,
1505 .probe = probe_spi_rdid,
1506 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001507 .block_erasers =
1508 {
1509 {
1510 .eraseblocks = {
1511 {64 * 1024, 3},
1512 {32 * 1024, 1},
1513 {16 * 1024, 1},
1514 {8 * 1024, 1},
1515 {4 * 1024, 2},
1516 },
1517 .block_erase = spi_block_erase_d8,
1518 }, {
1519 .eraseblocks = { {256 * 1024, 1} },
1520 .block_erase = spi_block_erase_c7,
1521 }
1522 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001523 .write = spi_chip_write_256,
1524 .read = spi_chip_read,
1525 },
1526
1527 {
1528 .vendor = "Eon",
1529 .name = "EN25B40",
1530 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001531 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001532 .model_id = EN_25B40,
1533 .total_size = 512,
1534 .page_size = 256,
1535 .tested = TEST_UNTESTED,
1536 .probe = probe_spi_rdid,
1537 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001538 .block_erasers =
1539 {
1540 {
1541 .eraseblocks = {
1542 {4 * 1024, 2},
1543 {8 * 1024, 1},
1544 {16 * 1024, 1},
1545 {32 * 1024, 1},
1546 {64 * 1024, 7}
1547 },
1548 .block_erase = spi_block_erase_d8,
1549 }, {
1550 .eraseblocks = { {512 * 1024, 1} },
1551 .block_erase = spi_block_erase_c7,
1552 }
1553 },
1554 .write = spi_chip_write_256,
1555 .read = spi_chip_read,
1556 },
1557
1558 {
1559 .vendor = "Eon",
1560 .name = "EN25B40T",
1561 .bustype = CHIP_BUSTYPE_SPI,
1562 .manufacture_id = EON_ID_NOPREFIX,
1563 .model_id = EN_25B40,
1564 .total_size = 512,
1565 .page_size = 256,
1566 .tested = TEST_UNTESTED,
1567 .probe = probe_spi_rdid,
1568 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001569 .block_erasers =
1570 {
1571 {
1572 .eraseblocks = {
1573 {64 * 1024, 7},
1574 {32 * 1024, 1},
1575 {16 * 1024, 1},
1576 {8 * 1024, 1},
1577 {4 * 1024, 2},
1578 },
1579 .block_erase = spi_block_erase_d8,
1580 }, {
1581 .eraseblocks = { {512 * 1024, 1} },
1582 .block_erase = spi_block_erase_c7,
1583 }
1584 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001585 .write = spi_chip_write_256,
1586 .read = spi_chip_read,
1587 },
1588
1589 {
1590 .vendor = "Eon",
1591 .name = "EN25B80",
1592 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001593 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001594 .model_id = EN_25B80,
1595 .total_size = 1024,
1596 .page_size = 256,
1597 .tested = TEST_UNTESTED,
1598 .probe = probe_spi_rdid,
1599 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001600 .block_erasers =
1601 {
1602 {
1603 .eraseblocks = {
1604 {4 * 1024, 2},
1605 {8 * 1024, 1},
1606 {16 * 1024, 1},
1607 {32 * 1024, 1},
1608 {64 * 1024, 15}
1609 },
1610 .block_erase = spi_block_erase_d8,
1611 }, {
1612 .eraseblocks = { {1024 * 1024, 1} },
1613 .block_erase = spi_block_erase_c7,
1614 }
1615 },
1616 .write = spi_chip_write_256,
1617 .read = spi_chip_read,
1618 },
1619
1620 {
1621 .vendor = "Eon",
1622 .name = "EN25B80T",
1623 .bustype = CHIP_BUSTYPE_SPI,
1624 .manufacture_id = EON_ID_NOPREFIX,
1625 .model_id = EN_25B80,
1626 .total_size = 1024,
1627 .page_size = 256,
1628 .tested = TEST_UNTESTED,
1629 .probe = probe_spi_rdid,
1630 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001631 .block_erasers =
1632 {
1633 {
1634 .eraseblocks = {
1635 {64 * 1024, 15},
1636 {32 * 1024, 1},
1637 {16 * 1024, 1},
1638 {8 * 1024, 1},
1639 {4 * 1024, 2},
1640 },
1641 .block_erase = spi_block_erase_d8,
1642 }, {
1643 .eraseblocks = { {1024 * 1024, 1} },
1644 .block_erase = spi_block_erase_c7,
1645 }
1646 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001647 .write = spi_chip_write_256,
1648 .read = spi_chip_read,
1649 },
1650
1651 {
1652 .vendor = "Eon",
1653 .name = "EN25B16",
1654 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001655 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001656 .model_id = EN_25B16,
1657 .total_size = 2048,
1658 .page_size = 256,
1659 .tested = TEST_UNTESTED,
1660 .probe = probe_spi_rdid,
1661 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001662 .block_erasers =
1663 {
1664 {
1665 .eraseblocks = {
1666 {4 * 1024, 2},
1667 {8 * 1024, 1},
1668 {16 * 1024, 1},
1669 {32 * 1024, 1},
1670 {64 * 1024, 31},
1671 },
1672 .block_erase = spi_block_erase_d8,
1673 }, {
1674 .eraseblocks = { {2 * 1024 * 1024, 1} },
1675 .block_erase = spi_block_erase_c7,
1676 }
1677 },
1678 .write = spi_chip_write_256,
1679 .read = spi_chip_read,
1680 },
1681
1682 {
1683 .vendor = "Eon",
1684 .name = "EN25B16T",
1685 .bustype = CHIP_BUSTYPE_SPI,
1686 .manufacture_id = EON_ID_NOPREFIX,
1687 .model_id = EN_25B16,
1688 .total_size = 2048,
1689 .page_size = 256,
1690 .tested = TEST_UNTESTED,
1691 .probe = probe_spi_rdid,
1692 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001693 .block_erasers =
1694 {
1695 {
1696 .eraseblocks = {
1697 {64 * 1024, 31},
1698 {32 * 1024, 1},
1699 {16 * 1024, 1},
1700 {8 * 1024, 1},
1701 {4 * 1024, 2},
1702 },
1703 .block_erase = spi_block_erase_d8,
1704 }, {
1705 .eraseblocks = { {2 * 1024 * 1024, 1} },
1706 .block_erase = spi_block_erase_c7,
1707 }
1708 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001709 .write = spi_chip_write_256,
1710 .read = spi_chip_read,
1711 },
1712
1713 {
1714 .vendor = "Eon",
1715 .name = "EN25B32",
1716 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001717 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001718 .model_id = EN_25B32,
1719 .total_size = 4096,
1720 .page_size = 256,
1721 .tested = TEST_UNTESTED,
1722 .probe = probe_spi_rdid,
1723 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001724 .block_erasers =
1725 {
1726 {
1727 .eraseblocks = {
1728 {4 * 1024, 2},
1729 {8 * 1024, 1},
1730 {16 * 1024, 1},
1731 {32 * 1024, 1},
1732 {64 * 1024, 63},
1733 },
1734 .block_erase = spi_block_erase_d8,
1735 }, {
1736 .eraseblocks = { {4 * 1024 * 1024, 1} },
1737 .block_erase = spi_block_erase_c7,
1738 }
1739 },
1740 .write = spi_chip_write_256,
1741 .read = spi_chip_read,
1742 },
1743
1744 {
1745 .vendor = "Eon",
1746 .name = "EN25B32T",
1747 .bustype = CHIP_BUSTYPE_SPI,
1748 .manufacture_id = EON_ID_NOPREFIX,
1749 .model_id = EN_25B32,
1750 .total_size = 4096,
1751 .page_size = 256,
1752 .tested = TEST_UNTESTED,
1753 .probe = probe_spi_rdid,
1754 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001755 .block_erasers =
1756 {
1757 {
1758 .eraseblocks = {
1759 {64 * 1024, 63},
1760 {32 * 1024, 1},
1761 {16 * 1024, 1},
1762 {8 * 1024, 1},
1763 {4 * 1024, 2},
1764 },
1765 .block_erase = spi_block_erase_d8,
1766 }, {
1767 .eraseblocks = { {4 * 1024 * 1024, 1} },
1768 .block_erase = spi_block_erase_c7,
1769 }
1770 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001771 .write = spi_chip_write_256,
1772 .read = spi_chip_read,
1773 },
1774
1775 {
1776 .vendor = "Eon",
1777 .name = "EN25B64",
1778 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001779 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001780 .model_id = EN_25B64,
1781 .total_size = 8192,
1782 .page_size = 256,
1783 .tested = TEST_UNTESTED,
1784 .probe = probe_spi_rdid,
1785 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001786 .block_erasers =
1787 {
1788 {
1789 .eraseblocks = {
1790 {4 * 1024, 2},
1791 {8 * 1024, 1},
1792 {16 * 1024, 1},
1793 {32 * 1024, 1},
1794 {64 * 1024, 127},
1795 },
1796 .block_erase = spi_block_erase_d8,
1797 }, {
1798 .eraseblocks = { {8 * 1024 * 1024, 1} },
1799 .block_erase = spi_block_erase_c7,
1800 }
1801 },
1802 .write = spi_chip_write_256,
1803 .read = spi_chip_read,
1804 },
1805
1806 {
1807 .vendor = "Eon",
1808 .name = "EN25B64T",
1809 .bustype = CHIP_BUSTYPE_SPI,
1810 .manufacture_id = EON_ID_NOPREFIX,
1811 .model_id = EN_25B64,
1812 .total_size = 8192,
1813 .page_size = 256,
1814 .tested = TEST_UNTESTED,
1815 .probe = probe_spi_rdid,
1816 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001817 .block_erasers =
1818 {
1819 {
1820 .eraseblocks = {
1821 {64 * 1024, 127},
1822 {32 * 1024, 1},
1823 {16 * 1024, 1},
1824 {8 * 1024, 1},
1825 {4 * 1024, 2},
1826 },
1827 .block_erase = spi_block_erase_d8,
1828 }, {
1829 .eraseblocks = { {8 * 1024 * 1024, 1} },
1830 .block_erase = spi_block_erase_c7,
1831 }
1832 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001833 .write = spi_chip_write_256,
1834 .read = spi_chip_read,
1835 },
1836
1837 {
1838 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001839 .name = "EN25D16",
1840 .bustype = CHIP_BUSTYPE_SPI,
1841 .manufacture_id = EON_ID_NOPREFIX,
1842 .model_id = EN_25D16,
1843 .total_size = 2048,
1844 .page_size = 256,
1845 .tested = TEST_UNTESTED,
1846 .probe = probe_spi_rdid,
1847 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001848 .block_erasers =
1849 {
1850 {
1851 .eraseblocks = { {4 * 1024, 512} },
1852 .block_erase = spi_block_erase_20,
1853 }, {
1854 .eraseblocks = { {64 * 1024, 32} },
1855 .block_erase = spi_block_erase_d8,
1856 }, {
1857 .eraseblocks = { {64 * 1024, 32} },
1858 .block_erase = spi_block_erase_52,
1859 }, {
1860 .eraseblocks = { {2 * 1024 * 1024, 1} },
1861 .block_erase = spi_block_erase_60,
1862 }, {
1863 .eraseblocks = { {2 * 1024 * 1024, 1} },
1864 .block_erase = spi_block_erase_c7,
1865 }
1866 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001867 .write = spi_chip_write_256,
1868 .read = spi_chip_read,
1869 },
1870
1871 {
1872 .vendor = "Eon",
1873 .name = "EN25F05",
1874 .bustype = CHIP_BUSTYPE_SPI,
1875 .manufacture_id = EON_ID_NOPREFIX,
1876 .model_id = EN_25F05,
1877 .total_size = 64,
1878 .page_size = 256,
1879 .tested = TEST_UNTESTED,
1880 .probe = probe_spi_rdid,
1881 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001882 .block_erasers =
1883 {
1884 {
1885 .eraseblocks = { {4 * 1024, 16} },
1886 .block_erase = spi_block_erase_20,
1887 }, {
1888 .eraseblocks = { {32 * 1024, 2} },
1889 .block_erase = spi_block_erase_d8,
1890 }, {
1891 .eraseblocks = { {32 * 1024, 2} },
1892 .block_erase = spi_block_erase_52,
1893 }, {
1894 .eraseblocks = { {64 * 1024, 1} },
1895 .block_erase = spi_block_erase_60,
1896 }, {
1897 .eraseblocks = { {64 * 1024, 1} },
1898 .block_erase = spi_block_erase_c7,
1899 }
1900 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001901 .write = spi_chip_write_256,
1902 .read = spi_chip_read,
1903 },
1904
1905 {
1906 .vendor = "Eon",
1907 .name = "EN25F10",
1908 .bustype = CHIP_BUSTYPE_SPI,
1909 .manufacture_id = EON_ID_NOPREFIX,
1910 .model_id = EN_25F10,
1911 .total_size = 128,
1912 .page_size = 256,
1913 .tested = TEST_UNTESTED,
1914 .probe = probe_spi_rdid,
1915 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001916 .block_erasers =
1917 {
1918 {
1919 .eraseblocks = { {4 * 1024, 32} },
1920 .block_erase = spi_block_erase_20,
1921 }, {
1922 .eraseblocks = { {32 * 1024, 4} },
1923 .block_erase = spi_block_erase_d8,
1924 }, {
1925 .eraseblocks = { {32 * 1024, 4} },
1926 .block_erase = spi_block_erase_52,
1927 }, {
1928 .eraseblocks = { {128 * 1024, 1} },
1929 .block_erase = spi_block_erase_60,
1930 }, {
1931 .eraseblocks = { {128 * 1024, 1} },
1932 .block_erase = spi_block_erase_c7,
1933 }
1934 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001935 .write = spi_chip_write_256,
1936 .read = spi_chip_read,
1937 },
1938
1939 {
1940 .vendor = "Eon",
1941 .name = "EN25F20",
1942 .bustype = CHIP_BUSTYPE_SPI,
1943 .manufacture_id = EON_ID_NOPREFIX,
1944 .model_id = EN_25F20,
1945 .total_size = 256,
1946 .page_size = 256,
1947 .tested = TEST_UNTESTED,
1948 .probe = probe_spi_rdid,
1949 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001950 .block_erasers =
1951 {
1952 {
1953 .eraseblocks = { {4 * 1024, 64} },
1954 .block_erase = spi_block_erase_20,
1955 }, {
1956 .eraseblocks = { {64 * 1024, 4} },
1957 .block_erase = spi_block_erase_d8,
1958 }, {
1959 .eraseblocks = { {64 * 1024, 4} },
1960 .block_erase = spi_block_erase_52,
1961 }, {
1962 .eraseblocks = { {256 * 1024, 1} },
1963 .block_erase = spi_block_erase_60,
1964 }, {
1965 .eraseblocks = { {256 * 1024, 1} },
1966 .block_erase = spi_block_erase_c7,
1967 }
1968 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001969 .write = spi_chip_write_256,
1970 .read = spi_chip_read,
1971 },
1972
1973 {
1974 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001975 .name = "EN25F40",
1976 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001977 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001978 .model_id = EN_25F40,
1979 .total_size = 512,
1980 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001981 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001982 .probe = probe_spi_rdid,
1983 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001984 .block_erasers =
1985 {
1986 {
Sean Nelson54596372010-01-09 05:30:14 +00001987 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001988 .block_erase = spi_block_erase_20,
1989 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001990 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001991 .block_erase = spi_block_erase_d8,
1992 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001993 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001994 .block_erase = spi_block_erase_60,
1995 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001996 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001997 .block_erase = spi_block_erase_c7,
1998 },
1999 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002000 .write = spi_chip_write_256,
2001 .read = spi_chip_read,
2002 },
2003
2004 {
2005 .vendor = "Eon",
2006 .name = "EN25F80",
2007 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002008 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002009 .model_id = EN_25F80,
2010 .total_size = 1024,
2011 .page_size = 256,
2012 .tested = TEST_UNTESTED,
2013 .probe = probe_spi_rdid,
2014 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002015 .block_erasers =
2016 {
2017 {
2018 .eraseblocks = { {4 * 1024, 256} },
2019 .block_erase = spi_block_erase_20,
2020 }, {
2021 .eraseblocks = { {64 * 1024, 16} },
2022 .block_erase = spi_block_erase_d8,
2023 }, {
2024 .eraseblocks = { {1024 * 1024, 1} },
2025 .block_erase = spi_block_erase_60,
2026 }, {
2027 .eraseblocks = { {1024 * 1024, 1} },
2028 .block_erase = spi_block_erase_c7,
2029 }
2030 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002031 .write = spi_chip_write_256,
2032 .read = spi_chip_read,
2033 },
2034
2035 {
2036 .vendor = "Eon",
2037 .name = "EN25F16",
2038 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002039 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002040 .model_id = EN_25F16,
2041 .total_size = 2048,
2042 .page_size = 256,
2043 .tested = TEST_UNTESTED,
2044 .probe = probe_spi_rdid,
2045 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002046 .block_erasers =
2047 {
2048 {
2049 .eraseblocks = { {4 * 1024, 512} },
2050 .block_erase = spi_block_erase_20,
2051 }, {
2052 .eraseblocks = { {64 * 1024, 32} },
2053 .block_erase = spi_block_erase_d8,
2054 }, {
2055 .eraseblocks = { {2 * 1024 * 1024, 1} },
2056 .block_erase = spi_block_erase_60,
2057 }, {
2058 .eraseblocks = { {2 * 1024 * 1024, 1} },
2059 .block_erase = spi_block_erase_c7,
2060 }
2061 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002062 .write = spi_chip_write_256,
2063 .read = spi_chip_read,
2064 },
2065
2066 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002067 .vendor = "Eon",
2068 .name = "EN25F32",
2069 .bustype = CHIP_BUSTYPE_SPI,
2070 .manufacture_id = EON_ID_NOPREFIX,
2071 .model_id = EN_25F32,
2072 .total_size = 4096,
2073 .page_size = 256,
2074 .tested = TEST_UNTESTED,
2075 .probe = probe_spi_rdid,
2076 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002077 .block_erasers =
2078 {
2079 {
2080 .eraseblocks = { {4 * 1024, 1024} },
2081 .block_erase = spi_block_erase_20,
2082 }, {
2083 .eraseblocks = { {64 * 1024, 64} },
2084 .block_erase = spi_block_erase_d8,
2085 }, {
2086 .eraseblocks = { {4 * 1024 * 1024, 1} },
2087 .block_erase = spi_block_erase_60,
2088 }, {
2089 .eraseblocks = { {4 * 1024 * 1024, 1} },
2090 .block_erase = spi_block_erase_c7,
2091 }
2092 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002093 .write = spi_chip_write_256,
2094 .read = spi_chip_read,
2095 },
2096
2097 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002098 .vendor = "Eon",
2099 .name = "EN29F010",
2100 .bustype = CHIP_BUSTYPE_PARALLEL,
2101 .manufacture_id = EON_ID,
2102 .model_id = EN_29F010,
2103 .total_size = 128,
2104 .page_size = 128,
2105 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2106 .tested = TEST_OK_PREW,
2107 .probe = probe_jedec,
2108 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2109 .block_erasers =
2110 {
2111 {
2112 .eraseblocks = { {16 * 1024, 8} },
2113 .block_erase = erase_sector_jedec,
2114 },
2115 {
2116 .eraseblocks = { {128 * 1024, 1} },
2117 .block_erase = erase_chip_block_jedec,
2118 },
2119 },
2120 .write = write_jedec_1,
2121 .read = read_memmapped,
2122 },
2123
2124 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002125 .vendor = "EON",
2126 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002127 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002128 .manufacture_id = EON_ID,
2129 .model_id = EN_29F002B,
2130 .total_size = 256,
2131 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002132 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002133 .tested = TEST_UNTESTED,
2134 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002135 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002136 .block_erasers =
2137 {
2138 {
2139 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002140 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002141 {8 * 1024, 2},
2142 {32 * 1024, 1},
2143 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002144 },
2145 .block_erase = erase_sector_jedec,
2146 }, {
2147 .eraseblocks = { {256 * 1024, 1} },
2148 .block_erase = erase_chip_block_jedec,
2149 },
2150 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002151 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002152 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002153 },
2154
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002155 {
2156 .vendor = "EON",
2157 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002158 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002159 .manufacture_id = EON_ID,
2160 .model_id = EN_29F002T,
2161 .total_size = 256,
2162 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002163 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
2164 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002165 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002166 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002167 .block_erasers =
2168 {
2169 {
2170 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002171 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002172 {32 * 1024, 1},
2173 {8 * 1024, 2},
2174 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002175 },
2176 .block_erase = erase_sector_jedec,
2177 }, {
2178 .eraseblocks = { {256 * 1024, 1} },
2179 .block_erase = erase_chip_block_jedec,
2180 },
2181 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002182 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002183 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002184 },
2185
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002186 {
2187 .vendor = "Fujitsu",
2188 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002189 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002190 .manufacture_id = FUJITSU_ID,
2191 .model_id = MBM29F004BC,
2192 .total_size = 512,
2193 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002194 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002195 .tested = TEST_UNTESTED,
2196 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002197 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002198 .block_erasers =
2199 {
2200 {
2201 .eraseblocks = {
2202 {16 * 1024, 1},
2203 {8 * 1024, 2},
2204 {32 * 1024, 1},
2205 {64 * 1024, 7},
2206 },
Sean Nelson35727f72010-01-28 23:55:12 +00002207 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002208 }, {
2209 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002210 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002211 },
2212 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002214 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002215 },
2216
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002217 {
2218 .vendor = "Fujitsu",
2219 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002220 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002221 .manufacture_id = FUJITSU_ID,
2222 .model_id = MBM29F004TC,
2223 .total_size = 512,
2224 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002225 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002226 .tested = TEST_UNTESTED,
2227 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002228 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002229 .block_erasers =
2230 {
2231 {
2232 .eraseblocks = {
2233 {64 * 1024, 7},
2234 {32 * 1024, 1},
2235 {8 * 1024, 2},
2236 {16 * 1024, 1},
2237 },
Sean Nelson35727f72010-01-28 23:55:12 +00002238 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002239 }, {
2240 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002241 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002242 },
2243 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002244 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002245 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002246 },
2247
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002248 {
Sean Nelson35727f72010-01-28 23:55:12 +00002249 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002250 .vendor = "Fujitsu",
2251 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002252 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002253 .manufacture_id = FUJITSU_ID,
2254 .model_id = MBM29F400BC,
2255 .total_size = 512,
2256 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002257 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002258 .tested = TEST_UNTESTED,
2259 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002260 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002261 .block_erasers =
2262 {
2263 {
2264 .eraseblocks = {
2265 {16 * 1024, 1},
2266 {8 * 1024, 2},
2267 {32 * 1024, 1},
2268 {64 * 1024, 7},
2269 },
2270 .block_erase = block_erase_m29f400bt,
2271 }, {
2272 .eraseblocks = { {512 * 1024, 1} },
2273 .block_erase = block_erase_chip_m29f400bt,
2274 },
2275 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002276 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002277 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002278 },
2279
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002280 {
2281 .vendor = "Fujitsu",
2282 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002283 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002284 .manufacture_id = FUJITSU_ID,
2285 .model_id = MBM29F400TC,
2286 .total_size = 512,
2287 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002288 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002289 .tested = TEST_UNTESTED,
2290 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002291 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002292 .block_erasers =
2293 {
2294 {
2295 .eraseblocks = {
2296 {64 * 1024, 7},
2297 {32 * 1024, 1},
2298 {8 * 1024, 2},
2299 {16 * 1024, 1},
2300 },
2301 .block_erase = block_erase_m29f400bt,
2302 }, {
2303 .eraseblocks = { {512 * 1024, 1} },
2304 .block_erase = block_erase_chip_m29f400bt,
2305 },
2306 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002307 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002308 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002309 },
2310
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002311 {
2312 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002313 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002314 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002315 .manufacture_id = INTEL_ID,
2316 .model_id = P28F001BXB,
2317 .total_size = 128,
2318 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelson35727f72010-01-28 23:55:12 +00002319 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002320 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002321 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002322 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002323 .block_erasers =
2324 {
2325 {
2326 .eraseblocks = {
2327 {8 * 1024, 1},
2328 {4 * 1024, 2},
2329 {112 * 1024, 1},
2330 },
2331 .block_erase = erase_82802ab_block,
2332 },
2333 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002334 .write = NULL,
2335 .read = read_memmapped,
2336 },
2337
2338 {
2339 .vendor = "Intel",
2340 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002341 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002342 .manufacture_id = INTEL_ID,
2343 .model_id = P28F001BXT,
2344 .total_size = 128,
2345 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelson35727f72010-01-28 23:55:12 +00002346 .feature_bits = 0,
2347 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002348 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002349 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002350 .block_erasers =
2351 {
2352 {
2353 .eraseblocks = {
2354 {112 * 1024, 1},
2355 {4 * 1024, 2},
2356 {8 * 1024, 1},
2357 },
2358 .block_erase = erase_82802ab_block,
2359 },
2360 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002361 .write = NULL,
2362 .read = read_memmapped,
2363 },
2364
2365 {
2366 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002367 .name = "28F004S5",
2368 .bustype = CHIP_BUSTYPE_PARALLEL,
2369 .manufacture_id = INTEL_ID,
2370 .model_id = E_28F004S5,
2371 .total_size = 512,
2372 .page_size = 256,
2373 .tested = TEST_UNTESTED,
2374 .probe = probe_82802ab,
2375 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002376 .block_erasers =
2377 {
2378 {
2379 .eraseblocks = { {64 * 1024, 8} },
2380 .block_erase = erase_82802ab_block,
2381 },
2382 },
2383 .write = write_82802ab,
2384 .read = read_memmapped,
2385 },
2386
2387 {
2388 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002389 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002390 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002391 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002392 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002393 .total_size = 512,
2394 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002395 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002396 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002397 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002398 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002399 .block_erasers =
2400 {
2401 {
2402 .eraseblocks = { {64 * 1024, 8} },
2403 .block_erase = erase_82802ab_block,
2404 },
2405 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002406 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002407 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002408 },
2409
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002410 {
2411 .vendor = "Intel",
2412 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002413 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002414 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002415 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002416 .total_size = 1024,
2417 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002418 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002419 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002420 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002421 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002422 .block_erasers =
2423 {
2424 {
2425 .eraseblocks = { {64 * 1024, 16} },
2426 .block_erase = erase_82802ab_block,
2427 },
2428 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002429 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002430 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002431 },
2432
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002433 {
2434 .vendor = "Macronix",
2435 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002436 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002437 .manufacture_id = MX_ID,
2438 .model_id = MX_25L512,
2439 .total_size = 64,
2440 .page_size = 256,
2441 .tested = TEST_UNTESTED,
2442 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002443 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002444 .block_erasers =
2445 {
2446 {
2447 .eraseblocks = { {4 * 1024, 16} },
2448 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002449 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002450 .eraseblocks = { {64 * 1024, 1} },
2451 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002452 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002453 .eraseblocks = { {64 * 1024, 1} },
2454 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002455 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002456 .eraseblocks = { {64 * 1024, 1} },
2457 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002458 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002459 .eraseblocks = { {64 * 1024, 1} },
2460 .block_erase = spi_block_erase_c7,
2461 },
2462 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002463 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002464 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002465 },
2466
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002467 {
2468 .vendor = "Macronix",
2469 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002470 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002471 .manufacture_id = MX_ID,
2472 .model_id = MX_25L1005,
2473 .total_size = 128,
2474 .page_size = 256,
2475 .tested = TEST_UNTESTED,
2476 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002477 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002478 .block_erasers =
2479 {
2480 {
2481 .eraseblocks = { {4 * 1024, 32} },
2482 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002483 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002484 .eraseblocks = { {64 * 1024, 2} },
2485 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002486 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002487 .eraseblocks = { {128 * 1024, 1} },
2488 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002489 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002490 .eraseblocks = { {128 * 1024, 1} },
2491 .block_erase = spi_block_erase_c7,
2492 },
2493 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002494 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002495 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002496 },
2497
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002498 {
2499 .vendor = "Macronix",
2500 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002501 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002502 .manufacture_id = MX_ID,
2503 .model_id = MX_25L2005,
2504 .total_size = 256,
2505 .page_size = 256,
2506 .tested = TEST_UNTESTED,
2507 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002508 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002509 .block_erasers =
2510 {
2511 {
2512 .eraseblocks = { {4 * 1024, 64} },
2513 .block_erase = spi_block_erase_20,
2514 }, {
2515 .eraseblocks = { {64 * 1024, 4} },
2516 .block_erase = spi_block_erase_52,
2517 }, {
2518 .eraseblocks = { {64 * 1024, 4} },
2519 .block_erase = spi_block_erase_d8,
2520 }, {
2521 .eraseblocks = { {256 * 1024, 1} },
2522 .block_erase = spi_block_erase_60,
2523 }, {
2524 .eraseblocks = { {256 * 1024, 1} },
2525 .block_erase = spi_block_erase_c7,
2526 },
2527 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002528 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002529 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002530 },
2531
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002532 {
2533 .vendor = "Macronix",
2534 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002535 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002536 .manufacture_id = MX_ID,
2537 .model_id = MX_25L4005,
2538 .total_size = 512,
2539 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002540 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002541 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002542 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002543 .block_erasers =
2544 {
2545 {
2546 .eraseblocks = { {4 * 1024, 128} },
2547 .block_erase = spi_block_erase_20,
2548 }, {
2549 .eraseblocks = { {64 * 1024, 8} },
2550 .block_erase = spi_block_erase_52,
2551 }, {
2552 .eraseblocks = { {64 * 1024, 8} },
2553 .block_erase = spi_block_erase_d8,
2554 }, {
2555 .eraseblocks = { {512 * 1024, 1} },
2556 .block_erase = spi_block_erase_60,
2557 }, {
2558 .eraseblocks = { {512 * 1024, 1} },
2559 .block_erase = spi_block_erase_c7,
2560 },
2561 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002562 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002563 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002564 },
2565
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002566 {
2567 .vendor = "Macronix",
2568 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002569 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002570 .manufacture_id = MX_ID,
2571 .model_id = MX_25L8005,
2572 .total_size = 1024,
2573 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002574 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002575 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002576 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002577 .block_erasers =
2578 {
2579 {
2580 .eraseblocks = { {4 * 1024, 256} },
2581 .block_erase = spi_block_erase_20,
2582 }, {
2583 .eraseblocks = { {64 * 1024, 16} },
2584 .block_erase = spi_block_erase_52,
2585 }, {
2586 .eraseblocks = { {64 * 1024, 16} },
2587 .block_erase = spi_block_erase_d8,
2588 }, {
2589 .eraseblocks = { {1024 * 1024, 1} },
2590 .block_erase = spi_block_erase_60,
2591 }, {
2592 .eraseblocks = { {1024 * 1024, 1} },
2593 .block_erase = spi_block_erase_c7,
2594 },
2595 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002596 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002597 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002598 },
2599
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002600 {
2601 .vendor = "Macronix",
2602 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002603 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002604 .manufacture_id = MX_ID,
2605 .model_id = MX_25L1605,
2606 .total_size = 2048,
2607 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002608 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002609 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002610 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002611 .block_erasers =
2612 {
2613 {
2614 .eraseblocks = { {4 * 1024, 512} },
2615 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2616 }, {
2617 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2618 .block_erase = spi_block_erase_52,
2619 }, {
2620 .eraseblocks = { {64 * 1024, 32} },
2621 .block_erase = spi_block_erase_d8,
2622 }, {
2623 .eraseblocks = { {2 * 1024 * 1024, 1} },
2624 .block_erase = spi_block_erase_60,
2625 }, {
2626 .eraseblocks = { {2 * 1024 * 1024, 1} },
2627 .block_erase = spi_block_erase_c7,
2628 },
2629 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002630 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002631 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002632 },
2633
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002634 {
2635 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002636 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002637 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002638 .manufacture_id = MX_ID,
2639 .model_id = MX_25L1635D,
2640 .total_size = 2048,
2641 .page_size = 256,
2642 .tested = TEST_UNTESTED,
2643 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002644 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002645 .block_erasers =
2646 {
2647 {
2648 .eraseblocks = { {4 * 1024, 512} },
2649 .block_erase = spi_block_erase_20,
2650 }, {
2651 .eraseblocks = { {64 * 1024, 32} },
2652 .block_erase = spi_block_erase_d8,
2653 }, {
2654 .eraseblocks = { {2 * 1024 * 1024, 1} },
2655 .block_erase = spi_block_erase_60,
2656 }, {
2657 .eraseblocks = { {2 * 1024 * 1024, 1} },
2658 .block_erase = spi_block_erase_c7,
2659 }
2660 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002661 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002662 .read = spi_chip_read,
2663 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002664
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002665 {
2666 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002667 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002668 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002669 .manufacture_id = MX_ID,
2670 .model_id = MX_25L3205,
2671 .total_size = 4096,
2672 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002673 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002674 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002675 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002676 .block_erasers =
2677 {
2678 {
2679 .eraseblocks = { {4 * 1024, 1024} },
2680 .block_erase = spi_block_erase_20,
2681 }, {
2682 .eraseblocks = { {4 * 1024, 1024} },
2683 .block_erase = spi_block_erase_d8,
2684 }, {
2685 .eraseblocks = { {4 * 1024 * 1024, 1} },
2686 .block_erase = spi_block_erase_60,
2687 }, {
2688 .eraseblocks = { {4 * 1024 * 1024, 1} },
2689 .block_erase = spi_block_erase_c7,
2690 },
2691 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002692 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002693 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002694 },
2695
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002696 {
2697 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002698 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002699 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002700 .manufacture_id = MX_ID,
2701 .model_id = MX_25L3235D,
2702 .total_size = 4096,
2703 .page_size = 256,
2704 .tested = TEST_UNTESTED,
2705 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002706 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002707 .block_erasers =
2708 {
2709 {
2710 .eraseblocks = { {4 * 1024, 1024} },
2711 .block_erase = spi_block_erase_20,
2712 }, {
2713 .eraseblocks = { {64 * 1024, 64} },
2714 .block_erase = spi_block_erase_d8,
2715 }, {
2716 .eraseblocks = { {4 * 1024 * 1024, 1} },
2717 .block_erase = spi_block_erase_60,
2718 }, {
2719 .eraseblocks = { {4 * 1024 * 1024, 1} },
2720 .block_erase = spi_block_erase_c7,
2721 }
2722 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002723 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002724 .read = spi_chip_read,
2725 },
2726
2727 {
2728 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002729 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002730 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002731 .manufacture_id = MX_ID,
2732 .model_id = MX_25L6405,
2733 .total_size = 8192,
2734 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002735 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002736 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002737 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002738 .block_erasers =
2739 {
2740 {
2741 .eraseblocks = { {64 * 1024, 128} },
2742 .block_erase = spi_block_erase_20,
2743 }, {
2744 .eraseblocks = { {64 * 1024, 128} },
2745 .block_erase = spi_block_erase_d8,
2746 }, {
2747 .eraseblocks = { {8 * 1024 * 1024, 1} },
2748 .block_erase = spi_block_erase_60,
2749 }, {
2750 .eraseblocks = { {8 * 1024 * 1024, 1} },
2751 .block_erase = spi_block_erase_c7,
2752 }
2753 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002754 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002755 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002756 },
2757
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002758 {
2759 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002760 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002761 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002762 .manufacture_id = MX_ID,
2763 .model_id = MX_25L12805,
2764 .total_size = 16384,
2765 .page_size = 256,
2766 .tested = TEST_UNTESTED,
2767 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002768 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002769 .block_erasers =
2770 {
2771 {
2772 .eraseblocks = { {4 * 1024, 4096} },
2773 .block_erase = spi_block_erase_20,
2774 }, {
2775 .eraseblocks = { {64 * 1024, 256} },
2776 .block_erase = spi_block_erase_d8,
2777 }, {
2778 .eraseblocks = { {16 * 1024 * 1024, 1} },
2779 .block_erase = spi_block_erase_60,
2780 }, {
2781 .eraseblocks = { {16 * 1024 * 1024, 1} },
2782 .block_erase = spi_block_erase_c7,
2783 }
2784 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002785 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002786 .read = spi_chip_read,
2787 },
2788
2789 {
2790 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002791 .name = "MX29F001B",
2792 .bustype = CHIP_BUSTYPE_PARALLEL,
2793 .manufacture_id = MX_ID,
2794 .model_id = MX_29F001B,
2795 .total_size = 128,
2796 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002797 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2798 .tested = TEST_UNTESTED,
2799 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002800 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002801 .block_erasers =
2802 {
2803 {
2804 .eraseblocks = {
2805 {8 * 1024, 1},
2806 {4 * 1024, 2},
2807 {8 * 1024, 2},
2808 {32 * 1024, 1},
2809 {64 * 1024, 1},
2810 },
Sean Nelson35727f72010-01-28 23:55:12 +00002811 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002812 }, {
2813 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002814 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002815 }
2816 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002817 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002818 .read = read_memmapped,
2819 },
2820
2821 {
2822 .vendor = "Macronix",
2823 .name = "MX29F001T",
2824 .bustype = CHIP_BUSTYPE_PARALLEL,
2825 .manufacture_id = MX_ID,
2826 .model_id = MX_29F001T,
2827 .total_size = 128,
2828 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002829 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2830 .tested = TEST_UNTESTED,
2831 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002832 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002833 .block_erasers =
2834 {
2835 {
2836 .eraseblocks = {
2837 {64 * 1024, 1},
2838 {32 * 1024, 1},
2839 {8 * 1024, 2},
2840 {4 * 1024, 2},
2841 {8 * 1024, 1},
2842 },
Sean Nelson35727f72010-01-28 23:55:12 +00002843 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002844 }, {
2845 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002846 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002847 }
2848 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002849 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002850 .read = read_memmapped,
2851 },
2852
2853 {
2854 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002855 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002856 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002857 .manufacture_id = MX_ID,
2858 .model_id = MX_29F002B,
2859 .total_size = 256,
2860 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002861 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002862 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002863 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002864 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002865 .block_erasers =
2866 {
2867 {
2868 .eraseblocks = {
2869 {16 * 1024, 1},
2870 {8 * 1024, 2},
2871 {32 * 1024, 1},
2872 {64 * 1024, 3},
2873 },
Sean Nelson35727f72010-01-28 23:55:12 +00002874 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002875 }, {
2876 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002877 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002878 },
2879 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002880 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002881 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002882 },
2883
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002884 {
2885 .vendor = "Macronix",
2886 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002887 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002888 .manufacture_id = MX_ID,
2889 .model_id = MX_29F002T,
2890 .total_size = 256,
2891 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002892 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2893 .tested = TEST_UNTESTED,
2894 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002895 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002896 .block_erasers =
2897 {
2898 {
2899 .eraseblocks = {
2900 {64 * 1024, 3},
2901 {32 * 1024, 1},
2902 {8 * 1024, 2},
2903 {16 * 1024, 1},
2904 },
Sean Nelson35727f72010-01-28 23:55:12 +00002905 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002906 }, {
2907 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002908 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002909 },
2910 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002911 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002912 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002913 },
2914
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002915 {
2916 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002917 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002918 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002919 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002920 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002921 .total_size = 512,
2922 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002923 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2924 .tested = TEST_UNTESTED,
2925 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002926 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002927 .block_erasers =
2928 {
2929 {
2930 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00002931 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002932 }, {
2933 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002934 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002935 },
2936 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002937 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002938 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002939 },
2940
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002941 {
2942 .vendor = "Numonyx",
2943 .name = "M25PE10",
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_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002947 .total_size = 128,
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, 32} },
2956 .block_erase = spi_block_erase_20,
2957 }, {
2958 .eraseblocks = { {64 * 1024, 2} },
2959 .block_erase = spi_block_erase_d8,
2960 }, {
2961 .eraseblocks = { {128 * 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 = "M25PE20",
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_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002975 .total_size = 256,
2976 .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, 64} },
2984 .block_erase = spi_block_erase_20,
2985 }, {
2986 .eraseblocks = { {64 * 1024, 4} },
2987 .block_erase = spi_block_erase_d8,
2988 }, {
2989 .eraseblocks = { {256 * 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 = "M25PE40",
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_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003003 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003004 .page_size = 256,
3005 .tested = TEST_UNTESTED,
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, 128} },
3012 .block_erase = spi_block_erase_20,
3013 }, {
3014 .eraseblocks = { {64 * 1024, 8} },
3015 .block_erase = spi_block_erase_d8,
3016 }, {
3017 .eraseblocks = { {512 * 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 = "M25PE80",
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_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003031 .total_size = 1024,
3032 .page_size = 256,
3033 .tested = TEST_OK_PREW,
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, 256} },
3040 .block_erase = spi_block_erase_20,
3041 }, {
3042 .eraseblocks = { {64 * 1024, 16} },
3043 .block_erase = spi_block_erase_d8,
3044 }, {
3045 .eraseblocks = { {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 = "Numonyx",
3055 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003056 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003057 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003058 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003059 .total_size = 2048,
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, 512} },
3068 .block_erase = spi_block_erase_20,
3069 }, {
3070 .eraseblocks = { {64 * 1024, 32} },
3071 .block_erase = spi_block_erase_d8,
3072 }, {
3073 .eraseblocks = { {2 * 1024 * 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 = "Pm25LV010",
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_25LV010,
3087 .total_size = 128,
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, 32} },
3096 .block_erase = spi_block_erase_d7,
3097 }, {
3098 .eraseblocks = { {32 * 1024, 4} },
3099 .block_erase = spi_block_erase_d8,
3100 }, {
3101 .eraseblocks = { {128 * 1024, 1} },
3102 .block_erase = spi_block_erase_c7,
3103 }
3104 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003105 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003106 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003107 },
3108
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003109 {
3110 .vendor = "PMC",
3111 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003112 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003113 .manufacture_id = PMC_ID,
3114 .model_id = PMC_25LV016B,
3115 .total_size = 2048,
3116 .page_size = 256,
3117 .tested = TEST_UNTESTED,
3118 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003119 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003120 .block_erasers =
3121 {
3122 {
3123 .eraseblocks = { {4 * 1024, 512} },
3124 .block_erase = spi_block_erase_d7,
3125 }, {
3126 .eraseblocks = { {4 * 1024, 512} },
3127 .block_erase = spi_block_erase_20,
3128 }, {
3129 .eraseblocks = { {64 * 1024, 32} },
3130 .block_erase = spi_block_erase_d8,
3131 }, {
3132 .eraseblocks = { {2 * 1024 * 1024, 1} },
3133 .block_erase = spi_block_erase_60,
3134 }, {
3135 .eraseblocks = { {2 * 1024 * 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 = "Pm25LV020",
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_25LV020,
3149 .total_size = 256,
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, 64} },
3158 .block_erase = spi_block_erase_d7,
3159 }, {
3160 .eraseblocks = { {64 * 1024, 4} },
3161 .block_erase = spi_block_erase_d8,
3162 }, {
3163 .eraseblocks = { {256 * 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 = "Pm25LV040",
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_25LV040,
3177 .total_size = 512,
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, 128} },
3186 .block_erase = spi_block_erase_d7,
3187 }, {
3188 .eraseblocks = { {64 * 1024, 8} },
3189 .block_erase = spi_block_erase_d8,
3190 }, {
3191 .eraseblocks = { {512 * 1024, 1} },
3192 .block_erase = spi_block_erase_c7,
3193 }
3194 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003195 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003196 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003197 },
3198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003199 {
3200 .vendor = "PMC",
3201 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003202 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003203 .manufacture_id = PMC_ID,
3204 .model_id = PMC_25LV080B,
3205 .total_size = 1024,
3206 .page_size = 256,
3207 .tested = TEST_UNTESTED,
3208 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003209 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003210 .block_erasers =
3211 {
3212 {
3213 .eraseblocks = { {4 * 1024, 256} },
3214 .block_erase = spi_block_erase_d7,
3215 }, {
3216 .eraseblocks = { {4 * 1024, 256} },
3217 .block_erase = spi_block_erase_20,
3218 }, {
3219 .eraseblocks = { {64 * 1024, 16} },
3220 .block_erase = spi_block_erase_d8,
3221 }, {
3222 .eraseblocks = { {1024 * 1024, 1} },
3223 .block_erase = spi_block_erase_60,
3224 }, {
3225 .eraseblocks = { {1024 * 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",
3235 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003236 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003237 .manufacture_id = PMC_ID,
3238 .model_id = PMC_25LV512,
3239 .total_size = 64,
3240 .page_size = 256,
3241 .tested = TEST_UNTESTED,
3242 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003243 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003244 .block_erasers =
3245 {
3246 {
3247 .eraseblocks = { {4 * 1024, 16} },
3248 .block_erase = spi_block_erase_d7,
3249 }, {
3250 .eraseblocks = { {32 * 1024, 2} },
3251 .block_erase = spi_block_erase_d8,
3252 }, {
3253 .eraseblocks = { {64 * 1024, 1} },
3254 .block_erase = spi_block_erase_c7,
3255 }
3256 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003257 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003258 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003259 },
3260
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003261 {
3262 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003263 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003264 .bustype = CHIP_BUSTYPE_PARALLEL,
3265 .manufacture_id = PMC_ID_NOPREFIX,
3266 .model_id = PMC_29F002T,
3267 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003268 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003269 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3270 .tested = TEST_UNTESTED,
3271 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003272 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003273 .block_erasers =
3274 {
3275 {
3276 .eraseblocks = {
3277 {128 * 1024, 1},
3278 {96 * 1024, 1},
3279 {8 * 1024, 2},
3280 {16 * 1024, 1},
3281 },
Sean Nelson35727f72010-01-28 23:55:12 +00003282 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003283 }, {
3284 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003285 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003286 },
3287 },
Sean Nelson35727f72010-01-28 23:55:12 +00003288 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003289 .read = read_memmapped,
3290 },
3291
3292 {
3293 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003294 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003295 .bustype = CHIP_BUSTYPE_PARALLEL,
3296 .manufacture_id = PMC_ID_NOPREFIX,
3297 .model_id = PMC_29F002B,
3298 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003299 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003300 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003301 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003302 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003303 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003304 .block_erasers =
3305 {
3306 {
3307 .eraseblocks = {
3308 {16 * 1024, 1},
3309 {8 * 1024, 2},
3310 {96 * 1024, 1},
3311 {128 * 1024, 1},
3312 },
Sean Nelson35727f72010-01-28 23:55:12 +00003313 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003314 }, {
3315 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003316 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003317 },
3318 },
Sean Nelson35727f72010-01-28 23:55:12 +00003319 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003320 .read = read_memmapped,
3321 },
3322
3323 {
3324 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003325 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003326 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003327 .manufacture_id = PMC_ID_NOPREFIX,
3328 .model_id = PMC_39F010,
3329 .total_size = 128,
3330 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003331 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3332 .tested = TEST_UNTESTED,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003333 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003334 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003335 .block_erasers =
3336 {
3337 {
3338 .eraseblocks = { {4 * 1024, 32} },
3339 .block_erase = erase_sector_jedec,
3340 }, {
3341 .eraseblocks = { {64 * 1024, 2} },
3342 .block_erase = erase_block_jedec,
3343 }, {
3344 .eraseblocks = { {128 * 1024, 1} },
3345 .block_erase = erase_chip_block_jedec,
3346 }
3347 },
Sean Nelson35727f72010-01-28 23:55:12 +00003348 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003349 .read = read_memmapped,
3350 },
3351
3352 {
3353 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003354 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003355 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003356 .manufacture_id = PMC_ID_NOPREFIX,
3357 .model_id = PMC_49FL002,
3358 .total_size = 256,
3359 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003360 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00003361 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003362 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003363 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003364 .block_erasers =
3365 {
3366 {
3367 .eraseblocks = { {4 * 1024, 64} },
3368 .block_erase = erase_sector_jedec,
3369 }, {
3370 .eraseblocks = { {16 * 1024, 16} },
3371 .block_erase = erase_block_jedec,
3372 }, {
3373 .eraseblocks = { {256 * 1024, 1} },
3374 .block_erase = erase_chip_block_jedec,
3375 }
3376 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003377 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003378 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003379 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003380 },
3381
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003382 {
3383 .vendor = "PMC",
3384 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003385 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003386 .manufacture_id = PMC_ID_NOPREFIX,
3387 .model_id = PMC_49FL004,
3388 .total_size = 512,
3389 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003390 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3391 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003392 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003393 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003394 .block_erasers =
3395 {
3396 {
3397 .eraseblocks = { {4 * 1024, 128} },
3398 .block_erase = erase_sector_jedec,
3399 }, {
3400 .eraseblocks = { {64 * 1024, 8} },
3401 .block_erase = erase_block_jedec,
3402 }, {
3403 .eraseblocks = { {512 * 1024, 1} },
3404 .block_erase = erase_chip_block_jedec,
3405 }
3406 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003407 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003408 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003409 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003410 },
3411
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003412 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003413 .vendor = "Sanyo",
3414 .name = "LF25FW203A",
3415 .bustype = CHIP_BUSTYPE_SPI,
3416 .manufacture_id = SANYO_ID,
3417 .model_id = SANYO_LE25FW203A,
3418 .total_size = 2048,
3419 .page_size = 256,
3420 .tested = TEST_UNTESTED,
3421 .probe = probe_spi_rdid,
3422 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003423 .block_erasers =
3424 {
3425 {
3426 .eraseblocks = { {64 * 1024, 32} },
3427 .block_erase = spi_block_erase_d8,
3428 }, {
3429 .eraseblocks = { {2 * 1024 * 1024, 1} },
3430 .block_erase = spi_block_erase_c7,
3431 }
3432 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003433 .write = spi_chip_write_256,
3434 .read = spi_chip_read,
3435 },
3436
3437 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003438 .vendor = "Sharp",
3439 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003440 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003441 .manufacture_id = SHARP_ID,
3442 .model_id = SHARP_LHF00L04,
3443 .total_size = 1024,
3444 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003445 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003446 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003447 .probe = probe_49lfxxxc,
3448 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003449 .block_erasers =
3450 {
3451 {
3452 .eraseblocks = {
3453 {64 * 1024, 15},
3454 {8 * 1024, 8}
3455 },
3456 .block_erase = erase_lhf00l04_block,
3457 }, {
3458 .eraseblocks = {
3459 {1024 * 1024, 1}
3460 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003461 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003462 },
3463 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003464 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003465 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003466 },
3467
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003468 {
3469 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003470 .name = "S25FL008A",
3471 .bustype = CHIP_BUSTYPE_SPI,
3472 .manufacture_id = SPANSION_ID,
3473 .model_id = SPANSION_S25FL008A,
3474 .total_size = 1024,
3475 .page_size = 256,
3476 .tested = TEST_OK_PREW,
3477 .probe = probe_spi_rdid,
3478 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003479 .block_erasers =
3480 {
3481 {
3482 .eraseblocks = { {64 * 1024, 16} },
3483 .block_erase = spi_block_erase_d8,
3484 }, {
3485 .eraseblocks = { {1024 * 1024, 1} },
3486 .block_erase = spi_block_erase_c7,
3487 }
3488 },
3489 .write = spi_chip_write_256,
3490 .read = spi_chip_read,
3491 },
3492
3493 {
3494 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003495 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003496 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003497 .manufacture_id = SPANSION_ID,
3498 .model_id = SPANSION_S25FL016A,
3499 .total_size = 2048,
3500 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003501 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003502 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003503 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003504 .block_erasers =
3505 {
3506 {
3507 .eraseblocks = { {64 * 1024, 32} },
3508 .block_erase = spi_block_erase_d8,
3509 }, {
3510 .eraseblocks = { {2 * 1024 * 1024, 1} },
3511 .block_erase = spi_block_erase_c7,
3512 }
3513 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003514 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003515 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003516 },
3517
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003518 {
3519 .vendor = "SST",
3520 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003521 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003522 .manufacture_id = SST_ID,
3523 .model_id = SST_25VF016B,
3524 .total_size = 2048,
3525 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003526 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003527 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003528 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003529 .block_erasers =
3530 {
3531 {
3532 .eraseblocks = { {4 * 1024, 512} },
3533 .block_erase = spi_block_erase_20,
3534 }, {
3535 .eraseblocks = { {32 * 1024, 64} },
3536 .block_erase = spi_block_erase_52,
3537 }, {
3538 .eraseblocks = { {64 * 1024, 32} },
3539 .block_erase = spi_block_erase_d8,
3540 }, {
3541 .eraseblocks = { {2 * 1024 * 1024, 1} },
3542 .block_erase = spi_block_erase_60,
3543 }, {
3544 .eraseblocks = { {2 * 1024 * 1024, 1} },
3545 .block_erase = spi_block_erase_c7,
3546 },
3547 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003548 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003549 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003550 },
3551
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003552 {
3553 .vendor = "SST",
3554 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003555 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003556 .manufacture_id = SST_ID,
3557 .model_id = SST_25VF032B,
3558 .total_size = 4096,
3559 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003560 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003561 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003562 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003563 .block_erasers =
3564 {
3565 {
3566 .eraseblocks = { {4 * 1024, 1024} },
3567 .block_erase = spi_block_erase_20,
3568 }, {
3569 .eraseblocks = { {32 * 1024, 128} },
3570 .block_erase = spi_block_erase_52,
3571 }, {
3572 .eraseblocks = { {64 * 1024, 64} },
3573 .block_erase = spi_block_erase_d8,
3574 }, {
3575 .eraseblocks = { {4 * 1024 * 1024, 1} },
3576 .block_erase = spi_block_erase_60,
3577 }, {
3578 .eraseblocks = { {4 * 1024 * 1024, 1} },
3579 .block_erase = spi_block_erase_c7,
3580 },
3581 },
3582 .write = spi_chip_write_1,
3583 .read = spi_chip_read,
3584 },
3585
3586 {
3587 .vendor = "SST",
3588 .name = "SST25VF040.REMS",
3589 .bustype = CHIP_BUSTYPE_SPI,
3590 .manufacture_id = SST_ID,
3591 .model_id = SST_25VF040_REMS,
3592 .total_size = 512,
3593 .page_size = 256,
3594 .tested = TEST_OK_PR,
3595 .probe = probe_spi_rems,
3596 .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 = { {512 * 1024, 1} },
3607 .block_erase = spi_block_erase_60,
3608 },
3609 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003610 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003611 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003612 },
3613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003614 {
3615 .vendor = "SST",
3616 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003617 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003618 .manufacture_id = SST_ID,
3619 .model_id = SST_25VF040B,
3620 .total_size = 512,
3621 .page_size = 256,
3622 .tested = TEST_UNTESTED,
3623 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003624 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003625 .block_erasers =
3626 {
3627 {
3628 .eraseblocks = { {4 * 1024, 128} },
3629 .block_erase = spi_block_erase_20,
3630 }, {
3631 .eraseblocks = { {32 * 1024, 16} },
3632 .block_erase = spi_block_erase_52,
3633 }, {
3634 .eraseblocks = { {64 * 1024, 8} },
3635 .block_erase = spi_block_erase_d8,
3636 }, {
3637 .eraseblocks = { {512 * 1024, 1} },
3638 .block_erase = spi_block_erase_60,
3639 }, {
3640 .eraseblocks = { {512 * 1024, 1} },
3641 .block_erase = spi_block_erase_c7,
3642 },
3643 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003644 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003645 .read = spi_chip_read,
3646 },
3647
3648 {
3649 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003650 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003651 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003652 .manufacture_id = SST_ID,
3653 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003654 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003655 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003656 .tested = TEST_OK_PR,
3657 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003658 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003659 .block_erasers =
3660 {
3661 {
3662 .eraseblocks = { {4 * 1024, 128} },
3663 .block_erase = spi_block_erase_20,
3664 }, {
3665 .eraseblocks = { {32 * 1024, 16} },
3666 .block_erase = spi_block_erase_52,
3667 }, {
3668 .eraseblocks = { {64 * 1024, 8} },
3669 .block_erase = spi_block_erase_d8,
3670 }, {
3671 .eraseblocks = { {512 * 1024, 1} },
3672 .block_erase = spi_block_erase_60,
3673 }, {
3674 .eraseblocks = { {512 * 1024, 1} },
3675 .block_erase = spi_block_erase_c7,
3676 },
3677 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003678 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003679 .read = spi_chip_read,
3680 },
3681
3682 {
3683 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003684 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003685 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003686 .manufacture_id = SST_ID,
3687 .model_id = SST_25VF080B,
3688 .total_size = 1024,
3689 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003690 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003691 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003692 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003693 .block_erasers =
3694 {
3695 {
3696 .eraseblocks = { {4 * 1024, 256} },
3697 .block_erase = spi_block_erase_20,
3698 }, {
3699 .eraseblocks = { {32 * 1024, 32} },
3700 .block_erase = spi_block_erase_52,
3701 }, {
3702 .eraseblocks = { {64 * 1024, 16} },
3703 .block_erase = spi_block_erase_d8,
3704 }, {
3705 .eraseblocks = { {1024 * 1024, 1} },
3706 .block_erase = spi_block_erase_60,
3707 }, {
3708 .eraseblocks = { {1024 * 1024, 1} },
3709 .block_erase = spi_block_erase_c7,
3710 },
3711 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003712 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003713 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003714 },
3715
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003716 {
3717 .vendor = "SST",
3718 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003719 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003720 .manufacture_id = SST_ID,
3721 .model_id = SST_28SF040,
3722 .total_size = 512,
3723 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003724 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003725 .tested = TEST_UNTESTED,
3726 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003727 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003728 .block_erasers =
3729 {
3730 {
3731 .eraseblocks = { {128, 4096} },
3732 .block_erase = erase_sector_28sf040,
3733 }, {
3734 .eraseblocks = { {512 * 1024, 1} },
3735 .block_erase = erase_chip_28sf040,
3736 }
3737 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003738 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003739 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003740 },
3741
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003742 {
3743 .vendor = "SST",
3744 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003745 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003746 .manufacture_id = SST_ID,
3747 .model_id = SST_29EE010,
3748 .total_size = 128,
3749 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003750 .feature_bits = FEATURE_LONG_RESET,
3751 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003752 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003753 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003754 .block_erasers =
3755 {
3756 {
3757 .eraseblocks = { {128 * 1024, 1} },
3758 .block_erase = erase_chip_block_jedec,
3759 }
3760 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003761 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003762 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003763 },
3764
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003765 {
3766 .vendor = "SST",
3767 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003768 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003769 .manufacture_id = SST_ID,
3770 .model_id = SST_29LE010,
3771 .total_size = 128,
3772 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003773 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003774 .tested = TEST_UNTESTED,
3775 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003776 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003777 .block_erasers =
3778 {
3779 {
3780 .eraseblocks = { {128 * 1024, 1} },
3781 .block_erase = erase_chip_block_jedec,
3782 }
3783 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003784 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003785 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003786 },
3787
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003788 {
3789 .vendor = "SST",
3790 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003791 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003792 .manufacture_id = SST_ID,
3793 .model_id = SST_29EE020A,
3794 .total_size = 256,
3795 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003796 .feature_bits = FEATURE_LONG_RESET,
3797 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003798 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003799 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003800 .block_erasers =
3801 {
3802 {
3803 .eraseblocks = { {256 * 1024, 1} },
3804 .block_erase = erase_chip_block_jedec,
3805 }
3806 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003807 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003808 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003809 },
3810
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003811 {
3812 .vendor = "SST",
3813 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003814 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003815 .manufacture_id = SST_ID,
3816 .model_id = SST_29LE020,
3817 .total_size = 256,
3818 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003819 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003820 .tested = TEST_UNTESTED,
3821 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003822 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003823 .block_erasers =
3824 {
3825 {
3826 .eraseblocks = { {256 * 1024, 1} },
3827 .block_erase = erase_chip_block_jedec,
3828 }
3829 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003830 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003831 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003832 },
3833
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003834 {
3835 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00003836 .name = "SST39SF512",
3837 .bustype = CHIP_BUSTYPE_PARALLEL,
3838 .manufacture_id = SST_ID,
3839 .model_id = SST_39SF512,
3840 .total_size = 64,
3841 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003842 .feature_bits = FEATURE_EITHER_RESET,
3843 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003844 .probe = probe_jedec,
3845 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00003846 .block_erasers =
3847 {
3848 {
3849 .eraseblocks = { {4 * 1024, 16} },
3850 .block_erase = erase_sector_jedec,
3851 }, {
3852 .eraseblocks = { {64 * 1024, 1} },
3853 .block_erase = erase_chip_block_jedec,
3854 }
3855 },
Sean Nelson35727f72010-01-28 23:55:12 +00003856 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003857 .read = read_memmapped,
3858 },
3859
3860 {
3861 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003862 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003863 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003864 .manufacture_id = SST_ID,
3865 .model_id = SST_39SF010,
3866 .total_size = 128,
3867 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003868 .feature_bits = FEATURE_EITHER_RESET,
3869 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003870 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003871 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003872 .block_erasers =
3873 {
3874 {
3875 .eraseblocks = { {4 * 1024, 32} },
3876 .block_erase = erase_sector_jedec,
3877 }, {
3878 .eraseblocks = { {128 * 1024, 1} },
3879 .block_erase = erase_chip_block_jedec,
3880 }
3881 },
Sean Nelson35727f72010-01-28 23:55:12 +00003882 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003883 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003884 },
3885
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003886 {
3887 .vendor = "SST",
3888 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003889 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003890 .manufacture_id = SST_ID,
3891 .model_id = SST_39SF020,
3892 .total_size = 256,
3893 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003894 .feature_bits = FEATURE_EITHER_RESET,
3895 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003896 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003897 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003898 .block_erasers =
3899 {
3900 {
3901 .eraseblocks = { {4 * 1024, 64} },
3902 .block_erase = erase_sector_jedec,
3903 }, {
3904 .eraseblocks = { {256 * 1024, 1} },
3905 .block_erase = erase_chip_block_jedec,
3906 }
3907 },
Sean Nelson35727f72010-01-28 23:55:12 +00003908 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003909 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003910 },
3911
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003912 {
3913 .vendor = "SST",
3914 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003915 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003916 .manufacture_id = SST_ID,
3917 .model_id = SST_39SF040,
3918 .total_size = 512,
3919 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003920 .feature_bits = FEATURE_EITHER_RESET,
3921 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003922 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003923 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003924 .block_erasers =
3925 {
3926 {
3927 .eraseblocks = { {4 * 1024, 128} },
3928 .block_erase = erase_sector_jedec,
3929 }, {
3930 .eraseblocks = { {512 * 1024, 1} },
3931 .block_erase = erase_chip_block_jedec,
3932 }
3933 },
Sean Nelson35727f72010-01-28 23:55:12 +00003934 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003935 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003936 },
3937
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003938 {
3939 .vendor = "SST",
3940 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00003941 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003942 .manufacture_id = SST_ID,
3943 .model_id = SST_39VF512,
3944 .total_size = 64,
3945 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003946 .feature_bits = FEATURE_EITHER_RESET,
3947 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003948 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003949 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00003950 .block_erasers =
3951 {
3952 {
3953 .eraseblocks = { {4 * 1024, 16} },
3954 .block_erase = erase_sector_jedec,
3955 }, {
3956 .eraseblocks = { {64 * 1024, 1} },
3957 .block_erase = erase_chip_block_jedec,
3958 }
3959 },
Sean Nelson35727f72010-01-28 23:55:12 +00003960 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003961 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003962 },
3963
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003964 {
3965 .vendor = "SST",
3966 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003967 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003968 .manufacture_id = SST_ID,
3969 .model_id = SST_39VF010,
3970 .total_size = 128,
3971 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003972 .feature_bits = FEATURE_EITHER_RESET,
3973 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003974 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003975 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003976 .block_erasers =
3977 {
3978 {
3979 .eraseblocks = { {4 * 1024, 32} },
3980 .block_erase = erase_sector_jedec,
3981 }, {
3982 .eraseblocks = { {128 * 1024, 1} },
3983 .block_erase = erase_chip_block_jedec,
3984 }
3985 },
Sean Nelson35727f72010-01-28 23:55:12 +00003986 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003987 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003988 },
3989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003990 {
3991 .vendor = "SST",
3992 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003993 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003994 .manufacture_id = SST_ID,
3995 .model_id = SST_39VF020,
3996 .total_size = 256,
3997 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003998 .feature_bits = FEATURE_EITHER_RESET,
3999 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004000 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004001 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004002 .block_erasers =
4003 {
4004 {
4005 .eraseblocks = { {4 * 1024, 64} },
4006 .block_erase = erase_sector_jedec,
4007 }, {
4008 .eraseblocks = { {256 * 1024, 1} },
4009 .block_erase = erase_chip_block_jedec,
4010 }
4011 },
Sean Nelson35727f72010-01-28 23:55:12 +00004012 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004013 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004014 },
4015
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004016 {
4017 .vendor = "SST",
4018 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004019 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004020 .manufacture_id = SST_ID,
4021 .model_id = SST_39VF040,
4022 .total_size = 512,
4023 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004024 .feature_bits = FEATURE_EITHER_RESET,
4025 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004026 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004027 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004028 .block_erasers =
4029 {
4030 {
4031 .eraseblocks = { {4 * 1024, 128} },
4032 .block_erase = erase_sector_jedec,
4033 }, {
4034 .eraseblocks = { {512 * 1024, 1} },
4035 .block_erase = erase_chip_block_jedec,
4036 }
4037 },
Sean Nelson35727f72010-01-28 23:55:12 +00004038 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004039 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004040 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004041
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004042 {
4043 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004044 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004045 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004046 .manufacture_id = SST_ID,
4047 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004048 .total_size = 1024,
4049 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004050 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004051 .tested = TEST_UNTESTED,
4052 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004053 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004054 .block_erasers =
4055 {
4056 {
4057 .eraseblocks = { {4 * 1024, 256} },
4058 .block_erase = erase_sector_jedec,
4059 }, {
4060 .eraseblocks = { {64 * 1024, 16} },
4061 .block_erase = erase_block_jedec,
4062 }, {
4063 .eraseblocks = { {1024 * 1024, 1} },
4064 .block_erase = erase_chip_block_jedec,
4065 }
4066 },
Sean Nelson35727f72010-01-28 23:55:12 +00004067 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004068 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004069 },
4070
4071 {
4072 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004073 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004074 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004075 .manufacture_id = SST_ID,
4076 .model_id = SST_49LF002A,
4077 .total_size = 256,
4078 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004079 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004080 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004081 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004082 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004083 .block_erasers =
4084 {
4085 {
4086 .eraseblocks = { {4 * 1024, 64} },
4087 .block_erase = erase_sst_fwhub_sector,
4088 }, {
4089 .eraseblocks = { {16 * 1024, 16} },
4090 .block_erase = erase_sst_fwhub_block,
4091 }, {
4092 .eraseblocks = { {256 * 1024, 1} },
4093 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4094 }
4095 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004096 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004097 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004098 },
4099
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004100 {
4101 .vendor = "SST",
4102 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004103 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004104 .manufacture_id = SST_ID,
4105 .model_id = SST_49LF003A,
4106 .total_size = 384,
4107 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004108 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004109 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004110 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004111 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004112 .block_erasers =
4113 {
4114 {
4115 .eraseblocks = { {4 * 1024, 96} },
4116 .block_erase = erase_sst_fwhub_sector,
4117 }, {
4118 .eraseblocks = { {64 * 1024, 6} },
4119 .block_erase = erase_sst_fwhub_block,
4120 }, {
4121 .eraseblocks = { {384 * 1024, 1} },
4122 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4123 }
4124 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004125 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004126 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004127 },
4128
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004129 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004130 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4131 * and is only honored for 64k block erase, but not 4k sector erase.
4132 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004133 .vendor = "SST",
4134 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004135 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004136 .manufacture_id = SST_ID,
4137 .model_id = SST_49LF004A,
4138 .total_size = 512,
4139 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004140 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004141 .tested = TEST_OK_PREW,
4142 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004143 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004144 .block_erasers =
4145 {
4146 {
4147 .eraseblocks = { {4 * 1024, 128} },
4148 .block_erase = erase_sector_jedec, /* missing unlock */
4149 }, {
4150 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00004151 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004152 }, {
4153 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004154 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004155 },
4156 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004157 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004158 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004159 },
4160
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004161 {
4162 .vendor = "SST",
4163 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004164 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004165 .manufacture_id = SST_ID,
4166 .model_id = SST_49LF004C,
4167 .total_size = 512,
4168 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004169 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004170 .tested = TEST_UNTESTED,
4171 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004172 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004173 .block_erasers =
4174 {
4175 {
4176 .eraseblocks = { {4 * 1024, 128} },
4177 .block_erase = erase_sector_49lfxxxc,
4178 }, {
4179 .eraseblocks = {
4180 {64 * 1024, 7},
4181 {32 * 1024, 1},
4182 {8 * 1024, 2},
4183 {16 * 1024, 1},
4184 },
4185 .block_erase = erase_block_49lfxxxc,
4186 }
4187 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004188 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004189 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004190 },
4191
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004192 {
4193 .vendor = "SST",
4194 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004195 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004196 .manufacture_id = SST_ID,
4197 .model_id = SST_49LF008A,
4198 .total_size = 1024,
4199 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004200 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004201 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004202 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004203 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004204 .block_erasers =
4205 {
4206 {
4207 .eraseblocks = { {4 * 1024, 256} },
4208 .block_erase = erase_sst_fwhub_sector,
4209 }, {
4210 .eraseblocks = { {64 * 1024, 16} },
4211 .block_erase = erase_sst_fwhub_block,
4212 }, {
4213 .eraseblocks = { {1024 * 1024, 1} },
4214 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4215 }
4216 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004217 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004218 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004219 },
4220
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004221 {
4222 .vendor = "SST",
4223 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004224 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004225 .manufacture_id = SST_ID,
4226 .model_id = SST_49LF008C,
4227 .total_size = 1024,
4228 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004229 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004230 .tested = TEST_UNTESTED,
4231 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004232 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004233 .block_erasers =
4234 {
4235 {
4236 .eraseblocks = { {4 * 1024, 256} },
4237 .block_erase = erase_sector_49lfxxxc,
4238 }, {
4239 .eraseblocks = {
4240 {64 * 1024, 15},
4241 {32 * 1024, 1},
4242 {8 * 1024, 2},
4243 {16 * 1024, 1},
4244 },
4245 .block_erase = erase_block_49lfxxxc,
4246 }
4247 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004248 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004249 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004250 },
4251
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004252 {
4253 .vendor = "SST",
4254 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004255 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004256 .manufacture_id = SST_ID,
4257 .model_id = SST_49LF016C,
4258 .total_size = 2048,
4259 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004260 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004261 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004262 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004263 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004264 .block_erasers =
4265 {
4266 {
4267 .eraseblocks = { {4 * 1024, 512} },
4268 .block_erase = erase_sector_49lfxxxc,
4269 }, {
4270 .eraseblocks = {
4271 {64 * 1024, 31},
4272 {32 * 1024, 1},
4273 {8 * 1024, 2},
4274 {16 * 1024, 1},
4275 },
4276 .block_erase = erase_block_49lfxxxc,
4277 }
4278 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004279 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004280 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004281 },
4282
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004283 {
4284 .vendor = "SST",
4285 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004286 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004287 .manufacture_id = SST_ID,
4288 .model_id = SST_49LF020,
4289 .total_size = 256,
4290 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004291 .feature_bits = FEATURE_EITHER_RESET,
4292 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004293 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004294 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004295 .block_erasers =
4296 {
4297 {
4298 .eraseblocks = { {4 * 1024, 64} },
4299 .block_erase = erase_sector_jedec,
4300 }, {
4301 .eraseblocks = { {16 * 1024, 16} },
4302 .block_erase = erase_block_jedec,
4303 }, {
4304 .eraseblocks = { {256 * 1024, 1} },
4305 .block_erase = NULL,
4306 }
4307 },
Sean Nelson35727f72010-01-28 23:55:12 +00004308 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004309 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004310 },
4311
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004312 {
4313 .vendor = "SST",
4314 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004315 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004316 .manufacture_id = SST_ID,
4317 .model_id = SST_49LF020A,
4318 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004319 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004320 .feature_bits = FEATURE_EITHER_RESET,
4321 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004322 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004323 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004324 .block_erasers =
4325 {
4326 {
4327 .eraseblocks = { {4 * 1024, 64} },
4328 .block_erase = erase_sector_jedec,
4329 }, {
4330 .eraseblocks = { {16 * 1024, 16} },
4331 .block_erase = erase_block_jedec,
4332 }, {
4333 .eraseblocks = { {256 * 1024, 1} },
4334 .block_erase = NULL,
4335 }
4336 },
Sean Nelson35727f72010-01-28 23:55:12 +00004337 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004338 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004339 },
4340
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004341 {
4342 .vendor = "SST",
4343 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004344 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004345 .manufacture_id = SST_ID,
4346 .model_id = SST_49LF040,
4347 .total_size = 512,
4348 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004349 .feature_bits = FEATURE_EITHER_RESET,
4350 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004351 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004352 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004353 .block_erasers =
4354 {
4355 {
4356 .eraseblocks = { {4 * 1024, 128} },
4357 .block_erase = erase_sector_jedec,
4358 }, {
4359 .eraseblocks = { {64 * 1024, 8} },
4360 .block_erase = erase_block_jedec,
4361 }, {
4362 .eraseblocks = { {512 * 1024, 1} },
4363 .block_erase = NULL,
4364 }
4365 },
Sean Nelson35727f72010-01-28 23:55:12 +00004366 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004367 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004368 },
4369
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004370 {
4371 .vendor = "SST",
4372 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004373 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004374 .manufacture_id = SST_ID,
4375 .model_id = SST_49LF040B,
4376 .total_size = 512,
4377 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004378 .feature_bits = FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004379 .tested = TEST_UNTESTED,
4380 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004381 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004382 .block_erasers =
4383 {
4384 {
4385 .eraseblocks = { {4 * 1024, 128} },
4386 .block_erase = erase_sector_jedec,
4387 }, {
4388 .eraseblocks = { {64 * 1024, 8} },
4389 .block_erase = erase_block_jedec,
4390 }, {
4391 .eraseblocks = { {512 * 1024, 1} },
4392 .block_erase = NULL,
4393 }
4394 },
Sean Nelson35727f72010-01-28 23:55:12 +00004395 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004396 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004397 },
4398
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004399 {
4400 .vendor = "SST",
4401 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004402 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004403 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004404 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004405 .total_size = 1024,
4406 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004407 .feature_bits = FEATURE_EITHER_RESET,
4408 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004409 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004410 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004411 .block_erasers =
4412 {
4413 {
4414 .eraseblocks = { {4 * 1024, 256} },
4415 .block_erase = erase_sector_jedec,
4416 }, {
4417 .eraseblocks = { {64 * 1024, 16} },
4418 .block_erase = erase_block_jedec,
4419 }, {
4420 .eraseblocks = { {1024 * 1024, 1} },
4421 .block_erase = NULL,
4422 }
4423 },
Sean Nelson35727f72010-01-28 23:55:12 +00004424 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004425 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004426 },
4427
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004428 {
4429 .vendor = "SST",
4430 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004431 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004432 .manufacture_id = SST_ID,
4433 .model_id = SST_49LF160C,
4434 .total_size = 2048,
4435 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004436 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004437 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004438 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004439 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004440 .block_erasers =
4441 {
4442 {
4443 .eraseblocks = { {4 * 1024, 512} },
4444 .block_erase = erase_sector_49lfxxxc,
4445 }, {
4446 .eraseblocks = {
4447 {64 * 1024, 31},
4448 {32 * 1024, 1},
4449 {8 * 1024, 2},
4450 {16 * 1024, 1},
4451 },
4452 .block_erase = erase_block_49lfxxxc,
4453 }
4454 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004455 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004456 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004457 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004458 },
4459
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004460 {
4461 .vendor = "ST",
4462 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004463 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004464 .manufacture_id = ST_ID,
4465 .model_id = ST_M25P05A,
4466 .total_size = 64,
4467 .page_size = 256,
4468 .tested = TEST_UNTESTED,
4469 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004470 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004471 .block_erasers =
4472 {
4473 {
4474 .eraseblocks = { {32 * 1024, 2} },
4475 .block_erase = spi_block_erase_d8,
4476 }, {
4477 .eraseblocks = { {64 * 1024, 1} },
4478 .block_erase = spi_block_erase_c7,
4479 }
4480 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004481 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004482 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004483 },
4484
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004485 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4486 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
4487 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
4488 * only is successful if RDID does not work.
4489 */
4490 {
4491 .vendor = "ST",
4492 .name = "M25P05.RES",
4493 .bustype = CHIP_BUSTYPE_SPI,
4494 .manufacture_id = ST_ID,
4495 .model_id = ST_M25P05_RES,
4496 .total_size = 64,
4497 .page_size = 256,
4498 .tested = TEST_UNTESTED,
4499 .probe = probe_spi_res,
4500 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004501 .block_erasers =
4502 {
4503 {
4504 .eraseblocks = { {32 * 1024, 2} },
4505 .block_erase = spi_block_erase_d8,
4506 }, {
4507 .eraseblocks = { {64 * 1024, 1} },
4508 .block_erase = spi_block_erase_c7,
4509 }
4510 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004511 .write = spi_chip_write_1, /* 128 */
4512 .read = spi_chip_read,
4513 },
4514
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004515 {
4516 .vendor = "ST",
4517 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004518 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004519 .manufacture_id = ST_ID,
4520 .model_id = ST_M25P10A,
4521 .total_size = 128,
4522 .page_size = 256,
4523 .tested = TEST_UNTESTED,
4524 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004525 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004526 .block_erasers =
4527 {
4528 {
4529 .eraseblocks = { {32 * 1024, 4} },
4530 .block_erase = spi_block_erase_d8,
4531 }, {
4532 .eraseblocks = { {128 * 1024, 1} },
4533 .block_erase = spi_block_erase_c7,
4534 }
4535 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004536 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004537 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004538 },
4539
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004540 /* The ST M25P10 has the same problem as the M25P05. */
4541 {
4542 .vendor = "ST",
4543 .name = "M25P10.RES",
4544 .bustype = CHIP_BUSTYPE_SPI,
4545 .manufacture_id = ST_ID,
4546 .model_id = ST_M25P10_RES,
4547 .total_size = 128,
4548 .page_size = 256,
4549 .tested = TEST_UNTESTED,
4550 .probe = probe_spi_res,
4551 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004552 .block_erasers =
4553 {
4554 {
4555 .eraseblocks = { {32 * 1024, 4} },
4556 .block_erase = spi_block_erase_d8,
4557 }, {
4558 .eraseblocks = { {128 * 1024, 1} },
4559 .block_erase = spi_block_erase_c7,
4560 }
4561 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004562 .write = spi_chip_write_1, /* 128 */
4563 .read = spi_chip_read,
4564 },
4565
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004566 {
4567 .vendor = "ST",
4568 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004569 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004570 .manufacture_id = ST_ID,
4571 .model_id = ST_M25P20,
4572 .total_size = 256,
4573 .page_size = 256,
4574 .tested = TEST_UNTESTED,
4575 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004576 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004577 .block_erasers =
4578 {
4579 {
4580 .eraseblocks = { {64 * 1024, 4} },
4581 .block_erase = spi_block_erase_d8,
4582 }, {
4583 .eraseblocks = { {256 * 1024, 1} },
4584 .block_erase = spi_block_erase_c7,
4585 }
4586 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004587 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004588 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004589 },
4590
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004591 {
4592 .vendor = "ST",
4593 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004594 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004595 .manufacture_id = ST_ID,
4596 .model_id = ST_M25P40,
4597 .total_size = 512,
4598 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004599 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004600 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004601 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004602 .block_erasers =
4603 {
4604 {
4605 .eraseblocks = { {64 * 1024, 8} },
4606 .block_erase = spi_block_erase_d8,
4607 }, {
4608 .eraseblocks = { {512 * 1024, 1} },
4609 .block_erase = spi_block_erase_c7,
4610 }
4611 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004612 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004613 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004614 },
4615
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004616 {
4617 .vendor = "ST",
4618 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004619 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004620 .manufacture_id = ST_ID,
4621 .model_id = ST_M25P40_RES,
4622 .total_size = 512,
4623 .page_size = 256,
4624 .tested = TEST_UNTESTED,
4625 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004626 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004627 .block_erasers =
4628 {
4629 {
4630 .eraseblocks = { {64 * 1024, 8} },
4631 .block_erase = spi_block_erase_d8,
4632 }, {
4633 .eraseblocks = { {512 * 1024, 1} },
4634 .block_erase = spi_block_erase_c7,
4635 }
4636 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004637 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004638 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004639 },
4640
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004641 {
4642 .vendor = "ST",
4643 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004644 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004645 .manufacture_id = ST_ID,
4646 .model_id = ST_M25P80,
4647 .total_size = 1024,
4648 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004649 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004650 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004651 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004652 .block_erasers =
4653 {
4654 {
4655 .eraseblocks = { {64 * 1024, 16} },
4656 .block_erase = spi_block_erase_d8,
4657 }, {
4658 .eraseblocks = { {1024 * 1024, 1} },
4659 .block_erase = spi_block_erase_c7,
4660 }
4661 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004662 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004663 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004664 },
4665
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004666 {
4667 .vendor = "ST",
4668 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004669 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004670 .manufacture_id = ST_ID,
4671 .model_id = ST_M25P16,
4672 .total_size = 2048,
4673 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004674 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004675 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004676 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004677 .block_erasers =
4678 {
4679 {
4680 .eraseblocks = { {64 * 1024, 32} },
4681 .block_erase = spi_block_erase_d8,
4682 }, {
4683 .eraseblocks = { {2 * 1024 * 1024, 1} },
4684 .block_erase = spi_block_erase_c7,
4685 }
4686 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004687 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004688 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004689 },
4690
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004691 {
4692 .vendor = "ST",
4693 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004694 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004695 .manufacture_id = ST_ID,
4696 .model_id = ST_M25P32,
4697 .total_size = 4096,
4698 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004699 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004700 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004701 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004702 .block_erasers =
4703 {
4704 {
4705 .eraseblocks = { {64 * 1024, 64} },
4706 .block_erase = spi_block_erase_d8,
4707 }, {
4708 .eraseblocks = { {4 * 1024 * 1024, 1} },
4709 .block_erase = spi_block_erase_c7,
4710 }
4711 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004712 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004713 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004714 },
4715
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004716 {
4717 .vendor = "ST",
4718 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004719 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004720 .manufacture_id = ST_ID,
4721 .model_id = ST_M25P64,
4722 .total_size = 8192,
4723 .page_size = 256,
4724 .tested = TEST_UNTESTED,
4725 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004726 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004727 .block_erasers =
4728 {
4729 {
4730 .eraseblocks = { {64 * 1024, 128} },
4731 .block_erase = spi_block_erase_d8,
4732 }, {
4733 .eraseblocks = { {8 * 1024 * 1024, 1} },
4734 .block_erase = spi_block_erase_c7,
4735 }
4736 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004737 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004738 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004739 },
4740
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004741 {
4742 .vendor = "ST",
4743 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004744 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004745 .manufacture_id = ST_ID,
4746 .model_id = ST_M25P128,
4747 .total_size = 16384,
4748 .page_size = 256,
4749 .tested = TEST_UNTESTED,
4750 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004751 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004752 .block_erasers =
4753 {
4754 {
4755 .eraseblocks = { {256 * 1024, 64} },
4756 .block_erase = spi_block_erase_d8,
4757 }, {
4758 .eraseblocks = { {16 * 1024 * 1024, 1} },
4759 .block_erase = spi_block_erase_c7,
4760 }
4761 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004762 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004763 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004764 },
4765
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004766 {
4767 .vendor = "ST",
4768 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004769 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004770 .manufacture_id = ST_ID,
4771 .model_id = ST_M29F002B,
4772 .total_size = 256,
4773 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004774 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004775 .tested = TEST_UNTESTED,
4776 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004777 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004778 .block_erasers =
4779 {
4780 {
4781 .eraseblocks = {
4782 {16 * 1024, 1},
4783 {8 * 1024, 2},
4784 {32 * 1024, 1},
4785 {64 * 1024, 3},
4786 },
4787 .block_erase = erase_sector_jedec,
4788 }, {
4789 .eraseblocks = { {256 * 1024, 1} },
4790 .block_erase = erase_chip_block_jedec,
4791 }
4792 },
Sean Nelson35727f72010-01-28 23:55:12 +00004793 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004794 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004795 },
4796
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004797 {
4798 .vendor = "ST",
4799 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004800 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004801 .manufacture_id = ST_ID,
4802 .model_id = ST_M29F002T,
4803 .total_size = 256,
4804 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004805 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
4806 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004807 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004808 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004809 .block_erasers =
4810 {
4811 {
4812 .eraseblocks = {
4813 {64 * 1024, 3},
4814 {32 * 1024, 1},
4815 {8 * 1024, 2},
4816 {16 * 1024, 1},
4817 },
4818 .block_erase = erase_sector_jedec,
4819 }, {
4820 .eraseblocks = { {256 * 1024, 1} },
4821 .block_erase = erase_chip_block_jedec,
4822 }
4823 },
Sean Nelson35727f72010-01-28 23:55:12 +00004824 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004825 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004826 },
4827
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004828 {
4829 .vendor = "ST",
4830 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004831 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004832 .manufacture_id = ST_ID,
4833 .model_id = ST_M29F040B,
4834 .total_size = 512,
4835 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004836 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4837 .tested = TEST_UNTESTED,
4838 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004839 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004840 .block_erasers =
4841 {
4842 {
4843 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004844 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004845 }, {
4846 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004847 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004848 }
4849 },
Sean Nelson35727f72010-01-28 23:55:12 +00004850 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004851 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004852 },
4853
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004854 {
Sean Nelson35727f72010-01-28 23:55:12 +00004855 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004856 .vendor = "ST",
4857 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004858 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004859 .manufacture_id = ST_ID,
4860 .model_id = ST_M29F400BT,
4861 .total_size = 512,
4862 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004863 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004864 .tested = TEST_UNTESTED,
4865 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004866 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004867 .block_erasers =
4868 {
4869 {
4870 .eraseblocks = {
4871 {64 * 1024, 7},
4872 {32 * 1024, 1},
4873 {8 * 1024, 2},
4874 {16 * 1024, 1},
4875 },
4876 .block_erase = block_erase_m29f400bt,
4877 }, {
4878 .eraseblocks = { {512 * 1024, 1} },
4879 .block_erase = block_erase_chip_m29f400bt,
4880 }
4881 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004882 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004883 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004884 },
4885
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004886 {
4887 .vendor = "ST",
4888 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004889 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004890 .manufacture_id = ST_ID,
4891 .model_id = ST_M29W010B,
4892 .total_size = 128,
4893 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004894 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004895 .tested = TEST_UNTESTED,
4896 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004897 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004898 .block_erasers =
4899 {
4900 {
4901 .eraseblocks = { {16 * 1024, 8}, },
4902 .block_erase = erase_sector_jedec,
4903 }, {
4904 .eraseblocks = { {128 * 1024, 1} },
4905 .block_erase = erase_chip_block_jedec,
4906 }
4907 },
Sean Nelson35727f72010-01-28 23:55:12 +00004908 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004909 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004910 },
4911
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004912 {
4913 .vendor = "ST",
4914 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004915 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004916 .manufacture_id = ST_ID,
4917 .model_id = ST_M29W040B,
4918 .total_size = 512,
4919 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004920 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004921 .tested = TEST_UNTESTED,
4922 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004923 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004924 .block_erasers =
4925 {
4926 {
4927 .eraseblocks = { {64 * 1024, 8}, },
4928 .block_erase = erase_sector_jedec,
4929 }, {
4930 .eraseblocks = { {512 * 1024, 1} },
4931 .block_erase = erase_chip_block_jedec,
4932 }
4933 },
Sean Nelson35727f72010-01-28 23:55:12 +00004934 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004935 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004936 },
4937
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004938 {
4939 .vendor = "ST",
4940 .name = "M29W512B",
4941 .bustype = CHIP_BUSTYPE_PARALLEL,
4942 .manufacture_id = ST_ID,
4943 .model_id = ST_M29W512B,
4944 .total_size = 64,
4945 .page_size = 64 * 1024,
4946 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4947 .tested = TEST_OK_PREW,
4948 .probe = probe_jedec,
4949 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004950 .block_erasers =
4951 {
4952 {
4953 .eraseblocks = { {64 * 1024, 1} },
4954 .block_erase = erase_chip_block_jedec,
4955 }
4956 },
4957 .write = write_jedec_1,
4958 .read = read_memmapped,
4959 },
4960
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004961 {
4962 .vendor = "ST",
4963 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00004964 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004965 .manufacture_id = ST_ID,
4966 .model_id = ST_M50FLW040A,
4967 .total_size = 512,
4968 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004969 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004970 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004971 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004972 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004973 .block_erasers =
4974 {
4975 {
Sean Nelson329bde72010-01-19 16:39:19 +00004976 .eraseblocks = {
4977 {4 * 1024, 16}, /* sector */
4978 {64 * 1024, 5}, /* block */
4979 {4 * 1024, 16}, /* sector */
4980 {4 * 1024, 16}, /* sector */
4981 },
4982 .block_erase = NULL,
4983 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004984 .eraseblocks = { {64 * 1024, 8}, },
4985 .block_erase = erase_block_stm50flw0x0x,
4986 }, {
4987 .eraseblocks = { {512 * 1024, 1} },
4988 .block_erase = erase_chip_stm50flw0x0x,
4989 }
4990 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004991 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004992 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004993 },
4994
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004995 {
4996 .vendor = "ST",
4997 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00004998 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004999 .manufacture_id = ST_ID,
5000 .model_id = ST_M50FLW040B,
5001 .total_size = 512,
5002 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005003 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005004 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005005 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005006 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005007 .block_erasers =
5008 {
5009 {
Sean Nelson329bde72010-01-19 16:39:19 +00005010 .eraseblocks = {
5011 {4 * 1024, 16}, /* sector */
5012 {4 * 1024, 16}, /* sector */
5013 {64 * 1024, 5}, /* block */
5014 {4 * 1024, 16}, /* sector */
5015 },
5016 .block_erase = NULL,
5017 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005018 .eraseblocks = { {64 * 1024, 8}, },
5019 .block_erase = erase_block_stm50flw0x0x,
5020 }, {
5021 .eraseblocks = { {512 * 1024, 1} },
5022 .block_erase = erase_chip_stm50flw0x0x,
5023 }
5024 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005025 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005026 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005027 },
5028
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005029 {
5030 .vendor = "ST",
5031 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005032 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005033 .manufacture_id = ST_ID,
5034 .model_id = ST_M50FLW080A,
5035 .total_size = 1024,
5036 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005037 .feature_bits = 0,
5038 .tested = TEST_UNTESTED,
5039 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005040 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005041 .block_erasers =
5042 {
5043 {
Sean Nelson329bde72010-01-19 16:39:19 +00005044 .eraseblocks = {
5045 {4 * 1024, 16}, /* sector */
5046 {64 * 1024, 13}, /* block */
5047 {4 * 1024, 16}, /* sector */
5048 {4 * 1024, 16}, /* sector */
5049 },
5050 .block_erase = NULL,
5051 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005052 .eraseblocks = { {64 * 1024, 16}, },
5053 .block_erase = erase_block_stm50flw0x0x,
5054 }, {
5055 .eraseblocks = { {1024 * 1024, 1} },
5056 .block_erase = erase_chip_stm50flw0x0x,
5057 }
5058 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005059 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005060 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005061 },
5062
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005063 {
5064 .vendor = "ST",
5065 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005066 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005067 .manufacture_id = ST_ID,
5068 .model_id = ST_M50FLW080B,
5069 .total_size = 1024,
5070 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005071 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005072 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005073 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005074 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005075 .block_erasers =
5076 {
5077 {
Sean Nelson329bde72010-01-19 16:39:19 +00005078 .eraseblocks = {
5079 {4 * 1024, 16}, /* sector */
5080 {4 * 1024, 16}, /* sector */
5081 {64 * 1024, 13}, /* block */
5082 {4 * 1024, 16}, /* sector */
5083 },
5084 .block_erase = NULL,
5085 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005086 .eraseblocks = { {64 * 1024, 16}, },
5087 .block_erase = erase_block_stm50flw0x0x,
5088 }, {
5089 .eraseblocks = { {1024 * 1024, 1} },
5090 .block_erase = erase_chip_stm50flw0x0x,
5091 }
5092 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005093 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005094 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005095 },
5096
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005097 {
5098 .vendor = "ST",
5099 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005100 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005101 .manufacture_id = ST_ID,
5102 .model_id = ST_M50FW002,
5103 .total_size = 256,
5104 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005105 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005106 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005107 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005108 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005109 .block_erasers =
5110 {
5111 {
5112 .eraseblocks = {
5113 {64 * 1024, 3},
5114 {32 * 1024, 1},
5115 {8 * 1024, 2},
5116 {16 * 1024, 1},
5117 },
5118 .block_erase = erase_block_stm50flw0x0x,
5119 }, {
5120 .eraseblocks = { {256 * 1024, 1} },
5121 .block_erase = erase_chip_stm50flw0x0x,
5122 }
5123 },
Sean Nelson35727f72010-01-28 23:55:12 +00005124 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005125 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005126 },
5127
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005128 {
5129 .vendor = "ST",
5130 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005131 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005132 .manufacture_id = ST_ID,
5133 .model_id = ST_M50FW016,
5134 .total_size = 2048,
5135 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005136 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005137 .tested = TEST_UNTESTED,
5138 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005139 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005140 .block_erasers =
5141 {
5142 {
5143 .eraseblocks = { {64 * 1024, 32}, },
5144 .block_erase = erase_block_stm50flw0x0x,
5145 }, {
5146 .eraseblocks = { {2 * 1024 * 1024, 1} },
5147 .block_erase = erase_chip_stm50flw0x0x,
5148 }
5149 },
5150 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005151 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005152 },
5153
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005154 {
5155 .vendor = "ST",
5156 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005157 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005158 .manufacture_id = ST_ID,
5159 .model_id = ST_M50FW040,
5160 .total_size = 512,
5161 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005162 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005163 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005164 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005165 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005166 .block_erasers =
5167 {
5168 {
5169 .eraseblocks = { {64 * 1024, 8}, },
5170 .block_erase = erase_block_stm50flw0x0x,
5171 }, {
5172 .eraseblocks = { {512 * 1024, 1} },
5173 .block_erase = erase_chip_stm50flw0x0x,
5174 }
5175 },
5176 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005177 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005178 },
5179
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005180 {
5181 .vendor = "ST",
5182 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005183 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005184 .manufacture_id = ST_ID,
5185 .model_id = ST_M50FW080,
5186 .total_size = 1024,
5187 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005188 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005189 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005190 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005191 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005192 .block_erasers =
5193 {
5194 {
5195 .eraseblocks = { {64 * 1024, 16}, },
5196 .block_erase = erase_block_stm50flw0x0x,
5197 }, {
5198 .eraseblocks = { {1024 * 1024, 1} },
5199 .block_erase = erase_chip_stm50flw0x0x,
5200 }
5201 },
5202 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005203 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005204 },
5205
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005206 {
5207 .vendor = "ST",
5208 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005209 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005210 .manufacture_id = ST_ID,
5211 .model_id = ST_M50LPW116,
5212 .total_size = 2048,
5213 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005214 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005215 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005216 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005217 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005218 .block_erasers =
5219 {
5220 {
5221 .eraseblocks = {
5222 {4 * 1024, 16},
5223 {64 * 1024, 30},
5224 {32 * 1024, 1},
5225 {8 * 1024, 2},
5226 {16 * 1024, 1},
5227 },
5228 .block_erase = erase_block_stm50flw0x0x,
5229 }, {
5230 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005231 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005232 }
5233 },
Sean Nelson35727f72010-01-28 23:55:12 +00005234 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005235 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005236 },
5237
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005238 {
5239 .vendor = "SyncMOS",
5240 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005241 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005242 .manufacture_id = SYNCMOS_ID,
5243 .model_id = S29C31004T,
5244 .total_size = 512,
5245 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005246 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005247 .tested = TEST_UNTESTED,
5248 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005249 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005250 .block_erasers =
5251 {
5252 {
5253 .eraseblocks = { {1 * 1024, 512} },
5254 .block_erase = erase_sector_jedec,
5255 }, {
5256 .eraseblocks = { {512 * 1024, 1} },
5257 .block_erase = erase_chip_block_jedec,
5258 },
5259 },
Sean Nelson35727f72010-01-28 23:55:12 +00005260 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005261 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005262 },
5263
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005264 {
5265 .vendor = "SyncMOS",
5266 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005267 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005268 .manufacture_id = SYNCMOS_ID,
5269 .model_id = S29C51001T,
5270 .total_size = 128,
5271 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005272 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005273 .tested = TEST_UNTESTED,
5274 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005275 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005276 .block_erasers =
5277 {
5278 {
5279 .eraseblocks = { {512, 256} },
5280 .block_erase = erase_sector_jedec,
5281 }, {
5282 .eraseblocks = { {128 * 1024, 1} },
5283 .block_erase = erase_chip_block_jedec,
5284 },
5285 },
Sean Nelson35727f72010-01-28 23:55:12 +00005286 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005287 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005288 },
5289
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005290 {
5291 .vendor = "SyncMOS",
5292 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005293 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005294 .manufacture_id = SYNCMOS_ID,
5295 .model_id = S29C51002T,
5296 .total_size = 256,
5297 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005298 .feature_bits = FEATURE_EITHER_RESET,
5299 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005300 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005301 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005302 .block_erasers =
5303 {
5304 {
5305 .eraseblocks = { {512, 512} },
5306 .block_erase = erase_sector_jedec,
5307 }, {
5308 .eraseblocks = { {256 * 1024, 1} },
5309 .block_erase = erase_chip_block_jedec,
5310 },
5311 },
Sean Nelson35727f72010-01-28 23:55:12 +00005312 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005313 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005314 },
5315
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005316 {
5317 .vendor = "SyncMOS",
5318 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005319 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005320 .manufacture_id = SYNCMOS_ID,
5321 .model_id = S29C51004T,
5322 .total_size = 512,
5323 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005324 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005325 .tested = TEST_UNTESTED,
5326 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005327 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005328 .block_erasers =
5329 {
5330 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005331 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005332 .block_erase = erase_sector_jedec,
5333 }, {
5334 .eraseblocks = { {512 * 1024, 1} },
5335 .block_erase = erase_chip_block_jedec,
5336 },
5337 },
Sean Nelson35727f72010-01-28 23:55:12 +00005338 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005339 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005340 },
5341
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005342 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005343 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005344 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005345 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005346 .manufacture_id = TI_OLD_ID,
5347 .model_id = TI_TMS29F002RB,
5348 .total_size = 256,
5349 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005350 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005351 .tested = TEST_UNTESTED,
5352 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005353 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005354 .block_erasers =
5355 {
5356 {
5357 .eraseblocks = {
5358 {16 * 1024, 1},
5359 {8 * 1024, 2},
5360 {32 * 1024, 1},
5361 {64 * 1024, 3},
5362 },
5363 .block_erase = erase_sector_jedec,
5364 }, {
5365 .eraseblocks = { {256 * 1024, 1} },
5366 .block_erase = erase_chip_block_jedec,
5367 },
5368 },
Sean Nelson35727f72010-01-28 23:55:12 +00005369 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005370 .read = read_memmapped,
5371 },
5372
5373 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005374 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005375 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005376 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005377 .manufacture_id = TI_OLD_ID,
5378 .model_id = TI_TMS29F002RT,
5379 .total_size = 256,
5380 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005381 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005382 .tested = TEST_UNTESTED,
5383 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005384 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005385 .block_erasers =
5386 {
5387 {
5388 .eraseblocks = {
5389 {64 * 1024, 3},
5390 {32 * 1024, 1},
5391 {8 * 1024, 2},
5392 {16 * 1024, 1},
5393 },
5394 .block_erase = erase_sector_jedec,
5395 }, {
5396 .eraseblocks = { {256 * 1024, 1} },
5397 .block_erase = erase_chip_block_jedec,
5398 },
5399 },
Sean Nelson35727f72010-01-28 23:55:12 +00005400 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005401 .read = read_memmapped,
5402 },
5403
5404 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005405 .vendor = "Winbond",
5406 .name = "W25x10",
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_25X10,
5410 .total_size = 128,
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, 32} },
5419 .block_erase = spi_block_erase_20,
5420 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005421 .eraseblocks = { {64 * 1024, 2} },
5422 .block_erase = spi_block_erase_d8,
5423 }, {
5424 .eraseblocks = { {128 * 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 = "W25x20",
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_25X20,
5438 .total_size = 256,
5439 .page_size = 256,
5440 .tested = TEST_UNTESTED,
5441 .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, 64} },
5447 .block_erase = spi_block_erase_20,
5448 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005449 .eraseblocks = { {64 * 1024, 4} },
5450 .block_erase = spi_block_erase_d8,
5451 }, {
5452 .eraseblocks = { {256 * 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 = "W25x40",
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_25X40,
5466 .total_size = 512,
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, 128} },
5475 .block_erase = spi_block_erase_20,
5476 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005477 .eraseblocks = { {64 * 1024, 8} },
5478 .block_erase = spi_block_erase_d8,
5479 }, {
5480 .eraseblocks = { {512 * 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",
5490 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005491 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005492 .manufacture_id = WINBOND_NEX_ID,
5493 .model_id = W_25X80,
5494 .total_size = 1024,
5495 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005496 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005497 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005498 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005499 .block_erasers =
5500 {
5501 {
5502 .eraseblocks = { {4 * 1024, 256} },
5503 .block_erase = spi_block_erase_20,
5504 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005505 .eraseblocks = { {64 * 1024, 16} },
5506 .block_erase = spi_block_erase_d8,
5507 }, {
5508 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005509 .block_erase = spi_block_erase_c7,
5510 }
5511 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005512 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005513 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005514 },
5515
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005516 {
5517 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005518 .name = "W25x16",
5519 .bustype = CHIP_BUSTYPE_SPI,
5520 .manufacture_id = WINBOND_NEX_ID,
5521 .model_id = W_25X16,
5522 .total_size = 2048,
5523 .page_size = 256,
5524 .tested = TEST_OK_PR,
5525 .probe = probe_spi_rdid,
5526 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005527 .block_erasers =
5528 {
5529 {
5530 .eraseblocks = { {4 * 1024, 512} },
5531 .block_erase = spi_block_erase_20,
5532 }, {
5533 .eraseblocks = { {32 * 1024, 64} },
5534 .block_erase = spi_block_erase_52,
5535 }, {
5536 .eraseblocks = { {64 * 1024, 32} },
5537 .block_erase = spi_block_erase_d8,
5538 }, {
5539 .eraseblocks = { {2 * 1024 * 1024, 1} },
5540 .block_erase = spi_block_erase_60,
5541 }, {
5542 .eraseblocks = { {2 * 1024 * 1024, 1} },
5543 .block_erase = spi_block_erase_c7,
5544 }
5545 },
Hector Martina721ae22009-07-11 19:39:11 +00005546 .write = spi_chip_write_256,
5547 .read = spi_chip_read,
5548 },
5549
5550 {
5551 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005552 .name = "W25x32",
5553 .bustype = CHIP_BUSTYPE_SPI,
5554 .manufacture_id = WINBOND_NEX_ID,
5555 .model_id = W_25X32,
5556 .total_size = 4096,
5557 .page_size = 256,
5558 .tested = TEST_OK_PROBE,
5559 .probe = probe_spi_rdid,
5560 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005561 .block_erasers =
5562 {
5563 {
5564 .eraseblocks = { {4 * 1024, 1024} },
5565 .block_erase = spi_block_erase_20,
5566 }, {
5567 .eraseblocks = { {32 * 1024, 128} },
5568 .block_erase = spi_block_erase_52,
5569 }, {
5570 .eraseblocks = { {64 * 1024, 64} },
5571 .block_erase = spi_block_erase_d8,
5572 }, {
5573 .eraseblocks = { {4 * 1024 * 1024, 1} },
5574 .block_erase = spi_block_erase_60,
5575 }, {
5576 .eraseblocks = { {4 * 1024 * 1024, 1} },
5577 .block_erase = spi_block_erase_c7,
5578 }
5579 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005580 .write = spi_chip_write_256,
5581 .read = spi_chip_read,
5582 },
5583
5584 {
5585 .vendor = "Winbond",
5586 .name = "W25x64",
5587 .bustype = CHIP_BUSTYPE_SPI,
5588 .manufacture_id = WINBOND_NEX_ID,
5589 .model_id = W_25X64,
5590 .total_size = 8192,
5591 .page_size = 256,
5592 .tested = TEST_UNTESTED,
5593 .probe = probe_spi_rdid,
5594 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005595 .block_erasers =
5596 {
5597 {
5598 .eraseblocks = { {4 * 1024, 2048} },
5599 .block_erase = spi_block_erase_20,
5600 }, {
5601 .eraseblocks = { {32 * 1024, 256} },
5602 .block_erase = spi_block_erase_52,
5603 }, {
5604 .eraseblocks = { {64 * 1024, 128} },
5605 .block_erase = spi_block_erase_d8,
5606 }, {
5607 .eraseblocks = { {8 * 1024 * 1024, 1} },
5608 .block_erase = spi_block_erase_60,
5609 }, {
5610 .eraseblocks = { {8 * 1024 * 1024, 1} },
5611 .block_erase = spi_block_erase_c7,
5612 }
5613 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005614 .write = spi_chip_write_256,
5615 .read = spi_chip_read,
5616 },
5617
5618 {
5619 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005620 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005621 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005622 .manufacture_id = WINBOND_ID,
5623 .model_id = W_29C011,
5624 .total_size = 128,
5625 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005626 .feature_bits = FEATURE_LONG_RESET,
5627 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005628 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005629 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005630 .block_erasers =
5631 {
5632 {
5633 .eraseblocks = { {128 * 1024, 1} },
5634 .block_erase = erase_chip_block_jedec,
5635 }
5636 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005637 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005638 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005639 },
5640
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005641 {
5642 .vendor = "Winbond",
5643 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005644 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005645 .manufacture_id = WINBOND_ID,
5646 .model_id = W_29C020C,
5647 .total_size = 256,
5648 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005649 .feature_bits = FEATURE_LONG_RESET,
5650 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005651 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005652 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005653 .block_erasers =
5654 {
5655 {
5656 .eraseblocks = { {256 * 1024, 1} },
5657 .block_erase = erase_chip_block_jedec,
5658 }
5659 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005660 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005661 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005662 },
5663
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005664 {
5665 .vendor = "Winbond",
5666 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005667 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005668 .manufacture_id = WINBOND_ID,
5669 .model_id = W_29C040P,
5670 .total_size = 512,
5671 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005672 .feature_bits = FEATURE_LONG_RESET,
5673 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005674 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005675 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005676 .block_erasers =
5677 {
5678 {
5679 .eraseblocks = { {512 * 1024, 1} },
5680 .block_erase = erase_chip_block_jedec,
5681 }
5682 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005683 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005684 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005685 },
5686
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005687 {
5688 .vendor = "Winbond",
5689 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005690 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005691 .manufacture_id = WINBOND_ID,
5692 .model_id = W_29C011,
5693 .total_size = 128,
5694 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005695 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005696 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005697 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005698 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005699 .block_erasers =
5700 {
5701 {
5702 .eraseblocks = { {128 * 1024, 1} },
5703 .block_erase = erase_chip_block_jedec,
5704 }
5705 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005706 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005707 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005708 },
5709
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005710 {
5711 .vendor = "Winbond",
5712 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005713 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005714 .manufacture_id = WINBOND_ID,
5715 .model_id = W_39V040A,
5716 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005717 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005718 .feature_bits = FEATURE_EITHER_RESET,
5719 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005720 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005721 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005722 .block_erasers =
5723 {
5724 {
5725 .eraseblocks = { {64 * 1024, 8} },
5726 .block_erase = erase_sector_jedec,
5727 }, {
5728 .eraseblocks = { {512 * 1024, 1} },
5729 .block_erase = erase_chip_block_jedec,
5730 }
5731 },
Sean Nelson35727f72010-01-28 23:55:12 +00005732 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005733 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005734 },
5735
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005736 {
5737 .vendor = "Winbond",
5738 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005739 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005740 .manufacture_id = WINBOND_ID,
5741 .model_id = W_39V040B,
5742 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005743 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005744 .feature_bits = FEATURE_EITHER_RESET,
5745 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005746 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005747 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005748 .block_erasers =
5749 {
5750 {
5751 .eraseblocks = { {64 * 1024, 8} },
5752 .block_erase = erase_sector_jedec,
5753 }, {
5754 .eraseblocks = { {512 * 1024, 1} },
5755 .block_erase = erase_chip_block_jedec,
5756 }
5757 },
Sean Nelson35727f72010-01-28 23:55:12 +00005758 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005759 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005760 },
5761
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005762 {
5763 .vendor = "Winbond",
5764 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005765 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005766 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005767 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005768 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005769 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005770 .feature_bits = FEATURE_EITHER_RESET,
5771 .tested = TEST_UNTESTED,
5772 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005773 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005774 .block_erasers =
5775 {
5776 {
5777 .eraseblocks = { {64 * 1024, 8} },
5778 .block_erase = erase_sector_jedec,
5779 }, {
5780 .eraseblocks = { {512 * 1024, 1} },
5781 .block_erase = erase_chip_block_jedec,
5782 }
5783 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005784 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00005785 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005786 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005787 },
5788
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005789 {
5790 .vendor = "Winbond",
5791 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005792 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005793 .manufacture_id = WINBOND_ID,
5794 .model_id = W_39V040FA,
5795 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005796 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005797 .feature_bits = FEATURE_EITHER_RESET,
5798 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005799 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005800 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005801 .block_erasers =
5802 {
5803 {
5804 .eraseblocks = { {4 * 1024, 128} },
5805 .block_erase = erase_block_jedec,
5806 }, {
5807 .eraseblocks = { {64 * 1024, 8} },
5808 .block_erase = erase_sector_jedec,
5809 }, {
5810 .eraseblocks = { {512 * 1024, 1} },
5811 .block_erase = erase_chip_block_jedec,
5812 }
5813 },
Sean Nelson35727f72010-01-28 23:55:12 +00005814 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005815 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005816 },
5817
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005818 {
5819 .vendor = "Winbond",
5820 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005821 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005822 .manufacture_id = WINBOND_ID,
5823 .model_id = W_39V080A,
5824 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005825 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005826 .feature_bits = FEATURE_EITHER_RESET,
5827 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005828 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005829 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005830 .block_erasers =
5831 {
5832 {
5833 .eraseblocks = { {64 * 1024, 16} },
5834 .block_erase = erase_sector_jedec,
5835 }, {
5836 .eraseblocks = { {1024 * 1024, 1} },
5837 .block_erase = erase_chip_block_jedec,
5838 }
5839 },
Sean Nelson35727f72010-01-28 23:55:12 +00005840 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005841 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005842 },
5843
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005844 {
5845 .vendor = "Winbond",
5846 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00005847 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005848 .manufacture_id = WINBOND_ID,
5849 .model_id = W_49F002U,
5850 .total_size = 256,
5851 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005852 .feature_bits = FEATURE_EITHER_RESET,
5853 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005854 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005855 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005856 .block_erasers =
5857 {
5858 {
5859 .eraseblocks = {
5860 {128 * 1024, 1},
5861 {96 * 1024, 1},
5862 {8 * 1024, 2},
5863 {16 * 1024, 1},
5864 },
5865 .block_erase = erase_sector_jedec,
5866 }, {
5867 .eraseblocks = { {256 * 1024, 1} },
5868 .block_erase = erase_chip_block_jedec,
5869 }
5870 },
Sean Nelson35727f72010-01-28 23:55:12 +00005871 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005872 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005873 },
5874
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005875 {
5876 .vendor = "Winbond",
5877 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005878 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005879 .manufacture_id = WINBOND_ID,
5880 .model_id = W_49V002A,
5881 .total_size = 256,
5882 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005883 .feature_bits = FEATURE_EITHER_RESET,
5884 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005885 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005886 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005887 .block_erasers =
5888 {
5889 {
5890 .eraseblocks = {
5891 {64 * 1024, 3},
5892 {32 * 1024, 1},
5893 {8 * 1024, 2},
5894 {16 * 1024, 1},
5895 },
5896 .block_erase = erase_sector_jedec,
5897 }, {
5898 .eraseblocks = { {256 * 1024, 1} },
5899 .block_erase = erase_chip_block_jedec,
5900 }
5901 },
Sean Nelson35727f72010-01-28 23:55:12 +00005902 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005903 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005904 },
5905
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005906 {
5907 .vendor = "Winbond",
5908 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005909 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005910 .manufacture_id = WINBOND_ID,
5911 .model_id = W_49V002FA,
5912 .total_size = 256,
5913 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005914 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005915 .tested = TEST_UNTESTED,
5916 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005917 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005918 .block_erasers =
5919 {
5920 {
5921 .eraseblocks = {
5922 {64 * 1024, 3},
5923 {32 * 1024, 1},
5924 {8 * 1024, 2},
5925 {16 * 1024, 1},
5926 },
5927 .block_erase = erase_sector_jedec,
5928 }, {
5929 .eraseblocks = { {256 * 1024, 1} },
5930 .block_erase = erase_chip_block_jedec,
5931 }
5932 },
Sean Nelson35727f72010-01-28 23:55:12 +00005933 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005934 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005935 },
5936
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005937 {
5938 .vendor = "Winbond",
5939 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005940 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005941 .manufacture_id = WINBOND_ID,
5942 .model_id = W_39V080FA,
5943 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005944 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005945 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
5946 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005947 .probe = probe_jedec,
5948 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005949 .block_erasers =
5950 {
5951 {
5952 .eraseblocks = { {64 * 1024, 16}, },
5953 .block_erase = erase_sector_jedec,
5954 }, {
5955 .eraseblocks = { {1024 * 1024, 1} },
5956 .block_erase = erase_chip_block_jedec,
5957 }
5958 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005959 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00005960 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005961 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005962 },
5963
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005964 {
5965 .vendor = "Winbond",
5966 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005967 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005968 .manufacture_id = WINBOND_ID,
5969 .model_id = W_39V080FA_DM,
5970 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005971 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005972 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005973 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005974 .probe = probe_jedec,
5975 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005976 .block_erasers =
5977 {
5978 {
5979 .eraseblocks = { {64 * 1024, 8}, },
5980 .block_erase = erase_sector_jedec,
5981 }, {
5982 .eraseblocks = { {512 * 1024, 1} },
5983 .block_erase = erase_chip_block_jedec,
5984 }
5985 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005986 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00005987 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005988 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005989 },
5990
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005991 {
5992 .vendor = "Atmel",
5993 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005994 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005995 .manufacture_id = ATMEL_ID,
5996 .model_id = GENERIC_DEVICE_ID,
5997 .total_size = 0,
5998 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005999 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006000 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006001 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006002 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006003 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006004 },
6005
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006006 {
6007 .vendor = "EON",
6008 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006009 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006010 .manufacture_id = EON_ID_NOPREFIX,
6011 .model_id = GENERIC_DEVICE_ID,
6012 .total_size = 0,
6013 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006014 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006015 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006016 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006017 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006018 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006019 },
6020
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006021 {
6022 .vendor = "Macronix",
6023 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006024 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006025 .manufacture_id = MX_ID,
6026 .model_id = GENERIC_DEVICE_ID,
6027 .total_size = 0,
6028 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006029 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006030 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006031 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006032 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006033 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006034 },
6035
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006036 {
6037 .vendor = "PMC",
6038 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006039 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006040 .manufacture_id = PMC_ID,
6041 .model_id = GENERIC_DEVICE_ID,
6042 .total_size = 0,
6043 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006044 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006045 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006046 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006047 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006048 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006049 },
6050
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006051 {
6052 .vendor = "SST",
6053 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006054 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006055 .manufacture_id = SST_ID,
6056 .model_id = GENERIC_DEVICE_ID,
6057 .total_size = 0,
6058 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006059 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006060 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006061 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006062 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006063 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006064 },
6065
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006066 {
6067 .vendor = "ST",
6068 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006069 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006070 .manufacture_id = ST_ID,
6071 .model_id = GENERIC_DEVICE_ID,
6072 .total_size = 0,
6073 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006074 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006075 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006076 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006077 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006078 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006079 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006080
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006081 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006082 .vendor = "Sanyo",
6083 .name = "unknown Sanyo SPI chip",
6084 .bustype = CHIP_BUSTYPE_SPI,
6085 .manufacture_id = SANYO_ID,
6086 .model_id = GENERIC_DEVICE_ID,
6087 .total_size = 0,
6088 .page_size = 256,
6089 .tested = TEST_BAD_PREW,
6090 .probe = probe_spi_rdid,
6091 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006092 .write = NULL,
6093 .read = NULL,
6094 },
6095
6096 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006097 .vendor = "Generic",
6098 .name = "unknown SPI chip (RDID)",
6099 .bustype = CHIP_BUSTYPE_SPI,
6100 .manufacture_id = GENERIC_MANUF_ID,
6101 .model_id = GENERIC_DEVICE_ID,
6102 .total_size = 0,
6103 .page_size = 256,
6104 .tested = TEST_BAD_PREW,
6105 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006106 .write = NULL,
6107 },
6108 {
6109 .vendor = "Generic",
6110 .name = "unknown SPI chip (REMS)",
6111 .bustype = CHIP_BUSTYPE_SPI,
6112 .manufacture_id = GENERIC_MANUF_ID,
6113 .model_id = GENERIC_DEVICE_ID,
6114 .total_size = 0,
6115 .page_size = 256,
6116 .tested = TEST_BAD_PREW,
6117 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006118 .write = NULL,
6119 },
6120
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006121 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006122};