blob: a82c3732b531d6d65f372ba311373c12eff39945 [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,
Michael Karcher98eff462010-03-24 22:55:56 +0000855 .tested = TEST_OK_PREW,
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",
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00001075 .name = "AT49F020",
1076 .bustype = CHIP_BUSTYPE_PARALLEL,
1077 .manufacture_id = ATMEL_ID,
1078 .model_id = AT_49F020,
1079 .total_size = 256,
1080 .page_size = 256,
1081 .feature_bits = FEATURE_EITHER_RESET,
1082 .tested = TEST_OK_PREW,
1083 .probe = probe_jedec,
1084 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
1085 .block_erasers =
1086 {
1087 {
1088 .eraseblocks = { {256 * 1024, 1} },
1089 .block_erase = erase_chip_block_jedec,
1090 }
1091 },
1092 .write = write_jedec_1,
1093 .read = read_memmapped,
1094 },
1095
1096 {
1097 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001098 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001099 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001100 .manufacture_id = ATMEL_ID,
1101 .model_id = AT_49F002N,
1102 .total_size = 256,
1103 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001104 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001105 .tested = TEST_UNTESTED,
1106 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001107 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001108 .block_erasers =
1109 {
1110 {
1111 .eraseblocks = {
1112 {16 * 1024, 1},
1113 {8 * 1024, 2},
1114 {96 * 1024, 1},
1115 {128 * 1024, 1},
1116 },
1117 .block_erase = erase_sector_jedec,
1118 }, {
1119 .eraseblocks = { {256 * 1024, 1} },
1120 .block_erase = erase_chip_block_jedec,
1121 }
1122 },
Sean Nelson35727f72010-01-28 23:55:12 +00001123 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001124 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001125 },
1126
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001127 {
1128 .vendor = "Atmel",
1129 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001130 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001131 .manufacture_id = ATMEL_ID,
1132 .model_id = AT_49F002NT,
1133 .total_size = 256,
1134 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001135 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001136 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001137 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001138 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001139 .block_erasers =
1140 {
1141 {
1142 .eraseblocks = {
1143 {128 * 1024, 1},
1144 {96 * 1024, 1},
1145 {8 * 1024, 2},
1146 {16 * 1024, 1},
1147 },
1148 .block_erase = erase_sector_jedec,
1149 }, {
1150 .eraseblocks = { {256 * 1024, 1} },
1151 .block_erase = erase_chip_block_jedec,
1152 }
1153 },
Sean Nelson35727f72010-01-28 23:55:12 +00001154 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001155 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001156 },
1157
Sean Nelson54596372010-01-09 05:30:14 +00001158 /* The next two chip definitions have top/bottom boot blocks, but has no
Uwe Hermann4e3d0b32010-03-25 23:18:41 +00001159 device differentiation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001160 {
1161 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001162 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001163 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001164 .manufacture_id = AMIC_ID,
1165 .model_id = AMIC_A25L40P,
1166 .total_size = 512,
1167 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001168 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001169 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001170 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001171 .block_erasers =
1172 {
1173 {
1174 .eraseblocks = {
1175 {64 * 1024, 7},
1176 {32 * 1024, 1},
1177 {16 * 1024, 1},
1178 {8 * 1024, 1},
1179 {4 * 1024, 2},
1180 },
1181 .block_erase = spi_block_erase_d8,
1182 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001183 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001184 .block_erase = spi_block_erase_c7,
1185 }
1186 },
1187 .write = spi_chip_write_256,
1188 .read = spi_chip_read,
1189 },
1190
1191 {
1192 .vendor = "AMIC",
1193 .name = "A25L40PU",
1194 .bustype = CHIP_BUSTYPE_SPI,
1195 .manufacture_id = AMIC_ID,
1196 .model_id = AMIC_A25L40P,
1197 .total_size = 512,
1198 .page_size = 256,
1199 .tested = TEST_OK_PRW,
1200 .probe = probe_spi_rdid4,
1201 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001202 .block_erasers =
1203 {
1204 {
1205 .eraseblocks = {
1206 {4 * 1024, 2},
1207 {8 * 1024, 1},
1208 {16 * 1024, 1},
1209 {32 * 1024, 1},
1210 {64 * 1024, 7},
1211 },
1212 .block_erase = spi_block_erase_d8,
1213 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001214 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001215 .block_erase = spi_block_erase_c7,
1216 }
1217 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001218 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001219 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001220 },
1221
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001222 {
1223 .vendor = "AMIC",
1224 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001225 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001226 .manufacture_id = AMIC_ID_NOPREFIX,
1227 .model_id = AMIC_A29002B,
1228 .total_size = 256,
1229 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001230 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001231 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001232 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001233 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001234 .block_erasers =
1235 {
1236 {
1237 .eraseblocks = {
1238 {16 * 1024, 1},
1239 {8 * 1024, 2},
1240 {32 * 1024, 1},
1241 {64 * 1024, 3},
1242 },
Sean Nelson35727f72010-01-28 23:55:12 +00001243 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001244 }, {
1245 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001246 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001247 },
1248 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001249 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001250 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001251 },
1252
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001253 {
1254 .vendor = "AMIC",
1255 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001256 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001257 .manufacture_id = AMIC_ID_NOPREFIX,
1258 .model_id = AMIC_A29002T,
1259 .total_size = 256,
1260 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001261 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001262 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00001263 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001264 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001265 .block_erasers =
1266 {
1267 {
1268 .eraseblocks = {
1269 {64 * 1024, 3},
1270 {32 * 1024, 1},
1271 {8 * 1024, 2},
1272 {16 * 1024, 1},
1273 },
Sean Nelson35727f72010-01-28 23:55:12 +00001274 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001275 }, {
1276 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001277 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001278 },
1279 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001280 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001281 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001282 },
1283
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001284 {
1285 .vendor = "AMIC",
1286 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001287 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001288 .manufacture_id = AMIC_ID_NOPREFIX,
1289 .model_id = AMIC_A29040B,
1290 .total_size = 512,
1291 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001292 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1293 .tested = TEST_UNTESTED,
1294 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001295 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001296 .block_erasers =
1297 {
1298 {
1299 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001300 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001301 }, {
1302 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001303 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001304 },
1305 },
Sean Nelson35727f72010-01-28 23:55:12 +00001306 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001307 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001308 },
1309
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001310 {
1311 .vendor = "AMIC",
1312 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001313 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001314 .manufacture_id = AMIC_ID_NOPREFIX,
1315 .model_id = AMIC_A49LF040A,
1316 .total_size = 512,
1317 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001318 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00001319 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001320 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001321 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001322 .block_erasers =
1323 {
1324 {
1325 .eraseblocks = { {64 * 1024, 8} },
1326 .block_erase = erase_block_jedec,
1327 }, {
1328 .eraseblocks = { {512 * 1024, 1} },
1329 .block_erase = erase_chip_block_jedec,
1330 }
1331 },
Sean Nelson36172342010-02-27 18:01:15 +00001332 .unlock = unlock_49fl00x,
1333 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001334 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001335 },
1336
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001337 {
1338 .vendor = "EMST",
1339 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001340 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001341 .manufacture_id = EMST_ID,
1342 .model_id = EMST_F49B002UA,
1343 .total_size = 256,
1344 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001345 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001346 .tested = TEST_UNTESTED,
1347 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001348 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001349 .block_erasers =
1350 {
1351 {
1352 .eraseblocks = {
1353 {128 * 1024, 1},
1354 {96 * 1024, 1},
1355 {8 * 1024, 2},
1356 {16 * 1024, 1},
1357 },
1358 .block_erase = erase_sector_jedec,
1359 }, {
1360 .eraseblocks = { {256 * 1024, 1} },
1361 .block_erase = erase_chip_block_jedec,
1362 }
1363 },
Sean Nelson35727f72010-01-28 23:55:12 +00001364 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001365 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001366 },
1367
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001368 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001369 .vendor = "Eon",
1370 .name = "EN25B05",
1371 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001372 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001373 .model_id = EN_25B05,
1374 .total_size = 64,
1375 .page_size = 256,
1376 .tested = TEST_UNTESTED,
1377 .probe = probe_spi_rdid,
1378 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001379 .block_erasers =
1380 {
1381 {
1382 .eraseblocks = {
1383 {4 * 1024, 2},
1384 {8 * 1024, 1},
1385 {16 * 1024, 1},
1386 {32 * 1024, 1},
1387 },
1388 .block_erase = spi_block_erase_d8,
1389 }, {
1390 .eraseblocks = { {64 * 1024, 1} },
1391 .block_erase = spi_block_erase_c7,
1392 }
1393 },
1394 .write = spi_chip_write_256,
1395 .read = spi_chip_read,
1396 },
1397
1398 {
1399 .vendor = "Eon",
1400 .name = "EN25B05T",
1401 .bustype = CHIP_BUSTYPE_SPI,
1402 .manufacture_id = EON_ID_NOPREFIX,
1403 .model_id = EN_25B05,
1404 .total_size = 64,
1405 .page_size = 256,
1406 .tested = TEST_UNTESTED,
1407 .probe = probe_spi_rdid,
1408 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001409 .block_erasers =
1410 {
1411 {
1412 .eraseblocks = {
1413 {32 * 1024, 1},
1414 {16 * 1024, 1},
1415 {8 * 1024, 1},
1416 {4 * 1024, 2},
1417 },
1418 .block_erase = spi_block_erase_d8,
1419 }, {
1420 .eraseblocks = { {64 * 1024, 1} },
1421 .block_erase = spi_block_erase_c7,
1422 }
1423 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001424 .write = spi_chip_write_256,
1425 .read = spi_chip_read,
1426 },
1427
1428 {
1429 .vendor = "Eon",
1430 .name = "EN25B10",
1431 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001432 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001433 .model_id = EN_25B10,
1434 .total_size = 128,
1435 .page_size = 256,
1436 .tested = TEST_UNTESTED,
1437 .probe = probe_spi_rdid,
1438 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001439 .block_erasers =
1440 {
1441 {
1442 .eraseblocks = {
1443 {4 * 1024, 2},
1444 {8 * 1024, 1},
1445 {16 * 1024, 1},
1446 {32 * 1024, 3},
1447 },
1448 .block_erase = spi_block_erase_d8,
1449 }, {
1450 .eraseblocks = { {128 * 1024, 1} },
1451 .block_erase = spi_block_erase_c7,
1452 }
1453 },
1454 .write = spi_chip_write_256,
1455 .read = spi_chip_read,
1456 },
1457
1458 {
1459 .vendor = "Eon",
1460 .name = "EN25B10T",
1461 .bustype = CHIP_BUSTYPE_SPI,
1462 .manufacture_id = EON_ID_NOPREFIX,
1463 .model_id = EN_25B10,
1464 .total_size = 128,
1465 .page_size = 256,
1466 .tested = TEST_UNTESTED,
1467 .probe = probe_spi_rdid,
1468 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001469 .block_erasers =
1470 {
1471 {
1472 .eraseblocks = {
1473 {32 * 1024, 3},
1474 {16 * 1024, 1},
1475 {8 * 1024, 1},
1476 {4 * 1024, 2},
1477 },
1478 .block_erase = spi_block_erase_d8,
1479 }, {
1480 .eraseblocks = { {128 * 1024, 1} },
1481 .block_erase = spi_block_erase_c7,
1482 }
1483 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001484 .write = spi_chip_write_256,
1485 .read = spi_chip_read,
1486 },
1487
1488 {
1489 .vendor = "Eon",
1490 .name = "EN25B20",
1491 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001492 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001493 .model_id = EN_25B20,
1494 .total_size = 256,
1495 .page_size = 256,
1496 .tested = TEST_UNTESTED,
1497 .probe = probe_spi_rdid,
1498 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001499 .block_erasers =
1500 {
1501 {
1502 .eraseblocks = {
1503 {4 * 1024, 2},
1504 {8 * 1024, 1},
1505 {16 * 1024, 1},
1506 {32 * 1024, 1},
1507 {64 * 1024, 3}
1508 },
1509 .block_erase = spi_block_erase_d8,
1510 }, {
1511 .eraseblocks = { {256 * 1024, 1} },
1512 .block_erase = spi_block_erase_c7,
1513 }
1514 },
1515 .write = spi_chip_write_256,
1516 .read = spi_chip_read,
1517 },
1518
1519 {
1520 .vendor = "Eon",
1521 .name = "EN25B20T",
1522 .bustype = CHIP_BUSTYPE_SPI,
1523 .manufacture_id = EON_ID_NOPREFIX,
1524 .model_id = EN_25B20,
1525 .total_size = 256,
1526 .page_size = 256,
1527 .tested = TEST_UNTESTED,
1528 .probe = probe_spi_rdid,
1529 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001530 .block_erasers =
1531 {
1532 {
1533 .eraseblocks = {
1534 {64 * 1024, 3},
1535 {32 * 1024, 1},
1536 {16 * 1024, 1},
1537 {8 * 1024, 1},
1538 {4 * 1024, 2},
1539 },
1540 .block_erase = spi_block_erase_d8,
1541 }, {
1542 .eraseblocks = { {256 * 1024, 1} },
1543 .block_erase = spi_block_erase_c7,
1544 }
1545 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001546 .write = spi_chip_write_256,
1547 .read = spi_chip_read,
1548 },
1549
1550 {
1551 .vendor = "Eon",
1552 .name = "EN25B40",
1553 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001554 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001555 .model_id = EN_25B40,
1556 .total_size = 512,
1557 .page_size = 256,
1558 .tested = TEST_UNTESTED,
1559 .probe = probe_spi_rdid,
1560 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001561 .block_erasers =
1562 {
1563 {
1564 .eraseblocks = {
1565 {4 * 1024, 2},
1566 {8 * 1024, 1},
1567 {16 * 1024, 1},
1568 {32 * 1024, 1},
1569 {64 * 1024, 7}
1570 },
1571 .block_erase = spi_block_erase_d8,
1572 }, {
1573 .eraseblocks = { {512 * 1024, 1} },
1574 .block_erase = spi_block_erase_c7,
1575 }
1576 },
1577 .write = spi_chip_write_256,
1578 .read = spi_chip_read,
1579 },
1580
1581 {
1582 .vendor = "Eon",
1583 .name = "EN25B40T",
1584 .bustype = CHIP_BUSTYPE_SPI,
1585 .manufacture_id = EON_ID_NOPREFIX,
1586 .model_id = EN_25B40,
1587 .total_size = 512,
1588 .page_size = 256,
1589 .tested = TEST_UNTESTED,
1590 .probe = probe_spi_rdid,
1591 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001592 .block_erasers =
1593 {
1594 {
1595 .eraseblocks = {
1596 {64 * 1024, 7},
1597 {32 * 1024, 1},
1598 {16 * 1024, 1},
1599 {8 * 1024, 1},
1600 {4 * 1024, 2},
1601 },
1602 .block_erase = spi_block_erase_d8,
1603 }, {
1604 .eraseblocks = { {512 * 1024, 1} },
1605 .block_erase = spi_block_erase_c7,
1606 }
1607 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001608 .write = spi_chip_write_256,
1609 .read = spi_chip_read,
1610 },
1611
1612 {
1613 .vendor = "Eon",
1614 .name = "EN25B80",
1615 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001616 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001617 .model_id = EN_25B80,
1618 .total_size = 1024,
1619 .page_size = 256,
1620 .tested = TEST_UNTESTED,
1621 .probe = probe_spi_rdid,
1622 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001623 .block_erasers =
1624 {
1625 {
1626 .eraseblocks = {
1627 {4 * 1024, 2},
1628 {8 * 1024, 1},
1629 {16 * 1024, 1},
1630 {32 * 1024, 1},
1631 {64 * 1024, 15}
1632 },
1633 .block_erase = spi_block_erase_d8,
1634 }, {
1635 .eraseblocks = { {1024 * 1024, 1} },
1636 .block_erase = spi_block_erase_c7,
1637 }
1638 },
1639 .write = spi_chip_write_256,
1640 .read = spi_chip_read,
1641 },
1642
1643 {
1644 .vendor = "Eon",
1645 .name = "EN25B80T",
1646 .bustype = CHIP_BUSTYPE_SPI,
1647 .manufacture_id = EON_ID_NOPREFIX,
1648 .model_id = EN_25B80,
1649 .total_size = 1024,
1650 .page_size = 256,
1651 .tested = TEST_UNTESTED,
1652 .probe = probe_spi_rdid,
1653 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001654 .block_erasers =
1655 {
1656 {
1657 .eraseblocks = {
1658 {64 * 1024, 15},
1659 {32 * 1024, 1},
1660 {16 * 1024, 1},
1661 {8 * 1024, 1},
1662 {4 * 1024, 2},
1663 },
1664 .block_erase = spi_block_erase_d8,
1665 }, {
1666 .eraseblocks = { {1024 * 1024, 1} },
1667 .block_erase = spi_block_erase_c7,
1668 }
1669 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001670 .write = spi_chip_write_256,
1671 .read = spi_chip_read,
1672 },
1673
1674 {
1675 .vendor = "Eon",
1676 .name = "EN25B16",
1677 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001678 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001679 .model_id = EN_25B16,
1680 .total_size = 2048,
1681 .page_size = 256,
1682 .tested = TEST_UNTESTED,
1683 .probe = probe_spi_rdid,
1684 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001685 .block_erasers =
1686 {
1687 {
1688 .eraseblocks = {
1689 {4 * 1024, 2},
1690 {8 * 1024, 1},
1691 {16 * 1024, 1},
1692 {32 * 1024, 1},
1693 {64 * 1024, 31},
1694 },
1695 .block_erase = spi_block_erase_d8,
1696 }, {
1697 .eraseblocks = { {2 * 1024 * 1024, 1} },
1698 .block_erase = spi_block_erase_c7,
1699 }
1700 },
1701 .write = spi_chip_write_256,
1702 .read = spi_chip_read,
1703 },
1704
1705 {
1706 .vendor = "Eon",
1707 .name = "EN25B16T",
1708 .bustype = CHIP_BUSTYPE_SPI,
1709 .manufacture_id = EON_ID_NOPREFIX,
1710 .model_id = EN_25B16,
1711 .total_size = 2048,
1712 .page_size = 256,
1713 .tested = TEST_UNTESTED,
1714 .probe = probe_spi_rdid,
1715 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001716 .block_erasers =
1717 {
1718 {
1719 .eraseblocks = {
1720 {64 * 1024, 31},
1721 {32 * 1024, 1},
1722 {16 * 1024, 1},
1723 {8 * 1024, 1},
1724 {4 * 1024, 2},
1725 },
1726 .block_erase = spi_block_erase_d8,
1727 }, {
1728 .eraseblocks = { {2 * 1024 * 1024, 1} },
1729 .block_erase = spi_block_erase_c7,
1730 }
1731 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001732 .write = spi_chip_write_256,
1733 .read = spi_chip_read,
1734 },
1735
1736 {
1737 .vendor = "Eon",
1738 .name = "EN25B32",
1739 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001740 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001741 .model_id = EN_25B32,
1742 .total_size = 4096,
1743 .page_size = 256,
1744 .tested = TEST_UNTESTED,
1745 .probe = probe_spi_rdid,
1746 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001747 .block_erasers =
1748 {
1749 {
1750 .eraseblocks = {
1751 {4 * 1024, 2},
1752 {8 * 1024, 1},
1753 {16 * 1024, 1},
1754 {32 * 1024, 1},
1755 {64 * 1024, 63},
1756 },
1757 .block_erase = spi_block_erase_d8,
1758 }, {
1759 .eraseblocks = { {4 * 1024 * 1024, 1} },
1760 .block_erase = spi_block_erase_c7,
1761 }
1762 },
1763 .write = spi_chip_write_256,
1764 .read = spi_chip_read,
1765 },
1766
1767 {
1768 .vendor = "Eon",
1769 .name = "EN25B32T",
1770 .bustype = CHIP_BUSTYPE_SPI,
1771 .manufacture_id = EON_ID_NOPREFIX,
1772 .model_id = EN_25B32,
1773 .total_size = 4096,
1774 .page_size = 256,
1775 .tested = TEST_UNTESTED,
1776 .probe = probe_spi_rdid,
1777 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001778 .block_erasers =
1779 {
1780 {
1781 .eraseblocks = {
1782 {64 * 1024, 63},
1783 {32 * 1024, 1},
1784 {16 * 1024, 1},
1785 {8 * 1024, 1},
1786 {4 * 1024, 2},
1787 },
1788 .block_erase = spi_block_erase_d8,
1789 }, {
1790 .eraseblocks = { {4 * 1024 * 1024, 1} },
1791 .block_erase = spi_block_erase_c7,
1792 }
1793 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001794 .write = spi_chip_write_256,
1795 .read = spi_chip_read,
1796 },
1797
1798 {
1799 .vendor = "Eon",
1800 .name = "EN25B64",
1801 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001802 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001803 .model_id = EN_25B64,
1804 .total_size = 8192,
1805 .page_size = 256,
1806 .tested = TEST_UNTESTED,
1807 .probe = probe_spi_rdid,
1808 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001809 .block_erasers =
1810 {
1811 {
1812 .eraseblocks = {
1813 {4 * 1024, 2},
1814 {8 * 1024, 1},
1815 {16 * 1024, 1},
1816 {32 * 1024, 1},
1817 {64 * 1024, 127},
1818 },
1819 .block_erase = spi_block_erase_d8,
1820 }, {
1821 .eraseblocks = { {8 * 1024 * 1024, 1} },
1822 .block_erase = spi_block_erase_c7,
1823 }
1824 },
1825 .write = spi_chip_write_256,
1826 .read = spi_chip_read,
1827 },
1828
1829 {
1830 .vendor = "Eon",
1831 .name = "EN25B64T",
1832 .bustype = CHIP_BUSTYPE_SPI,
1833 .manufacture_id = EON_ID_NOPREFIX,
1834 .model_id = EN_25B64,
1835 .total_size = 8192,
1836 .page_size = 256,
1837 .tested = TEST_UNTESTED,
1838 .probe = probe_spi_rdid,
1839 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001840 .block_erasers =
1841 {
1842 {
1843 .eraseblocks = {
1844 {64 * 1024, 127},
1845 {32 * 1024, 1},
1846 {16 * 1024, 1},
1847 {8 * 1024, 1},
1848 {4 * 1024, 2},
1849 },
1850 .block_erase = spi_block_erase_d8,
1851 }, {
1852 .eraseblocks = { {8 * 1024 * 1024, 1} },
1853 .block_erase = spi_block_erase_c7,
1854 }
1855 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001856 .write = spi_chip_write_256,
1857 .read = spi_chip_read,
1858 },
1859
1860 {
1861 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001862 .name = "EN25D16",
1863 .bustype = CHIP_BUSTYPE_SPI,
1864 .manufacture_id = EON_ID_NOPREFIX,
1865 .model_id = EN_25D16,
1866 .total_size = 2048,
1867 .page_size = 256,
1868 .tested = TEST_UNTESTED,
1869 .probe = probe_spi_rdid,
1870 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001871 .block_erasers =
1872 {
1873 {
1874 .eraseblocks = { {4 * 1024, 512} },
1875 .block_erase = spi_block_erase_20,
1876 }, {
1877 .eraseblocks = { {64 * 1024, 32} },
1878 .block_erase = spi_block_erase_d8,
1879 }, {
1880 .eraseblocks = { {64 * 1024, 32} },
1881 .block_erase = spi_block_erase_52,
1882 }, {
1883 .eraseblocks = { {2 * 1024 * 1024, 1} },
1884 .block_erase = spi_block_erase_60,
1885 }, {
1886 .eraseblocks = { {2 * 1024 * 1024, 1} },
1887 .block_erase = spi_block_erase_c7,
1888 }
1889 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001890 .write = spi_chip_write_256,
1891 .read = spi_chip_read,
1892 },
1893
1894 {
1895 .vendor = "Eon",
1896 .name = "EN25F05",
1897 .bustype = CHIP_BUSTYPE_SPI,
1898 .manufacture_id = EON_ID_NOPREFIX,
1899 .model_id = EN_25F05,
1900 .total_size = 64,
1901 .page_size = 256,
1902 .tested = TEST_UNTESTED,
1903 .probe = probe_spi_rdid,
1904 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001905 .block_erasers =
1906 {
1907 {
1908 .eraseblocks = { {4 * 1024, 16} },
1909 .block_erase = spi_block_erase_20,
1910 }, {
1911 .eraseblocks = { {32 * 1024, 2} },
1912 .block_erase = spi_block_erase_d8,
1913 }, {
1914 .eraseblocks = { {32 * 1024, 2} },
1915 .block_erase = spi_block_erase_52,
1916 }, {
1917 .eraseblocks = { {64 * 1024, 1} },
1918 .block_erase = spi_block_erase_60,
1919 }, {
1920 .eraseblocks = { {64 * 1024, 1} },
1921 .block_erase = spi_block_erase_c7,
1922 }
1923 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001924 .write = spi_chip_write_256,
1925 .read = spi_chip_read,
1926 },
1927
1928 {
1929 .vendor = "Eon",
1930 .name = "EN25F10",
1931 .bustype = CHIP_BUSTYPE_SPI,
1932 .manufacture_id = EON_ID_NOPREFIX,
1933 .model_id = EN_25F10,
1934 .total_size = 128,
1935 .page_size = 256,
1936 .tested = TEST_UNTESTED,
1937 .probe = probe_spi_rdid,
1938 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001939 .block_erasers =
1940 {
1941 {
1942 .eraseblocks = { {4 * 1024, 32} },
1943 .block_erase = spi_block_erase_20,
1944 }, {
1945 .eraseblocks = { {32 * 1024, 4} },
1946 .block_erase = spi_block_erase_d8,
1947 }, {
1948 .eraseblocks = { {32 * 1024, 4} },
1949 .block_erase = spi_block_erase_52,
1950 }, {
1951 .eraseblocks = { {128 * 1024, 1} },
1952 .block_erase = spi_block_erase_60,
1953 }, {
1954 .eraseblocks = { {128 * 1024, 1} },
1955 .block_erase = spi_block_erase_c7,
1956 }
1957 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001958 .write = spi_chip_write_256,
1959 .read = spi_chip_read,
1960 },
1961
1962 {
1963 .vendor = "Eon",
1964 .name = "EN25F20",
1965 .bustype = CHIP_BUSTYPE_SPI,
1966 .manufacture_id = EON_ID_NOPREFIX,
1967 .model_id = EN_25F20,
1968 .total_size = 256,
1969 .page_size = 256,
1970 .tested = TEST_UNTESTED,
1971 .probe = probe_spi_rdid,
1972 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001973 .block_erasers =
1974 {
1975 {
1976 .eraseblocks = { {4 * 1024, 64} },
1977 .block_erase = spi_block_erase_20,
1978 }, {
1979 .eraseblocks = { {64 * 1024, 4} },
1980 .block_erase = spi_block_erase_d8,
1981 }, {
1982 .eraseblocks = { {64 * 1024, 4} },
1983 .block_erase = spi_block_erase_52,
1984 }, {
1985 .eraseblocks = { {256 * 1024, 1} },
1986 .block_erase = spi_block_erase_60,
1987 }, {
1988 .eraseblocks = { {256 * 1024, 1} },
1989 .block_erase = spi_block_erase_c7,
1990 }
1991 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001992 .write = spi_chip_write_256,
1993 .read = spi_chip_read,
1994 },
1995
1996 {
1997 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001998 .name = "EN25F40",
1999 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002000 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002001 .model_id = EN_25F40,
2002 .total_size = 512,
2003 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002004 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002005 .probe = probe_spi_rdid,
2006 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002007 .block_erasers =
2008 {
2009 {
Sean Nelson54596372010-01-09 05:30:14 +00002010 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002011 .block_erase = spi_block_erase_20,
2012 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002013 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002014 .block_erase = spi_block_erase_d8,
2015 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002016 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002017 .block_erase = spi_block_erase_60,
2018 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002019 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002020 .block_erase = spi_block_erase_c7,
2021 },
2022 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002023 .write = spi_chip_write_256,
2024 .read = spi_chip_read,
2025 },
2026
2027 {
2028 .vendor = "Eon",
2029 .name = "EN25F80",
2030 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002031 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002032 .model_id = EN_25F80,
2033 .total_size = 1024,
2034 .page_size = 256,
Uwe Hermannea5425b2010-05-30 17:00:19 +00002035 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002036 .probe = probe_spi_rdid,
2037 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002038 .block_erasers =
2039 {
2040 {
2041 .eraseblocks = { {4 * 1024, 256} },
2042 .block_erase = spi_block_erase_20,
2043 }, {
2044 .eraseblocks = { {64 * 1024, 16} },
2045 .block_erase = spi_block_erase_d8,
2046 }, {
2047 .eraseblocks = { {1024 * 1024, 1} },
2048 .block_erase = spi_block_erase_60,
2049 }, {
2050 .eraseblocks = { {1024 * 1024, 1} },
2051 .block_erase = spi_block_erase_c7,
2052 }
2053 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002054 .write = spi_chip_write_256,
2055 .read = spi_chip_read,
2056 },
2057
2058 {
2059 .vendor = "Eon",
2060 .name = "EN25F16",
2061 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002062 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002063 .model_id = EN_25F16,
2064 .total_size = 2048,
2065 .page_size = 256,
2066 .tested = TEST_UNTESTED,
2067 .probe = probe_spi_rdid,
2068 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002069 .block_erasers =
2070 {
2071 {
2072 .eraseblocks = { {4 * 1024, 512} },
2073 .block_erase = spi_block_erase_20,
2074 }, {
2075 .eraseblocks = { {64 * 1024, 32} },
2076 .block_erase = spi_block_erase_d8,
2077 }, {
2078 .eraseblocks = { {2 * 1024 * 1024, 1} },
2079 .block_erase = spi_block_erase_60,
2080 }, {
2081 .eraseblocks = { {2 * 1024 * 1024, 1} },
2082 .block_erase = spi_block_erase_c7,
2083 }
2084 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002085 .write = spi_chip_write_256,
2086 .read = spi_chip_read,
2087 },
2088
2089 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002090 .vendor = "Eon",
2091 .name = "EN25F32",
2092 .bustype = CHIP_BUSTYPE_SPI,
2093 .manufacture_id = EON_ID_NOPREFIX,
2094 .model_id = EN_25F32,
2095 .total_size = 4096,
2096 .page_size = 256,
2097 .tested = TEST_UNTESTED,
2098 .probe = probe_spi_rdid,
2099 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002100 .block_erasers =
2101 {
2102 {
2103 .eraseblocks = { {4 * 1024, 1024} },
2104 .block_erase = spi_block_erase_20,
2105 }, {
2106 .eraseblocks = { {64 * 1024, 64} },
2107 .block_erase = spi_block_erase_d8,
2108 }, {
2109 .eraseblocks = { {4 * 1024 * 1024, 1} },
2110 .block_erase = spi_block_erase_60,
2111 }, {
2112 .eraseblocks = { {4 * 1024 * 1024, 1} },
2113 .block_erase = spi_block_erase_c7,
2114 }
2115 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002116 .write = spi_chip_write_256,
2117 .read = spi_chip_read,
2118 },
2119
2120 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002121 .vendor = "Eon",
2122 .name = "EN29F010",
2123 .bustype = CHIP_BUSTYPE_PARALLEL,
2124 .manufacture_id = EON_ID,
2125 .model_id = EN_29F010,
2126 .total_size = 128,
2127 .page_size = 128,
2128 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2129 .tested = TEST_OK_PREW,
2130 .probe = probe_jedec,
2131 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2132 .block_erasers =
2133 {
2134 {
2135 .eraseblocks = { {16 * 1024, 8} },
2136 .block_erase = erase_sector_jedec,
2137 },
2138 {
2139 .eraseblocks = { {128 * 1024, 1} },
2140 .block_erase = erase_chip_block_jedec,
2141 },
2142 },
2143 .write = write_jedec_1,
2144 .read = read_memmapped,
2145 },
2146
2147 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002148 .vendor = "EON",
2149 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002150 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002151 .manufacture_id = EON_ID,
2152 .model_id = EN_29F002B,
2153 .total_size = 256,
2154 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002155 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00002156 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002157 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002158 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002159 .block_erasers =
2160 {
2161 {
2162 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002163 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002164 {8 * 1024, 2},
2165 {32 * 1024, 1},
2166 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002167 },
2168 .block_erase = erase_sector_jedec,
2169 }, {
2170 .eraseblocks = { {256 * 1024, 1} },
2171 .block_erase = erase_chip_block_jedec,
2172 },
2173 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002174 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002175 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002176 },
2177
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002178 {
2179 .vendor = "EON",
2180 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002181 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002182 .manufacture_id = EON_ID,
2183 .model_id = EN_29F002T,
2184 .total_size = 256,
2185 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002186 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002187 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002188 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002189 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002190 .block_erasers =
2191 {
2192 {
2193 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002194 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002195 {32 * 1024, 1},
2196 {8 * 1024, 2},
2197 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002198 },
2199 .block_erase = erase_sector_jedec,
2200 }, {
2201 .eraseblocks = { {256 * 1024, 1} },
2202 .block_erase = erase_chip_block_jedec,
2203 },
2204 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002205 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002206 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002207 },
2208
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002209 {
2210 .vendor = "Fujitsu",
2211 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002212 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 .manufacture_id = FUJITSU_ID,
2214 .model_id = MBM29F004BC,
2215 .total_size = 512,
2216 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002217 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002218 .tested = TEST_UNTESTED,
2219 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002220 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002221 .block_erasers =
2222 {
2223 {
2224 .eraseblocks = {
2225 {16 * 1024, 1},
2226 {8 * 1024, 2},
2227 {32 * 1024, 1},
2228 {64 * 1024, 7},
2229 },
Sean Nelson35727f72010-01-28 23:55:12 +00002230 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002231 }, {
2232 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002233 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002234 },
2235 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002236 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002237 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002238 },
2239
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002240 {
2241 .vendor = "Fujitsu",
2242 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002243 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002244 .manufacture_id = FUJITSU_ID,
2245 .model_id = MBM29F004TC,
2246 .total_size = 512,
2247 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002248 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002249 .tested = TEST_UNTESTED,
2250 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002251 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002252 .block_erasers =
2253 {
2254 {
2255 .eraseblocks = {
2256 {64 * 1024, 7},
2257 {32 * 1024, 1},
2258 {8 * 1024, 2},
2259 {16 * 1024, 1},
2260 },
Sean Nelson35727f72010-01-28 23:55:12 +00002261 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002262 }, {
2263 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002264 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002265 },
2266 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002267 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002268 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002269 },
2270
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002271 {
Sean Nelson35727f72010-01-28 23:55:12 +00002272 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002273 .vendor = "Fujitsu",
2274 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002275 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002276 .manufacture_id = FUJITSU_ID,
2277 .model_id = MBM29F400BC,
2278 .total_size = 512,
2279 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002280 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002281 .tested = TEST_UNTESTED,
2282 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002283 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002284 .block_erasers =
2285 {
2286 {
2287 .eraseblocks = {
2288 {16 * 1024, 1},
2289 {8 * 1024, 2},
2290 {32 * 1024, 1},
2291 {64 * 1024, 7},
2292 },
2293 .block_erase = block_erase_m29f400bt,
2294 }, {
2295 .eraseblocks = { {512 * 1024, 1} },
2296 .block_erase = block_erase_chip_m29f400bt,
2297 },
2298 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002299 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002300 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002301 },
2302
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002303 {
2304 .vendor = "Fujitsu",
2305 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002306 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002307 .manufacture_id = FUJITSU_ID,
2308 .model_id = MBM29F400TC,
2309 .total_size = 512,
2310 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002311 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002312 .tested = TEST_UNTESTED,
2313 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002314 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002315 .block_erasers =
2316 {
2317 {
2318 .eraseblocks = {
2319 {64 * 1024, 7},
2320 {32 * 1024, 1},
2321 {8 * 1024, 2},
2322 {16 * 1024, 1},
2323 },
2324 .block_erase = block_erase_m29f400bt,
2325 }, {
2326 .eraseblocks = { {512 * 1024, 1} },
2327 .block_erase = block_erase_chip_m29f400bt,
2328 },
2329 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002330 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002331 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002332 },
2333
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002334 {
2335 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002336 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002337 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002338 .manufacture_id = INTEL_ID,
2339 .model_id = P28F001BXB,
2340 .total_size = 128,
2341 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002342 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002343 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002344 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002345 .block_erasers =
2346 {
2347 {
2348 .eraseblocks = {
2349 {8 * 1024, 1},
2350 {4 * 1024, 2},
2351 {112 * 1024, 1},
2352 },
Sean Nelson28accc22010-03-19 18:47:06 +00002353 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002354 },
2355 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002356 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002357 .read = read_memmapped,
2358 },
2359
2360 {
2361 .vendor = "Intel",
2362 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002363 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002364 .manufacture_id = INTEL_ID,
2365 .model_id = P28F001BXT,
2366 .total_size = 128,
2367 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002368 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002369 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002370 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002371 .block_erasers =
2372 {
2373 {
2374 .eraseblocks = {
2375 {112 * 1024, 1},
2376 {4 * 1024, 2},
2377 {8 * 1024, 1},
2378 },
Sean Nelson28accc22010-03-19 18:47:06 +00002379 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002380 },
2381 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002382 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002383 .read = read_memmapped,
2384 },
2385
2386 {
2387 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002388 .name = "28F004S5",
2389 .bustype = CHIP_BUSTYPE_PARALLEL,
2390 .manufacture_id = INTEL_ID,
2391 .model_id = E_28F004S5,
2392 .total_size = 512,
2393 .page_size = 256,
2394 .tested = TEST_UNTESTED,
2395 .probe = probe_82802ab,
2396 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002397 .block_erasers =
2398 {
2399 {
2400 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002401 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002402 },
2403 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002404 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002405 .write = write_82802ab,
2406 .read = read_memmapped,
2407 },
2408
2409 {
2410 .vendor = "Intel",
Michael Karcherad0010a2010-04-03 10:27:08 +00002411 .name = "28F004BV/BE-B",
2412 .bustype = CHIP_BUSTYPE_PARALLEL,
2413 .manufacture_id = INTEL_ID,
2414 .model_id = P28F004BB,
2415 .total_size = 512,
2416 .page_size = 128 * 1024, /* maximal block size */
2417 .tested = TEST_UNTESTED,
2418 .probe = probe_82802ab,
2419 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2420 .block_erasers =
2421 {
2422 {
2423 .eraseblocks = {
2424 {16 * 1024, 1},
2425 {8 * 1024, 2},
2426 {96 * 1024, 1},
2427 {128 * 1024, 3},
2428 },
2429 .block_erase = erase_block_82802ab,
2430 },
2431 },
2432 .write = write_82802ab,
2433 .read = read_memmapped,
2434 },
2435
2436 {
2437 .vendor = "Intel",
2438 .name = "28F004BV/BE-T",
2439 .bustype = CHIP_BUSTYPE_PARALLEL,
2440 .manufacture_id = INTEL_ID,
2441 .model_id = P28F004BT,
2442 .total_size = 512,
2443 .page_size = 128 * 1024, /* maximal block size */
2444 .tested = TEST_UNTESTED,
2445 .probe = probe_82802ab,
2446 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2447 .block_erasers =
2448 {
2449 {
2450 .eraseblocks = {
2451 {128 * 1024, 3},
2452 {96 * 1024, 1},
2453 {8 * 1024, 2},
2454 {16 * 1024, 1},
2455 },
2456 .block_erase = erase_block_82802ab,
2457 },
2458 },
2459 .write = write_82802ab,
2460 .read = read_memmapped,
2461 },
2462
2463 {
2464 .vendor = "Intel",
2465 .name = "28F400BV/CV/CE-B",
2466 .bustype = CHIP_BUSTYPE_PARALLEL,
2467 .manufacture_id = INTEL_ID,
2468 .model_id = P28F400BB,
2469 .total_size = 512,
2470 .page_size = 128 * 1024, /* maximal block size */
2471 .feature_bits = FEATURE_ADDR_SHIFTED,
2472 .tested = TEST_UNTESTED,
2473 .probe = probe_82802ab,
2474 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2475 .block_erasers =
2476 {
2477 {
2478 .eraseblocks = {
2479 {16 * 1024, 1},
2480 {8 * 1024, 2},
2481 {96 * 1024, 1},
2482 {128 * 1024, 3},
2483 },
2484 .block_erase = erase_block_82802ab,
2485 },
2486 },
2487 .write = write_82802ab,
2488 .read = read_memmapped,
2489 },
2490
2491 {
2492 .vendor = "Intel",
2493 .name = "28F400BV/CV/CE-T",
2494 .bustype = CHIP_BUSTYPE_PARALLEL,
2495 .manufacture_id = INTEL_ID,
2496 .model_id = P28F400BT,
2497 .total_size = 512,
2498 .page_size = 128 * 1024, /* maximal block size */
2499 .feature_bits = FEATURE_ADDR_SHIFTED,
2500 .tested = TEST_UNTESTED,
2501 .probe = probe_82802ab,
2502 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2503 .block_erasers =
2504 {
2505 {
2506 .eraseblocks = {
2507 {128 * 1024, 3},
2508 {96 * 1024, 1},
2509 {8 * 1024, 2},
2510 {16 * 1024, 1},
2511 },
2512 .block_erase = erase_block_82802ab,
2513 },
2514 },
2515 .write = write_82802ab,
2516 .read = read_memmapped,
2517 },
2518
2519 {
2520 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002521 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002522 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002523 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002524 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002525 .total_size = 512,
2526 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002527 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002528 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002529 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002530 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002531 .block_erasers =
2532 {
2533 {
2534 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002535 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002536 },
2537 },
Sean Nelson28accc22010-03-19 18:47:06 +00002538 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002539 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002540 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002541 },
2542
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002543 {
2544 .vendor = "Intel",
2545 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002546 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002547 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002548 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002549 .total_size = 1024,
2550 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002551 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002552 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002553 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002554 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002555 .block_erasers =
2556 {
2557 {
2558 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00002559 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002560 },
2561 },
Sean Nelson28accc22010-03-19 18:47:06 +00002562 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002563 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002564 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002565 },
2566
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002567 {
2568 .vendor = "Macronix",
2569 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002570 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002571 .manufacture_id = MX_ID,
2572 .model_id = MX_25L512,
2573 .total_size = 64,
2574 .page_size = 256,
2575 .tested = TEST_UNTESTED,
2576 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002577 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002578 .block_erasers =
2579 {
2580 {
2581 .eraseblocks = { {4 * 1024, 16} },
2582 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002583 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002584 .eraseblocks = { {64 * 1024, 1} },
2585 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002586 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002587 .eraseblocks = { {64 * 1024, 1} },
2588 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002589 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002590 .eraseblocks = { {64 * 1024, 1} },
2591 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002592 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002593 .eraseblocks = { {64 * 1024, 1} },
2594 .block_erase = spi_block_erase_c7,
2595 },
2596 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002597 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002598 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002599 },
2600
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002601 {
2602 .vendor = "Macronix",
2603 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002604 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002605 .manufacture_id = MX_ID,
2606 .model_id = MX_25L1005,
2607 .total_size = 128,
2608 .page_size = 256,
2609 .tested = TEST_UNTESTED,
2610 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002611 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002612 .block_erasers =
2613 {
2614 {
2615 .eraseblocks = { {4 * 1024, 32} },
2616 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002617 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002618 .eraseblocks = { {64 * 1024, 2} },
2619 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002620 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002621 .eraseblocks = { {128 * 1024, 1} },
2622 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002623 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002624 .eraseblocks = { {128 * 1024, 1} },
2625 .block_erase = spi_block_erase_c7,
2626 },
2627 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002628 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002629 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002630 },
2631
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002632 {
2633 .vendor = "Macronix",
2634 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002635 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002636 .manufacture_id = MX_ID,
2637 .model_id = MX_25L2005,
2638 .total_size = 256,
2639 .page_size = 256,
2640 .tested = TEST_UNTESTED,
2641 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002642 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002643 .block_erasers =
2644 {
2645 {
2646 .eraseblocks = { {4 * 1024, 64} },
2647 .block_erase = spi_block_erase_20,
2648 }, {
2649 .eraseblocks = { {64 * 1024, 4} },
2650 .block_erase = spi_block_erase_52,
2651 }, {
2652 .eraseblocks = { {64 * 1024, 4} },
2653 .block_erase = spi_block_erase_d8,
2654 }, {
2655 .eraseblocks = { {256 * 1024, 1} },
2656 .block_erase = spi_block_erase_60,
2657 }, {
2658 .eraseblocks = { {256 * 1024, 1} },
2659 .block_erase = spi_block_erase_c7,
2660 },
2661 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002662 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002663 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002664 },
2665
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002666 {
2667 .vendor = "Macronix",
2668 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002669 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002670 .manufacture_id = MX_ID,
2671 .model_id = MX_25L4005,
2672 .total_size = 512,
2673 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002674 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002675 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002676 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002677 .block_erasers =
2678 {
2679 {
2680 .eraseblocks = { {4 * 1024, 128} },
2681 .block_erase = spi_block_erase_20,
2682 }, {
2683 .eraseblocks = { {64 * 1024, 8} },
2684 .block_erase = spi_block_erase_52,
2685 }, {
2686 .eraseblocks = { {64 * 1024, 8} },
2687 .block_erase = spi_block_erase_d8,
2688 }, {
2689 .eraseblocks = { {512 * 1024, 1} },
2690 .block_erase = spi_block_erase_60,
2691 }, {
2692 .eraseblocks = { {512 * 1024, 1} },
2693 .block_erase = spi_block_erase_c7,
2694 },
2695 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002696 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002697 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002698 },
2699
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002700 {
2701 .vendor = "Macronix",
2702 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002703 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002704 .manufacture_id = MX_ID,
2705 .model_id = MX_25L8005,
2706 .total_size = 1024,
2707 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002708 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002709 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002710 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002711 .block_erasers =
2712 {
2713 {
2714 .eraseblocks = { {4 * 1024, 256} },
2715 .block_erase = spi_block_erase_20,
2716 }, {
2717 .eraseblocks = { {64 * 1024, 16} },
2718 .block_erase = spi_block_erase_52,
2719 }, {
2720 .eraseblocks = { {64 * 1024, 16} },
2721 .block_erase = spi_block_erase_d8,
2722 }, {
2723 .eraseblocks = { {1024 * 1024, 1} },
2724 .block_erase = spi_block_erase_60,
2725 }, {
2726 .eraseblocks = { {1024 * 1024, 1} },
2727 .block_erase = spi_block_erase_c7,
2728 },
2729 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002730 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002731 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002732 },
2733
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002734 {
2735 .vendor = "Macronix",
2736 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002737 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002738 .manufacture_id = MX_ID,
2739 .model_id = MX_25L1605,
2740 .total_size = 2048,
2741 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002742 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002743 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002744 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002745 .block_erasers =
2746 {
2747 {
2748 .eraseblocks = { {4 * 1024, 512} },
2749 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2750 }, {
2751 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2752 .block_erase = spi_block_erase_52,
2753 }, {
2754 .eraseblocks = { {64 * 1024, 32} },
2755 .block_erase = spi_block_erase_d8,
2756 }, {
2757 .eraseblocks = { {2 * 1024 * 1024, 1} },
2758 .block_erase = spi_block_erase_60,
2759 }, {
2760 .eraseblocks = { {2 * 1024 * 1024, 1} },
2761 .block_erase = spi_block_erase_c7,
2762 },
2763 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002764 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002765 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002766 },
2767
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002768 {
2769 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002770 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002771 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002772 .manufacture_id = MX_ID,
2773 .model_id = MX_25L1635D,
2774 .total_size = 2048,
2775 .page_size = 256,
2776 .tested = TEST_UNTESTED,
2777 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002778 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002779 .block_erasers =
2780 {
2781 {
2782 .eraseblocks = { {4 * 1024, 512} },
2783 .block_erase = spi_block_erase_20,
2784 }, {
2785 .eraseblocks = { {64 * 1024, 32} },
2786 .block_erase = spi_block_erase_d8,
2787 }, {
2788 .eraseblocks = { {2 * 1024 * 1024, 1} },
2789 .block_erase = spi_block_erase_60,
2790 }, {
2791 .eraseblocks = { {2 * 1024 * 1024, 1} },
2792 .block_erase = spi_block_erase_c7,
2793 }
2794 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002795 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002796 .read = spi_chip_read,
2797 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002798
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002799 {
2800 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002801 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002802 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002803 .manufacture_id = MX_ID,
2804 .model_id = MX_25L3205,
2805 .total_size = 4096,
2806 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002807 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002808 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002809 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002810 .block_erasers =
2811 {
2812 {
2813 .eraseblocks = { {4 * 1024, 1024} },
2814 .block_erase = spi_block_erase_20,
2815 }, {
2816 .eraseblocks = { {4 * 1024, 1024} },
2817 .block_erase = spi_block_erase_d8,
2818 }, {
2819 .eraseblocks = { {4 * 1024 * 1024, 1} },
2820 .block_erase = spi_block_erase_60,
2821 }, {
2822 .eraseblocks = { {4 * 1024 * 1024, 1} },
2823 .block_erase = spi_block_erase_c7,
2824 },
2825 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002826 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002827 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002828 },
2829
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002830 {
2831 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002832 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002833 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002834 .manufacture_id = MX_ID,
2835 .model_id = MX_25L3235D,
2836 .total_size = 4096,
2837 .page_size = 256,
2838 .tested = TEST_UNTESTED,
2839 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002840 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002841 .block_erasers =
2842 {
2843 {
2844 .eraseblocks = { {4 * 1024, 1024} },
2845 .block_erase = spi_block_erase_20,
2846 }, {
2847 .eraseblocks = { {64 * 1024, 64} },
2848 .block_erase = spi_block_erase_d8,
2849 }, {
2850 .eraseblocks = { {4 * 1024 * 1024, 1} },
2851 .block_erase = spi_block_erase_60,
2852 }, {
2853 .eraseblocks = { {4 * 1024 * 1024, 1} },
2854 .block_erase = spi_block_erase_c7,
2855 }
2856 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002857 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002858 .read = spi_chip_read,
2859 },
2860
2861 {
2862 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002863 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002864 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002865 .manufacture_id = MX_ID,
2866 .model_id = MX_25L6405,
2867 .total_size = 8192,
2868 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002869 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002870 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002871 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002872 .block_erasers =
2873 {
2874 {
2875 .eraseblocks = { {64 * 1024, 128} },
2876 .block_erase = spi_block_erase_20,
2877 }, {
2878 .eraseblocks = { {64 * 1024, 128} },
2879 .block_erase = spi_block_erase_d8,
2880 }, {
2881 .eraseblocks = { {8 * 1024 * 1024, 1} },
2882 .block_erase = spi_block_erase_60,
2883 }, {
2884 .eraseblocks = { {8 * 1024 * 1024, 1} },
2885 .block_erase = spi_block_erase_c7,
2886 }
2887 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002888 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002889 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002890 },
2891
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002892 {
2893 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002894 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002895 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002896 .manufacture_id = MX_ID,
2897 .model_id = MX_25L12805,
2898 .total_size = 16384,
2899 .page_size = 256,
2900 .tested = TEST_UNTESTED,
2901 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002902 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002903 .block_erasers =
2904 {
2905 {
2906 .eraseblocks = { {4 * 1024, 4096} },
2907 .block_erase = spi_block_erase_20,
2908 }, {
2909 .eraseblocks = { {64 * 1024, 256} },
2910 .block_erase = spi_block_erase_d8,
2911 }, {
2912 .eraseblocks = { {16 * 1024 * 1024, 1} },
2913 .block_erase = spi_block_erase_60,
2914 }, {
2915 .eraseblocks = { {16 * 1024 * 1024, 1} },
2916 .block_erase = spi_block_erase_c7,
2917 }
2918 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002919 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002920 .read = spi_chip_read,
2921 },
2922
2923 {
2924 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002925 .name = "MX29F001B",
2926 .bustype = CHIP_BUSTYPE_PARALLEL,
2927 .manufacture_id = MX_ID,
2928 .model_id = MX_29F001B,
2929 .total_size = 128,
2930 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002931 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2932 .tested = TEST_UNTESTED,
2933 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002934 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002935 .block_erasers =
2936 {
2937 {
2938 .eraseblocks = {
2939 {8 * 1024, 1},
2940 {4 * 1024, 2},
2941 {8 * 1024, 2},
2942 {32 * 1024, 1},
2943 {64 * 1024, 1},
2944 },
Sean Nelson35727f72010-01-28 23:55:12 +00002945 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002946 }, {
2947 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002948 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002949 }
2950 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002951 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002952 .read = read_memmapped,
2953 },
2954
2955 {
2956 .vendor = "Macronix",
2957 .name = "MX29F001T",
2958 .bustype = CHIP_BUSTYPE_PARALLEL,
2959 .manufacture_id = MX_ID,
2960 .model_id = MX_29F001T,
2961 .total_size = 128,
2962 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002963 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2964 .tested = TEST_UNTESTED,
2965 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002966 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002967 .block_erasers =
2968 {
2969 {
2970 .eraseblocks = {
2971 {64 * 1024, 1},
2972 {32 * 1024, 1},
2973 {8 * 1024, 2},
2974 {4 * 1024, 2},
2975 {8 * 1024, 1},
2976 },
Sean Nelson35727f72010-01-28 23:55:12 +00002977 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002978 }, {
2979 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002980 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002981 }
2982 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002983 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002984 .read = read_memmapped,
2985 },
2986
2987 {
2988 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002989 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002990 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002991 .manufacture_id = MX_ID,
2992 .model_id = MX_29F002B,
2993 .total_size = 256,
2994 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002995 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002996 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002997 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002998 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002999 .block_erasers =
3000 {
3001 {
3002 .eraseblocks = {
3003 {16 * 1024, 1},
3004 {8 * 1024, 2},
3005 {32 * 1024, 1},
3006 {64 * 1024, 3},
3007 },
Sean Nelson35727f72010-01-28 23:55:12 +00003008 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003009 }, {
3010 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003011 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003012 },
3013 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003014 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003015 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003016 },
3017
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003018 {
3019 .vendor = "Macronix",
3020 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003021 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003022 .manufacture_id = MX_ID,
3023 .model_id = MX_29F002T,
3024 .total_size = 256,
3025 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003026 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003027 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00003028 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003029 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003030 .block_erasers =
3031 {
3032 {
3033 .eraseblocks = {
3034 {64 * 1024, 3},
3035 {32 * 1024, 1},
3036 {8 * 1024, 2},
3037 {16 * 1024, 1},
3038 },
Sean Nelson35727f72010-01-28 23:55:12 +00003039 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003040 }, {
3041 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003042 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003043 },
3044 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003045 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003046 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003047 },
3048
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003049 {
3050 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003051 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003052 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003053 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003054 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003055 .total_size = 512,
3056 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003057 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3058 .tested = TEST_UNTESTED,
3059 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003060 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003061 .block_erasers =
3062 {
3063 {
3064 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00003065 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003066 }, {
3067 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003068 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003069 },
3070 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003071 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003072 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00003073 },
3074
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003075 {
3076 .vendor = "Numonyx",
3077 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003078 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003079 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003080 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003081 .total_size = 128,
3082 .page_size = 256,
3083 .tested = TEST_UNTESTED,
3084 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003085 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003086 .block_erasers =
3087 {
3088 {
3089 .eraseblocks = { {4 * 1024, 32} },
3090 .block_erase = spi_block_erase_20,
3091 }, {
3092 .eraseblocks = { {64 * 1024, 2} },
3093 .block_erase = spi_block_erase_d8,
3094 }, {
3095 .eraseblocks = { {128 * 1024, 1} },
3096 .block_erase = spi_block_erase_c7,
3097 }
3098 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003099 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003100 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003101 },
3102
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003103 {
3104 .vendor = "Numonyx",
3105 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003106 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003107 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003108 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003109 .total_size = 256,
3110 .page_size = 256,
3111 .tested = TEST_UNTESTED,
3112 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003113 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003114 .block_erasers =
3115 {
3116 {
3117 .eraseblocks = { {4 * 1024, 64} },
3118 .block_erase = spi_block_erase_20,
3119 }, {
3120 .eraseblocks = { {64 * 1024, 4} },
3121 .block_erase = spi_block_erase_d8,
3122 }, {
3123 .eraseblocks = { {256 * 1024, 1} },
3124 .block_erase = spi_block_erase_c7,
3125 }
3126 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003127 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003128 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003129 },
3130
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003131 {
3132 .vendor = "Numonyx",
3133 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003134 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003135 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003136 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003137 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003138 .page_size = 256,
3139 .tested = TEST_UNTESTED,
3140 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003141 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003142 .block_erasers =
3143 {
3144 {
3145 .eraseblocks = { {4 * 1024, 128} },
3146 .block_erase = spi_block_erase_20,
3147 }, {
3148 .eraseblocks = { {64 * 1024, 8} },
3149 .block_erase = spi_block_erase_d8,
3150 }, {
3151 .eraseblocks = { {512 * 1024, 1} },
3152 .block_erase = spi_block_erase_c7,
3153 }
3154 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003155 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003156 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003157 },
3158
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003159 {
3160 .vendor = "Numonyx",
3161 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003162 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003163 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003164 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003165 .total_size = 1024,
3166 .page_size = 256,
3167 .tested = TEST_OK_PREW,
3168 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003169 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003170 .block_erasers =
3171 {
3172 {
3173 .eraseblocks = { {4 * 1024, 256} },
3174 .block_erase = spi_block_erase_20,
3175 }, {
3176 .eraseblocks = { {64 * 1024, 16} },
3177 .block_erase = spi_block_erase_d8,
3178 }, {
3179 .eraseblocks = { {1024 * 1024, 1} },
3180 .block_erase = spi_block_erase_c7,
3181 }
3182 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003183 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003184 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003185 },
3186
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003187 {
3188 .vendor = "Numonyx",
3189 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003190 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003191 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003192 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003193 .total_size = 2048,
3194 .page_size = 256,
3195 .tested = TEST_UNTESTED,
3196 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003197 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003198 .block_erasers =
3199 {
3200 {
3201 .eraseblocks = { {4 * 1024, 512} },
3202 .block_erase = spi_block_erase_20,
3203 }, {
3204 .eraseblocks = { {64 * 1024, 32} },
3205 .block_erase = spi_block_erase_d8,
3206 }, {
3207 .eraseblocks = { {2 * 1024 * 1024, 1} },
3208 .block_erase = spi_block_erase_c7,
3209 }
3210 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003211 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003212 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003213 },
3214
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003215 {
3216 .vendor = "PMC",
3217 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003218 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003219 .manufacture_id = PMC_ID,
3220 .model_id = PMC_25LV010,
3221 .total_size = 128,
3222 .page_size = 256,
3223 .tested = TEST_UNTESTED,
3224 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003225 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003226 .block_erasers =
3227 {
3228 {
3229 .eraseblocks = { {4 * 1024, 32} },
3230 .block_erase = spi_block_erase_d7,
3231 }, {
3232 .eraseblocks = { {32 * 1024, 4} },
3233 .block_erase = spi_block_erase_d8,
3234 }, {
3235 .eraseblocks = { {128 * 1024, 1} },
3236 .block_erase = spi_block_erase_c7,
3237 }
3238 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003239 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003240 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003241 },
3242
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003243 {
3244 .vendor = "PMC",
3245 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003246 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003247 .manufacture_id = PMC_ID,
3248 .model_id = PMC_25LV016B,
3249 .total_size = 2048,
3250 .page_size = 256,
3251 .tested = TEST_UNTESTED,
3252 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003253 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003254 .block_erasers =
3255 {
3256 {
3257 .eraseblocks = { {4 * 1024, 512} },
3258 .block_erase = spi_block_erase_d7,
3259 }, {
3260 .eraseblocks = { {4 * 1024, 512} },
3261 .block_erase = spi_block_erase_20,
3262 }, {
3263 .eraseblocks = { {64 * 1024, 32} },
3264 .block_erase = spi_block_erase_d8,
3265 }, {
3266 .eraseblocks = { {2 * 1024 * 1024, 1} },
3267 .block_erase = spi_block_erase_60,
3268 }, {
3269 .eraseblocks = { {2 * 1024 * 1024, 1} },
3270 .block_erase = spi_block_erase_c7,
3271 }
3272 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003273 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003274 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003275 },
3276
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003277 {
3278 .vendor = "PMC",
3279 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003280 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003281 .manufacture_id = PMC_ID,
3282 .model_id = PMC_25LV020,
3283 .total_size = 256,
3284 .page_size = 256,
3285 .tested = TEST_UNTESTED,
3286 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003287 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003288 .block_erasers =
3289 {
3290 {
3291 .eraseblocks = { {4 * 1024, 64} },
3292 .block_erase = spi_block_erase_d7,
3293 }, {
3294 .eraseblocks = { {64 * 1024, 4} },
3295 .block_erase = spi_block_erase_d8,
3296 }, {
3297 .eraseblocks = { {256 * 1024, 1} },
3298 .block_erase = spi_block_erase_c7,
3299 }
3300 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003301 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003302 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003303 },
3304
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003305 {
3306 .vendor = "PMC",
3307 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003308 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003309 .manufacture_id = PMC_ID,
3310 .model_id = PMC_25LV040,
3311 .total_size = 512,
3312 .page_size = 256,
3313 .tested = TEST_UNTESTED,
3314 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003315 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003316 .block_erasers =
3317 {
3318 {
3319 .eraseblocks = { {4 * 1024, 128} },
3320 .block_erase = spi_block_erase_d7,
3321 }, {
3322 .eraseblocks = { {64 * 1024, 8} },
3323 .block_erase = spi_block_erase_d8,
3324 }, {
3325 .eraseblocks = { {512 * 1024, 1} },
3326 .block_erase = spi_block_erase_c7,
3327 }
3328 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003329 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003330 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003331 },
3332
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003333 {
3334 .vendor = "PMC",
3335 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003336 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003337 .manufacture_id = PMC_ID,
3338 .model_id = PMC_25LV080B,
3339 .total_size = 1024,
3340 .page_size = 256,
3341 .tested = TEST_UNTESTED,
3342 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003343 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003344 .block_erasers =
3345 {
3346 {
3347 .eraseblocks = { {4 * 1024, 256} },
3348 .block_erase = spi_block_erase_d7,
3349 }, {
3350 .eraseblocks = { {4 * 1024, 256} },
3351 .block_erase = spi_block_erase_20,
3352 }, {
3353 .eraseblocks = { {64 * 1024, 16} },
3354 .block_erase = spi_block_erase_d8,
3355 }, {
3356 .eraseblocks = { {1024 * 1024, 1} },
3357 .block_erase = spi_block_erase_60,
3358 }, {
3359 .eraseblocks = { {1024 * 1024, 1} },
3360 .block_erase = spi_block_erase_c7,
3361 }
3362 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003363 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003364 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003365 },
3366
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003367 {
3368 .vendor = "PMC",
3369 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003370 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003371 .manufacture_id = PMC_ID,
3372 .model_id = PMC_25LV512,
3373 .total_size = 64,
3374 .page_size = 256,
3375 .tested = TEST_UNTESTED,
3376 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003377 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003378 .block_erasers =
3379 {
3380 {
3381 .eraseblocks = { {4 * 1024, 16} },
3382 .block_erase = spi_block_erase_d7,
3383 }, {
3384 .eraseblocks = { {32 * 1024, 2} },
3385 .block_erase = spi_block_erase_d8,
3386 }, {
3387 .eraseblocks = { {64 * 1024, 1} },
3388 .block_erase = spi_block_erase_c7,
3389 }
3390 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003391 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003392 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003393 },
3394
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003395 {
3396 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003397 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003398 .bustype = CHIP_BUSTYPE_PARALLEL,
3399 .manufacture_id = PMC_ID_NOPREFIX,
3400 .model_id = PMC_29F002T,
3401 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003402 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003403 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3404 .tested = TEST_UNTESTED,
3405 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003406 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003407 .block_erasers =
3408 {
3409 {
3410 .eraseblocks = {
3411 {128 * 1024, 1},
3412 {96 * 1024, 1},
3413 {8 * 1024, 2},
3414 {16 * 1024, 1},
3415 },
Sean Nelson35727f72010-01-28 23:55:12 +00003416 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003417 }, {
3418 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003419 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003420 },
3421 },
Sean Nelson35727f72010-01-28 23:55:12 +00003422 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003423 .read = read_memmapped,
3424 },
3425
3426 {
3427 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003428 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003429 .bustype = CHIP_BUSTYPE_PARALLEL,
3430 .manufacture_id = PMC_ID_NOPREFIX,
3431 .model_id = PMC_29F002B,
3432 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003433 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003434 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003435 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003436 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003437 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003438 .block_erasers =
3439 {
3440 {
3441 .eraseblocks = {
3442 {16 * 1024, 1},
3443 {8 * 1024, 2},
3444 {96 * 1024, 1},
3445 {128 * 1024, 1},
3446 },
Sean Nelson35727f72010-01-28 23:55:12 +00003447 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003448 }, {
3449 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003450 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003451 },
3452 },
Sean Nelson35727f72010-01-28 23:55:12 +00003453 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003454 .read = read_memmapped,
3455 },
3456
3457 {
3458 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003459 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003460 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003461 .manufacture_id = PMC_ID_NOPREFIX,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003462 .model_id = PMC_39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003463 .total_size = 128,
3464 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003465 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00003466 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003467 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003468 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003469 .block_erasers =
3470 {
3471 {
3472 .eraseblocks = { {4 * 1024, 32} },
3473 .block_erase = erase_sector_jedec,
3474 }, {
3475 .eraseblocks = { {64 * 1024, 2} },
3476 .block_erase = erase_block_jedec,
3477 }, {
3478 .eraseblocks = { {128 * 1024, 1} },
3479 .block_erase = erase_chip_block_jedec,
3480 }
3481 },
Sean Nelson35727f72010-01-28 23:55:12 +00003482 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003483 .read = read_memmapped,
3484 },
3485
3486 {
3487 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003488 .name = "Pm39LV020",
3489 .bustype = CHIP_BUSTYPE_PARALLEL,
3490 .manufacture_id = PMC_ID_NOPREFIX,
3491 .model_id = PMC_39LV020,
3492 .total_size = 256,
3493 .page_size = 4096,
3494 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3495 .tested = TEST_UNTESTED,
3496 .probe = probe_jedec,
3497 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3498 .block_erasers =
3499 {
3500 {
3501 .eraseblocks = { {4 * 1024, 64} },
3502 .block_erase = erase_sector_jedec,
3503 }, {
3504 .eraseblocks = { {64 * 1024, 4} },
3505 .block_erase = erase_block_jedec,
3506 }, {
3507 .eraseblocks = { {256 * 1024, 1} },
3508 .block_erase = erase_chip_block_jedec,
3509 }
3510 },
3511 .write = write_jedec_1,
3512 .read = read_memmapped,
3513 },
3514
3515 {
3516 .vendor = "PMC",
3517 .name = "Pm39LV040",
3518 .bustype = CHIP_BUSTYPE_PARALLEL,
3519 .manufacture_id = PMC_ID_NOPREFIX,
3520 .model_id = PMC_39LV040,
3521 .total_size = 512,
3522 .page_size = 4096,
3523 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3524 .tested = TEST_UNTESTED,
3525 .probe = probe_jedec,
3526 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3527 .block_erasers =
3528 {
3529 {
3530 .eraseblocks = { {4 * 1024, 128} },
3531 .block_erase = erase_sector_jedec,
3532 }, {
3533 .eraseblocks = { {64 * 1024, 8} },
3534 .block_erase = erase_block_jedec,
3535 }, {
3536 .eraseblocks = { {512 * 1024, 1} },
3537 .block_erase = erase_chip_block_jedec,
3538 }
3539 },
3540 .write = write_jedec_1,
3541 .read = read_memmapped,
3542 },
3543
3544 {
3545 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003546 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003547 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003548 .manufacture_id = PMC_ID_NOPREFIX,
3549 .model_id = PMC_49FL002,
3550 .total_size = 256,
3551 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003552 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00003553 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003554 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003555 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003556 .block_erasers =
3557 {
3558 {
3559 .eraseblocks = { {4 * 1024, 64} },
3560 .block_erase = erase_sector_jedec,
3561 }, {
3562 .eraseblocks = { {16 * 1024, 16} },
3563 .block_erase = erase_block_jedec,
3564 }, {
3565 .eraseblocks = { {256 * 1024, 1} },
3566 .block_erase = erase_chip_block_jedec,
3567 }
3568 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003569 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003570 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003571 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003572 },
3573
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003574 {
3575 .vendor = "PMC",
3576 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003577 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003578 .manufacture_id = PMC_ID_NOPREFIX,
3579 .model_id = PMC_49FL004,
3580 .total_size = 512,
3581 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003582 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00003583 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003584 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003585 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003586 .block_erasers =
3587 {
3588 {
3589 .eraseblocks = { {4 * 1024, 128} },
3590 .block_erase = erase_sector_jedec,
3591 }, {
3592 .eraseblocks = { {64 * 1024, 8} },
3593 .block_erase = erase_block_jedec,
3594 }, {
3595 .eraseblocks = { {512 * 1024, 1} },
3596 .block_erase = erase_chip_block_jedec,
3597 }
3598 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003599 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003600 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003601 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003602 },
3603
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003604 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003605 .vendor = "Sanyo",
3606 .name = "LF25FW203A",
3607 .bustype = CHIP_BUSTYPE_SPI,
3608 .manufacture_id = SANYO_ID,
3609 .model_id = SANYO_LE25FW203A,
3610 .total_size = 2048,
3611 .page_size = 256,
3612 .tested = TEST_UNTESTED,
3613 .probe = probe_spi_rdid,
3614 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003615 .block_erasers =
3616 {
3617 {
3618 .eraseblocks = { {64 * 1024, 32} },
3619 .block_erase = spi_block_erase_d8,
3620 }, {
3621 .eraseblocks = { {2 * 1024 * 1024, 1} },
3622 .block_erase = spi_block_erase_c7,
3623 }
3624 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003625 .write = spi_chip_write_256,
3626 .read = spi_chip_read,
3627 },
3628
3629 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003630 .vendor = "Sharp",
3631 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003632 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003633 .manufacture_id = SHARP_ID,
3634 .model_id = SHARP_LHF00L04,
3635 .total_size = 1024,
3636 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003637 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003638 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003639 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003640 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003641 .block_erasers =
3642 {
3643 {
3644 .eraseblocks = {
3645 {64 * 1024, 15},
3646 {8 * 1024, 8}
3647 },
Sean Nelson28accc22010-03-19 18:47:06 +00003648 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003649 }, {
3650 .eraseblocks = {
3651 {1024 * 1024, 1}
3652 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003653 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003654 },
3655 },
Sean Nelson28accc22010-03-19 18:47:06 +00003656 .unlock = unlock_82802ab,
3657 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003658 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003659 },
3660
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003661 {
3662 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003663 .name = "S25FL008A",
3664 .bustype = CHIP_BUSTYPE_SPI,
3665 .manufacture_id = SPANSION_ID,
3666 .model_id = SPANSION_S25FL008A,
3667 .total_size = 1024,
3668 .page_size = 256,
3669 .tested = TEST_OK_PREW,
3670 .probe = probe_spi_rdid,
3671 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003672 .block_erasers =
3673 {
3674 {
3675 .eraseblocks = { {64 * 1024, 16} },
3676 .block_erase = spi_block_erase_d8,
3677 }, {
3678 .eraseblocks = { {1024 * 1024, 1} },
3679 .block_erase = spi_block_erase_c7,
3680 }
3681 },
3682 .write = spi_chip_write_256,
3683 .read = spi_chip_read,
3684 },
3685
3686 {
3687 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003688 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003689 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003690 .manufacture_id = SPANSION_ID,
3691 .model_id = SPANSION_S25FL016A,
3692 .total_size = 2048,
3693 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003694 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003695 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003696 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003697 .block_erasers =
3698 {
3699 {
3700 .eraseblocks = { {64 * 1024, 32} },
3701 .block_erase = spi_block_erase_d8,
3702 }, {
3703 .eraseblocks = { {2 * 1024 * 1024, 1} },
3704 .block_erase = spi_block_erase_c7,
3705 }
3706 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003707 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003708 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003709 },
3710
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003711 {
3712 .vendor = "SST",
3713 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003714 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003715 .manufacture_id = SST_ID,
3716 .model_id = SST_25VF016B,
3717 .total_size = 2048,
3718 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003719 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003720 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003721 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003722 .block_erasers =
3723 {
3724 {
3725 .eraseblocks = { {4 * 1024, 512} },
3726 .block_erase = spi_block_erase_20,
3727 }, {
3728 .eraseblocks = { {32 * 1024, 64} },
3729 .block_erase = spi_block_erase_52,
3730 }, {
3731 .eraseblocks = { {64 * 1024, 32} },
3732 .block_erase = spi_block_erase_d8,
3733 }, {
3734 .eraseblocks = { {2 * 1024 * 1024, 1} },
3735 .block_erase = spi_block_erase_60,
3736 }, {
3737 .eraseblocks = { {2 * 1024 * 1024, 1} },
3738 .block_erase = spi_block_erase_c7,
3739 },
3740 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003741 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003742 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003743 },
3744
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003745 {
3746 .vendor = "SST",
3747 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003748 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003749 .manufacture_id = SST_ID,
3750 .model_id = SST_25VF032B,
3751 .total_size = 4096,
3752 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003753 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003754 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003755 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003756 .block_erasers =
3757 {
3758 {
3759 .eraseblocks = { {4 * 1024, 1024} },
3760 .block_erase = spi_block_erase_20,
3761 }, {
3762 .eraseblocks = { {32 * 1024, 128} },
3763 .block_erase = spi_block_erase_52,
3764 }, {
3765 .eraseblocks = { {64 * 1024, 64} },
3766 .block_erase = spi_block_erase_d8,
3767 }, {
3768 .eraseblocks = { {4 * 1024 * 1024, 1} },
3769 .block_erase = spi_block_erase_60,
3770 }, {
3771 .eraseblocks = { {4 * 1024 * 1024, 1} },
3772 .block_erase = spi_block_erase_c7,
3773 },
3774 },
3775 .write = spi_chip_write_1,
3776 .read = spi_chip_read,
3777 },
3778
3779 {
3780 .vendor = "SST",
3781 .name = "SST25VF040.REMS",
3782 .bustype = CHIP_BUSTYPE_SPI,
3783 .manufacture_id = SST_ID,
3784 .model_id = SST_25VF040_REMS,
3785 .total_size = 512,
3786 .page_size = 256,
3787 .tested = TEST_OK_PR,
3788 .probe = probe_spi_rems,
3789 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003790 .block_erasers =
3791 {
3792 {
3793 .eraseblocks = { {4 * 1024, 128} },
3794 .block_erase = spi_block_erase_20,
3795 }, {
3796 .eraseblocks = { {32 * 1024, 16} },
3797 .block_erase = spi_block_erase_52,
3798 }, {
3799 .eraseblocks = { {512 * 1024, 1} },
3800 .block_erase = spi_block_erase_60,
3801 },
3802 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003803 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003804 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003805 },
3806
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003807 {
3808 .vendor = "SST",
3809 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003810 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003811 .manufacture_id = SST_ID,
3812 .model_id = SST_25VF040B,
3813 .total_size = 512,
3814 .page_size = 256,
3815 .tested = TEST_UNTESTED,
3816 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003817 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003818 .block_erasers =
3819 {
3820 {
3821 .eraseblocks = { {4 * 1024, 128} },
3822 .block_erase = spi_block_erase_20,
3823 }, {
3824 .eraseblocks = { {32 * 1024, 16} },
3825 .block_erase = spi_block_erase_52,
3826 }, {
3827 .eraseblocks = { {64 * 1024, 8} },
3828 .block_erase = spi_block_erase_d8,
3829 }, {
3830 .eraseblocks = { {512 * 1024, 1} },
3831 .block_erase = spi_block_erase_60,
3832 }, {
3833 .eraseblocks = { {512 * 1024, 1} },
3834 .block_erase = spi_block_erase_c7,
3835 },
3836 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003837 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003838 .read = spi_chip_read,
3839 },
3840
3841 {
3842 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003843 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003844 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003845 .manufacture_id = SST_ID,
3846 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003847 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003848 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003849 .tested = TEST_OK_PR,
3850 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003851 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003852 .block_erasers =
3853 {
3854 {
3855 .eraseblocks = { {4 * 1024, 128} },
3856 .block_erase = spi_block_erase_20,
3857 }, {
3858 .eraseblocks = { {32 * 1024, 16} },
3859 .block_erase = spi_block_erase_52,
3860 }, {
3861 .eraseblocks = { {64 * 1024, 8} },
3862 .block_erase = spi_block_erase_d8,
3863 }, {
3864 .eraseblocks = { {512 * 1024, 1} },
3865 .block_erase = spi_block_erase_60,
3866 }, {
3867 .eraseblocks = { {512 * 1024, 1} },
3868 .block_erase = spi_block_erase_c7,
3869 },
3870 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003871 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003872 .read = spi_chip_read,
3873 },
3874
3875 {
3876 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003877 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003878 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003879 .manufacture_id = SST_ID,
3880 .model_id = SST_25VF080B,
3881 .total_size = 1024,
3882 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003883 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003884 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003885 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003886 .block_erasers =
3887 {
3888 {
3889 .eraseblocks = { {4 * 1024, 256} },
3890 .block_erase = spi_block_erase_20,
3891 }, {
3892 .eraseblocks = { {32 * 1024, 32} },
3893 .block_erase = spi_block_erase_52,
3894 }, {
3895 .eraseblocks = { {64 * 1024, 16} },
3896 .block_erase = spi_block_erase_d8,
3897 }, {
3898 .eraseblocks = { {1024 * 1024, 1} },
3899 .block_erase = spi_block_erase_60,
3900 }, {
3901 .eraseblocks = { {1024 * 1024, 1} },
3902 .block_erase = spi_block_erase_c7,
3903 },
3904 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003905 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003906 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003907 },
3908
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003909 {
3910 .vendor = "SST",
3911 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003912 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003913 .manufacture_id = SST_ID,
3914 .model_id = SST_28SF040,
3915 .total_size = 512,
3916 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003917 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003918 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003919 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003920 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003921 .block_erasers =
3922 {
3923 {
3924 .eraseblocks = { {128, 4096} },
3925 .block_erase = erase_sector_28sf040,
3926 }, {
3927 .eraseblocks = { {512 * 1024, 1} },
3928 .block_erase = erase_chip_28sf040,
3929 }
3930 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003931 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003932 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003933 },
3934
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003935 {
3936 .vendor = "SST",
3937 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003938 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003939 .manufacture_id = SST_ID,
3940 .model_id = SST_29EE010,
3941 .total_size = 128,
3942 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003943 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003944 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003945 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003946 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003947 .block_erasers =
3948 {
3949 {
3950 .eraseblocks = { {128 * 1024, 1} },
3951 .block_erase = erase_chip_block_jedec,
3952 }
3953 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003954 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003955 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003956 },
3957
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003958 {
3959 .vendor = "SST",
3960 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003961 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003962 .manufacture_id = SST_ID,
3963 .model_id = SST_29LE010,
3964 .total_size = 128,
3965 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003966 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003967 .tested = TEST_UNTESTED,
3968 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003969 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003970 .block_erasers =
3971 {
3972 {
3973 .eraseblocks = { {128 * 1024, 1} },
3974 .block_erase = erase_chip_block_jedec,
3975 }
3976 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003977 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003978 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003979 },
3980
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003981 {
3982 .vendor = "SST",
3983 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003984 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003985 .manufacture_id = SST_ID,
3986 .model_id = SST_29EE020A,
3987 .total_size = 256,
3988 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003989 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00003990 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003991 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003992 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003993 .block_erasers =
3994 {
3995 {
3996 .eraseblocks = { {256 * 1024, 1} },
3997 .block_erase = erase_chip_block_jedec,
3998 }
3999 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004000 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004001 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004002 },
4003
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004004 {
4005 .vendor = "SST",
4006 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004007 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004008 .manufacture_id = SST_ID,
4009 .model_id = SST_29LE020,
4010 .total_size = 256,
4011 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004012 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00004013 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004014 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004015 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004016 .block_erasers =
4017 {
4018 {
4019 .eraseblocks = { {256 * 1024, 1} },
4020 .block_erase = erase_chip_block_jedec,
4021 }
4022 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004023 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004024 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004025 },
4026
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004027 {
4028 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00004029 .name = "SST39SF512",
4030 .bustype = CHIP_BUSTYPE_PARALLEL,
4031 .manufacture_id = SST_ID,
4032 .model_id = SST_39SF512,
4033 .total_size = 64,
4034 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004035 .feature_bits = FEATURE_EITHER_RESET,
4036 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004037 .probe = probe_jedec,
4038 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00004039 .block_erasers =
4040 {
4041 {
4042 .eraseblocks = { {4 * 1024, 16} },
4043 .block_erase = erase_sector_jedec,
4044 }, {
4045 .eraseblocks = { {64 * 1024, 1} },
4046 .block_erase = erase_chip_block_jedec,
4047 }
4048 },
Sean Nelson35727f72010-01-28 23:55:12 +00004049 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004050 .read = read_memmapped,
4051 },
4052
4053 {
4054 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004055 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004056 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004057 .manufacture_id = SST_ID,
4058 .model_id = SST_39SF010,
4059 .total_size = 128,
4060 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004061 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004062 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004063 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004064 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004065 .block_erasers =
4066 {
4067 {
4068 .eraseblocks = { {4 * 1024, 32} },
4069 .block_erase = erase_sector_jedec,
4070 }, {
4071 .eraseblocks = { {128 * 1024, 1} },
4072 .block_erase = erase_chip_block_jedec,
4073 }
4074 },
Sean Nelson35727f72010-01-28 23:55:12 +00004075 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004076 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004077 },
4078
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004079 {
4080 .vendor = "SST",
4081 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004082 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004083 .manufacture_id = SST_ID,
4084 .model_id = SST_39SF020,
4085 .total_size = 256,
4086 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004087 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004088 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004089 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004090 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004091 .block_erasers =
4092 {
4093 {
4094 .eraseblocks = { {4 * 1024, 64} },
4095 .block_erase = erase_sector_jedec,
4096 }, {
4097 .eraseblocks = { {256 * 1024, 1} },
4098 .block_erase = erase_chip_block_jedec,
4099 }
4100 },
Sean Nelson35727f72010-01-28 23:55:12 +00004101 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004102 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004103 },
4104
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004105 {
4106 .vendor = "SST",
4107 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004108 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004109 .manufacture_id = SST_ID,
4110 .model_id = SST_39SF040,
4111 .total_size = 512,
4112 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004113 .feature_bits = FEATURE_EITHER_RESET,
4114 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004115 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004116 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004117 .block_erasers =
4118 {
4119 {
4120 .eraseblocks = { {4 * 1024, 128} },
4121 .block_erase = erase_sector_jedec,
4122 }, {
4123 .eraseblocks = { {512 * 1024, 1} },
4124 .block_erase = erase_chip_block_jedec,
4125 }
4126 },
Sean Nelson35727f72010-01-28 23:55:12 +00004127 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004128 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004129 },
4130
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004131 {
4132 .vendor = "SST",
4133 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00004134 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004135 .manufacture_id = SST_ID,
4136 .model_id = SST_39VF512,
4137 .total_size = 64,
4138 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004139 .feature_bits = FEATURE_EITHER_RESET,
4140 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004141 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004142 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00004143 .block_erasers =
4144 {
4145 {
4146 .eraseblocks = { {4 * 1024, 16} },
4147 .block_erase = erase_sector_jedec,
4148 }, {
4149 .eraseblocks = { {64 * 1024, 1} },
4150 .block_erase = erase_chip_block_jedec,
4151 }
4152 },
Sean Nelson35727f72010-01-28 23:55:12 +00004153 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004154 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004155 },
4156
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004157 {
4158 .vendor = "SST",
4159 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004160 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004161 .manufacture_id = SST_ID,
4162 .model_id = SST_39VF010,
4163 .total_size = 128,
4164 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004165 .feature_bits = FEATURE_EITHER_RESET,
4166 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004167 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004168 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004169 .block_erasers =
4170 {
4171 {
4172 .eraseblocks = { {4 * 1024, 32} },
4173 .block_erase = erase_sector_jedec,
4174 }, {
4175 .eraseblocks = { {128 * 1024, 1} },
4176 .block_erase = erase_chip_block_jedec,
4177 }
4178 },
Sean Nelson35727f72010-01-28 23:55:12 +00004179 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004180 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004181 },
4182
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004183 {
4184 .vendor = "SST",
4185 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004186 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004187 .manufacture_id = SST_ID,
4188 .model_id = SST_39VF020,
4189 .total_size = 256,
4190 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004191 .feature_bits = FEATURE_EITHER_RESET,
4192 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004193 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004194 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004195 .block_erasers =
4196 {
4197 {
4198 .eraseblocks = { {4 * 1024, 64} },
4199 .block_erase = erase_sector_jedec,
4200 }, {
4201 .eraseblocks = { {256 * 1024, 1} },
4202 .block_erase = erase_chip_block_jedec,
4203 }
4204 },
Sean Nelson35727f72010-01-28 23:55:12 +00004205 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004206 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004207 },
4208
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004209 {
4210 .vendor = "SST",
4211 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004212 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004213 .manufacture_id = SST_ID,
4214 .model_id = SST_39VF040,
4215 .total_size = 512,
4216 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004217 .feature_bits = FEATURE_EITHER_RESET,
4218 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004219 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004220 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004221 .block_erasers =
4222 {
4223 {
4224 .eraseblocks = { {4 * 1024, 128} },
4225 .block_erase = erase_sector_jedec,
4226 }, {
4227 .eraseblocks = { {512 * 1024, 1} },
4228 .block_erase = erase_chip_block_jedec,
4229 }
4230 },
Sean Nelson35727f72010-01-28 23:55:12 +00004231 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004232 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004233 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004234
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004235 {
4236 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004237 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004238 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004239 .manufacture_id = SST_ID,
4240 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004241 .total_size = 1024,
4242 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004243 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004244 .tested = TEST_UNTESTED,
4245 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004246 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004247 .block_erasers =
4248 {
4249 {
4250 .eraseblocks = { {4 * 1024, 256} },
4251 .block_erase = erase_sector_jedec,
4252 }, {
4253 .eraseblocks = { {64 * 1024, 16} },
4254 .block_erase = erase_block_jedec,
4255 }, {
4256 .eraseblocks = { {1024 * 1024, 1} },
4257 .block_erase = erase_chip_block_jedec,
4258 }
4259 },
Sean Nelson35727f72010-01-28 23:55:12 +00004260 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004261 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004262 },
4263
4264 {
4265 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004266 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004267 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004268 .manufacture_id = SST_ID,
4269 .model_id = SST_49LF002A,
4270 .total_size = 256,
4271 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004272 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004273 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004274 .probe = probe_jedec,
4275 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004276 .block_erasers =
4277 {
4278 {
4279 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004280 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004281 }, {
4282 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004283 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004284 }, {
4285 .eraseblocks = { {256 * 1024, 1} },
4286 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4287 }
4288 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004289 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004290 .unlock = unlock_sst_fwhub,
4291 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004292 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004293 },
4294
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004295 {
4296 .vendor = "SST",
4297 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004298 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004299 .manufacture_id = SST_ID,
4300 .model_id = SST_49LF003A,
4301 .total_size = 384,
4302 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004303 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004304 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004305 .probe = probe_jedec,
4306 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004307 .block_erasers =
4308 {
4309 {
4310 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004311 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004312 }, {
4313 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004314 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004315 }, {
4316 .eraseblocks = { {384 * 1024, 1} },
4317 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4318 }
4319 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004320 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004321 .unlock = unlock_sst_fwhub,
4322 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004323 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004324 },
4325
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004326 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004327 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4328 * and is only honored for 64k block erase, but not 4k sector erase.
4329 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004330 .vendor = "SST",
4331 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004332 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004333 .manufacture_id = SST_ID,
4334 .model_id = SST_49LF004A,
4335 .total_size = 512,
4336 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004337 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004338 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004339 .probe = probe_jedec,
4340 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004341 .block_erasers =
4342 {
4343 {
4344 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004345 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004346 }, {
4347 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004348 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004349 }, {
4350 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004351 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004352 },
4353 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004354 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004355 .unlock = unlock_sst_fwhub,
4356 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004357 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004358 },
4359
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004360 {
4361 .vendor = "SST",
4362 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004363 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004364 .manufacture_id = SST_ID,
4365 .model_id = SST_49LF004C,
4366 .total_size = 512,
4367 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004368 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004369 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004370 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004371 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004372 .block_erasers =
4373 {
4374 {
4375 .eraseblocks = { {4 * 1024, 128} },
4376 .block_erase = erase_sector_49lfxxxc,
4377 }, {
4378 .eraseblocks = {
4379 {64 * 1024, 7},
4380 {32 * 1024, 1},
4381 {8 * 1024, 2},
4382 {16 * 1024, 1},
4383 },
Sean Nelson69e58112010-03-23 17:10:28 +00004384 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004385 }
4386 },
Sean Nelson69e58112010-03-23 17:10:28 +00004387 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004388 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004389 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004390 },
4391
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004392 {
4393 .vendor = "SST",
4394 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004395 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004396 .manufacture_id = SST_ID,
4397 .model_id = SST_49LF008A,
4398 .total_size = 1024,
4399 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004400 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004401 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004402 .probe = probe_jedec,
4403 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004404 .block_erasers =
4405 {
4406 {
4407 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004408 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004409 }, {
4410 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004411 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004412 }, {
4413 .eraseblocks = { {1024 * 1024, 1} },
4414 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4415 }
4416 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004417 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004418 .unlock = unlock_sst_fwhub,
4419 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004420 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004421 },
4422
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004423 {
4424 .vendor = "SST",
4425 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004426 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004427 .manufacture_id = SST_ID,
4428 .model_id = SST_49LF008C,
4429 .total_size = 1024,
4430 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004431 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004432 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004433 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004434 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004435 .block_erasers =
4436 {
4437 {
4438 .eraseblocks = { {4 * 1024, 256} },
4439 .block_erase = erase_sector_49lfxxxc,
4440 }, {
4441 .eraseblocks = {
4442 {64 * 1024, 15},
4443 {32 * 1024, 1},
4444 {8 * 1024, 2},
4445 {16 * 1024, 1},
4446 },
Sean Nelson69e58112010-03-23 17:10:28 +00004447 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004448 }
4449 },
Sean Nelson69e58112010-03-23 17:10:28 +00004450 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004451 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004452 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004453 },
4454
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004455 {
4456 .vendor = "SST",
4457 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004458 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004459 .manufacture_id = SST_ID,
4460 .model_id = SST_49LF016C,
4461 .total_size = 2048,
4462 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004463 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004464 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004465 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004466 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004467 .block_erasers =
4468 {
4469 {
4470 .eraseblocks = { {4 * 1024, 512} },
4471 .block_erase = erase_sector_49lfxxxc,
4472 }, {
4473 .eraseblocks = {
4474 {64 * 1024, 31},
4475 {32 * 1024, 1},
4476 {8 * 1024, 2},
4477 {16 * 1024, 1},
4478 },
Sean Nelson69e58112010-03-23 17:10:28 +00004479 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004480 }
4481 },
Sean Nelson69e58112010-03-23 17:10:28 +00004482 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004483 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004484 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004485 },
4486
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004487 {
4488 .vendor = "SST",
4489 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004490 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004491 .manufacture_id = SST_ID,
4492 .model_id = SST_49LF020,
4493 .total_size = 256,
4494 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004495 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004496 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004497 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004498 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004499 .block_erasers =
4500 {
4501 {
4502 .eraseblocks = { {4 * 1024, 64} },
4503 .block_erase = erase_sector_jedec,
4504 }, {
4505 .eraseblocks = { {16 * 1024, 16} },
4506 .block_erase = erase_block_jedec,
4507 }, {
4508 .eraseblocks = { {256 * 1024, 1} },
4509 .block_erase = NULL,
4510 }
4511 },
Sean Nelson35727f72010-01-28 23:55:12 +00004512 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004513 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004514 },
4515
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004516 {
4517 .vendor = "SST",
4518 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004519 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004520 .manufacture_id = SST_ID,
4521 .model_id = SST_49LF020A,
4522 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004523 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004524 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004525 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004526 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004527 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004528 .block_erasers =
4529 {
4530 {
4531 .eraseblocks = { {4 * 1024, 64} },
4532 .block_erase = erase_sector_jedec,
4533 }, {
4534 .eraseblocks = { {16 * 1024, 16} },
4535 .block_erase = erase_block_jedec,
4536 }, {
4537 .eraseblocks = { {256 * 1024, 1} },
4538 .block_erase = NULL,
4539 }
4540 },
Sean Nelson35727f72010-01-28 23:55:12 +00004541 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004542 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004543 },
4544
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004545 {
4546 .vendor = "SST",
4547 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004548 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004549 .manufacture_id = SST_ID,
4550 .model_id = SST_49LF040,
4551 .total_size = 512,
4552 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004553 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004554 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004555 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004556 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004557 .block_erasers =
4558 {
4559 {
4560 .eraseblocks = { {4 * 1024, 128} },
4561 .block_erase = erase_sector_jedec,
4562 }, {
4563 .eraseblocks = { {64 * 1024, 8} },
4564 .block_erase = erase_block_jedec,
4565 }, {
4566 .eraseblocks = { {512 * 1024, 1} },
4567 .block_erase = NULL,
4568 }
4569 },
Sean Nelson35727f72010-01-28 23:55:12 +00004570 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004571 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004572 },
4573
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004574 {
4575 .vendor = "SST",
4576 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004577 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004578 .manufacture_id = SST_ID,
4579 .model_id = SST_49LF040B,
4580 .total_size = 512,
4581 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004582 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004583 .tested = TEST_OK_PR,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004584 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004585 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004586 .block_erasers =
4587 {
4588 {
4589 .eraseblocks = { {4 * 1024, 128} },
4590 .block_erase = erase_sector_jedec,
4591 }, {
4592 .eraseblocks = { {64 * 1024, 8} },
4593 .block_erase = erase_block_jedec,
4594 }, {
4595 .eraseblocks = { {512 * 1024, 1} },
4596 .block_erase = NULL,
4597 }
4598 },
Sean Nelson35727f72010-01-28 23:55:12 +00004599 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004600 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004601 },
4602
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004603 {
4604 .vendor = "SST",
4605 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004606 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004607 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004608 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004609 .total_size = 1024,
4610 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004611 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004612 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004613 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004614 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004615 .block_erasers =
4616 {
4617 {
4618 .eraseblocks = { {4 * 1024, 256} },
4619 .block_erase = erase_sector_jedec,
4620 }, {
4621 .eraseblocks = { {64 * 1024, 16} },
4622 .block_erase = erase_block_jedec,
4623 }, {
4624 .eraseblocks = { {1024 * 1024, 1} },
4625 .block_erase = NULL,
4626 }
4627 },
Sean Nelson35727f72010-01-28 23:55:12 +00004628 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004629 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004630 },
4631
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004632 {
4633 .vendor = "SST",
4634 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004635 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004636 .manufacture_id = SST_ID,
4637 .model_id = SST_49LF160C,
4638 .total_size = 2048,
4639 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004640 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004641 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004642 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004643 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004644 .block_erasers =
4645 {
4646 {
4647 .eraseblocks = { {4 * 1024, 512} },
4648 .block_erase = erase_sector_49lfxxxc,
4649 }, {
4650 .eraseblocks = {
4651 {64 * 1024, 31},
4652 {32 * 1024, 1},
4653 {8 * 1024, 2},
4654 {16 * 1024, 1},
4655 },
Sean Nelson69e58112010-03-23 17:10:28 +00004656 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004657 }
4658 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004659 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004660 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004661 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004662 },
4663
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004664 {
4665 .vendor = "ST",
4666 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004667 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004668 .manufacture_id = ST_ID,
4669 .model_id = ST_M25P05A,
4670 .total_size = 64,
4671 .page_size = 256,
4672 .tested = TEST_UNTESTED,
4673 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004674 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004675 .block_erasers =
4676 {
4677 {
4678 .eraseblocks = { {32 * 1024, 2} },
4679 .block_erase = spi_block_erase_d8,
4680 }, {
4681 .eraseblocks = { {64 * 1024, 1} },
4682 .block_erase = spi_block_erase_c7,
4683 }
4684 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004685 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004686 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004687 },
4688
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004689 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4690 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004691 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004692 * only is successful if RDID does not work.
4693 */
4694 {
4695 .vendor = "ST",
4696 .name = "M25P05.RES",
4697 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004698 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004699 .model_id = ST_M25P05_RES,
4700 .total_size = 64,
4701 .page_size = 256,
4702 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004703 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004704 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004705 .block_erasers =
4706 {
4707 {
4708 .eraseblocks = { {32 * 1024, 2} },
4709 .block_erase = spi_block_erase_d8,
4710 }, {
4711 .eraseblocks = { {64 * 1024, 1} },
4712 .block_erase = spi_block_erase_c7,
4713 }
4714 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004715 .write = spi_chip_write_1, /* 128 */
4716 .read = spi_chip_read,
4717 },
4718
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004719 {
4720 .vendor = "ST",
4721 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004722 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004723 .manufacture_id = ST_ID,
4724 .model_id = ST_M25P10A,
4725 .total_size = 128,
4726 .page_size = 256,
4727 .tested = TEST_UNTESTED,
4728 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004729 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004730 .block_erasers =
4731 {
4732 {
4733 .eraseblocks = { {32 * 1024, 4} },
4734 .block_erase = spi_block_erase_d8,
4735 }, {
4736 .eraseblocks = { {128 * 1024, 1} },
4737 .block_erase = spi_block_erase_c7,
4738 }
4739 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004740 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004741 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004742 },
4743
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004744 /* The ST M25P10 has the same problem as the M25P05. */
4745 {
4746 .vendor = "ST",
4747 .name = "M25P10.RES",
4748 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004749 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004750 .model_id = ST_M25P10_RES,
4751 .total_size = 128,
4752 .page_size = 256,
4753 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004754 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004755 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004756 .block_erasers =
4757 {
4758 {
4759 .eraseblocks = { {32 * 1024, 4} },
4760 .block_erase = spi_block_erase_d8,
4761 }, {
4762 .eraseblocks = { {128 * 1024, 1} },
4763 .block_erase = spi_block_erase_c7,
4764 }
4765 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004766 .write = spi_chip_write_1, /* 128 */
4767 .read = spi_chip_read,
4768 },
4769
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004770 {
4771 .vendor = "ST",
4772 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004773 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004774 .manufacture_id = ST_ID,
4775 .model_id = ST_M25P20,
4776 .total_size = 256,
4777 .page_size = 256,
4778 .tested = TEST_UNTESTED,
4779 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004780 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004781 .block_erasers =
4782 {
4783 {
4784 .eraseblocks = { {64 * 1024, 4} },
4785 .block_erase = spi_block_erase_d8,
4786 }, {
4787 .eraseblocks = { {256 * 1024, 1} },
4788 .block_erase = spi_block_erase_c7,
4789 }
4790 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004791 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004792 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004793 },
4794
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004795 {
4796 .vendor = "ST",
4797 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004798 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004799 .manufacture_id = ST_ID,
4800 .model_id = ST_M25P40,
4801 .total_size = 512,
4802 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004803 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004804 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004805 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004806 .block_erasers =
4807 {
4808 {
4809 .eraseblocks = { {64 * 1024, 8} },
4810 .block_erase = spi_block_erase_d8,
4811 }, {
4812 .eraseblocks = { {512 * 1024, 1} },
4813 .block_erase = spi_block_erase_c7,
4814 }
4815 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004816 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004817 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004818 },
4819
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004820 {
4821 .vendor = "ST",
4822 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004823 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004824 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004825 .model_id = ST_M25P40_RES,
4826 .total_size = 512,
4827 .page_size = 256,
4828 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004829 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004830 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004831 .block_erasers =
4832 {
4833 {
4834 .eraseblocks = { {64 * 1024, 8} },
4835 .block_erase = spi_block_erase_d8,
4836 }, {
4837 .eraseblocks = { {512 * 1024, 1} },
4838 .block_erase = spi_block_erase_c7,
4839 }
4840 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004841 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004842 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004843 },
4844
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004845 {
4846 .vendor = "ST",
4847 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004848 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004849 .manufacture_id = ST_ID,
4850 .model_id = ST_M25P80,
4851 .total_size = 1024,
4852 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004853 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004854 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004855 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004856 .block_erasers =
4857 {
4858 {
4859 .eraseblocks = { {64 * 1024, 16} },
4860 .block_erase = spi_block_erase_d8,
4861 }, {
4862 .eraseblocks = { {1024 * 1024, 1} },
4863 .block_erase = spi_block_erase_c7,
4864 }
4865 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004866 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004867 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004868 },
4869
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004870 {
4871 .vendor = "ST",
4872 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004873 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004874 .manufacture_id = ST_ID,
4875 .model_id = ST_M25P16,
4876 .total_size = 2048,
4877 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004878 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004879 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004880 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004881 .block_erasers =
4882 {
4883 {
4884 .eraseblocks = { {64 * 1024, 32} },
4885 .block_erase = spi_block_erase_d8,
4886 }, {
4887 .eraseblocks = { {2 * 1024 * 1024, 1} },
4888 .block_erase = spi_block_erase_c7,
4889 }
4890 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004891 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004892 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004893 },
4894
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004895 {
4896 .vendor = "ST",
4897 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004898 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004899 .manufacture_id = ST_ID,
4900 .model_id = ST_M25P32,
4901 .total_size = 4096,
4902 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004903 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004904 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004905 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004906 .block_erasers =
4907 {
4908 {
4909 .eraseblocks = { {64 * 1024, 64} },
4910 .block_erase = spi_block_erase_d8,
4911 }, {
4912 .eraseblocks = { {4 * 1024 * 1024, 1} },
4913 .block_erase = spi_block_erase_c7,
4914 }
4915 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004916 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004917 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004918 },
4919
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004920 {
4921 .vendor = "ST",
4922 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004923 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004924 .manufacture_id = ST_ID,
4925 .model_id = ST_M25P64,
4926 .total_size = 8192,
4927 .page_size = 256,
4928 .tested = TEST_UNTESTED,
4929 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004930 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004931 .block_erasers =
4932 {
4933 {
4934 .eraseblocks = { {64 * 1024, 128} },
4935 .block_erase = spi_block_erase_d8,
4936 }, {
4937 .eraseblocks = { {8 * 1024 * 1024, 1} },
4938 .block_erase = spi_block_erase_c7,
4939 }
4940 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004941 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004942 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004943 },
4944
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004945 {
4946 .vendor = "ST",
4947 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004948 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004949 .manufacture_id = ST_ID,
4950 .model_id = ST_M25P128,
4951 .total_size = 16384,
4952 .page_size = 256,
4953 .tested = TEST_UNTESTED,
4954 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004955 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004956 .block_erasers =
4957 {
4958 {
4959 .eraseblocks = { {256 * 1024, 64} },
4960 .block_erase = spi_block_erase_d8,
4961 }, {
4962 .eraseblocks = { {16 * 1024 * 1024, 1} },
4963 .block_erase = spi_block_erase_c7,
4964 }
4965 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004966 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004967 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004968 },
4969
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004970 {
4971 .vendor = "ST",
4972 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004973 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004974 .manufacture_id = ST_ID,
4975 .model_id = ST_M29F002B,
4976 .total_size = 256,
4977 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004978 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004979 .tested = TEST_UNTESTED,
4980 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004981 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004982 .block_erasers =
4983 {
4984 {
4985 .eraseblocks = {
4986 {16 * 1024, 1},
4987 {8 * 1024, 2},
4988 {32 * 1024, 1},
4989 {64 * 1024, 3},
4990 },
4991 .block_erase = erase_sector_jedec,
4992 }, {
4993 .eraseblocks = { {256 * 1024, 1} },
4994 .block_erase = erase_chip_block_jedec,
4995 }
4996 },
Sean Nelson35727f72010-01-28 23:55:12 +00004997 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004998 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004999 },
5000
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005001 {
5002 .vendor = "ST",
5003 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005004 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005005 .manufacture_id = ST_ID,
5006 .model_id = ST_M29F002T,
5007 .total_size = 256,
5008 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005009 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
5010 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005011 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005012 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005013 .block_erasers =
5014 {
5015 {
5016 .eraseblocks = {
5017 {64 * 1024, 3},
5018 {32 * 1024, 1},
5019 {8 * 1024, 2},
5020 {16 * 1024, 1},
5021 },
5022 .block_erase = erase_sector_jedec,
5023 }, {
5024 .eraseblocks = { {256 * 1024, 1} },
5025 .block_erase = erase_chip_block_jedec,
5026 }
5027 },
Sean Nelson35727f72010-01-28 23:55:12 +00005028 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005029 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005030 },
5031
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005032 {
5033 .vendor = "ST",
5034 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005035 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005036 .manufacture_id = ST_ID,
5037 .model_id = ST_M29F040B,
5038 .total_size = 512,
5039 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005040 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5041 .tested = TEST_UNTESTED,
5042 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005043 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005044 .block_erasers =
5045 {
5046 {
5047 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00005048 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005049 }, {
5050 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005051 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005052 }
5053 },
Sean Nelson35727f72010-01-28 23:55:12 +00005054 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005055 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005056 },
5057
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005058 {
Sean Nelson35727f72010-01-28 23:55:12 +00005059 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005060 .vendor = "ST",
5061 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005062 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005063 .manufacture_id = ST_ID,
5064 .model_id = ST_M29F400BT,
5065 .total_size = 512,
5066 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005067 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005068 .tested = TEST_UNTESTED,
5069 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005070 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005071 .block_erasers =
5072 {
5073 {
5074 .eraseblocks = {
5075 {64 * 1024, 7},
5076 {32 * 1024, 1},
5077 {8 * 1024, 2},
5078 {16 * 1024, 1},
5079 },
5080 .block_erase = block_erase_m29f400bt,
5081 }, {
5082 .eraseblocks = { {512 * 1024, 1} },
5083 .block_erase = block_erase_chip_m29f400bt,
5084 }
5085 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005086 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005087 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005088 },
5089
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005090 {
5091 .vendor = "ST",
5092 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005093 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005094 .manufacture_id = ST_ID,
5095 .model_id = ST_M29W010B,
5096 .total_size = 128,
5097 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005098 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005099 .tested = TEST_UNTESTED,
5100 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005101 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005102 .block_erasers =
5103 {
5104 {
5105 .eraseblocks = { {16 * 1024, 8}, },
5106 .block_erase = erase_sector_jedec,
5107 }, {
5108 .eraseblocks = { {128 * 1024, 1} },
5109 .block_erase = erase_chip_block_jedec,
5110 }
5111 },
Sean Nelson35727f72010-01-28 23:55:12 +00005112 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005113 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005114 },
5115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005116 {
5117 .vendor = "ST",
5118 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005119 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005120 .manufacture_id = ST_ID,
5121 .model_id = ST_M29W040B,
5122 .total_size = 512,
5123 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005124 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005125 .tested = TEST_UNTESTED,
5126 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005127 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005128 .block_erasers =
5129 {
5130 {
5131 .eraseblocks = { {64 * 1024, 8}, },
5132 .block_erase = erase_sector_jedec,
5133 }, {
5134 .eraseblocks = { {512 * 1024, 1} },
5135 .block_erase = erase_chip_block_jedec,
5136 }
5137 },
Sean Nelson35727f72010-01-28 23:55:12 +00005138 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005139 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005140 },
5141
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005142 {
5143 .vendor = "ST",
5144 .name = "M29W512B",
5145 .bustype = CHIP_BUSTYPE_PARALLEL,
5146 .manufacture_id = ST_ID,
5147 .model_id = ST_M29W512B,
5148 .total_size = 64,
5149 .page_size = 64 * 1024,
5150 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5151 .tested = TEST_OK_PREW,
5152 .probe = probe_jedec,
5153 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005154 .block_erasers =
5155 {
5156 {
5157 .eraseblocks = { {64 * 1024, 1} },
5158 .block_erase = erase_chip_block_jedec,
5159 }
5160 },
5161 .write = write_jedec_1,
5162 .read = read_memmapped,
5163 },
5164
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005165 {
5166 .vendor = "ST",
5167 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00005168 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005169 .manufacture_id = ST_ID,
5170 .model_id = ST_M50FLW040A,
5171 .total_size = 512,
5172 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005173 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005174 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005175 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005176 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005177 .block_erasers =
5178 {
5179 {
Sean Nelson329bde72010-01-19 16:39:19 +00005180 .eraseblocks = {
5181 {4 * 1024, 16}, /* sector */
5182 {64 * 1024, 5}, /* block */
5183 {4 * 1024, 16}, /* sector */
5184 {4 * 1024, 16}, /* sector */
5185 },
5186 .block_erase = NULL,
5187 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005188 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005189 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005190 }, {
5191 .eraseblocks = { {512 * 1024, 1} },
5192 .block_erase = erase_chip_stm50flw0x0x,
5193 }
5194 },
Sean Nelson28accc22010-03-19 18:47:06 +00005195 .unlock = unlock_stm50flw0x0x,
5196 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005197 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005198 },
5199
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005200 {
5201 .vendor = "ST",
5202 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005203 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005204 .manufacture_id = ST_ID,
5205 .model_id = ST_M50FLW040B,
5206 .total_size = 512,
5207 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005208 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005209 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005210 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005211 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005212 .block_erasers =
5213 {
5214 {
Sean Nelson329bde72010-01-19 16:39:19 +00005215 .eraseblocks = {
5216 {4 * 1024, 16}, /* sector */
5217 {4 * 1024, 16}, /* sector */
5218 {64 * 1024, 5}, /* block */
5219 {4 * 1024, 16}, /* sector */
5220 },
5221 .block_erase = NULL,
5222 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005223 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005224 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005225 }, {
5226 .eraseblocks = { {512 * 1024, 1} },
5227 .block_erase = erase_chip_stm50flw0x0x,
5228 }
5229 },
Sean Nelson28accc22010-03-19 18:47:06 +00005230 .unlock = unlock_stm50flw0x0x,
5231 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005232 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005233 },
5234
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005235 {
5236 .vendor = "ST",
5237 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005238 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005239 .manufacture_id = ST_ID,
5240 .model_id = ST_M50FLW080A,
5241 .total_size = 1024,
5242 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005243 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00005244 .tested = TEST_UNTESTED,
5245 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005246 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005247 .block_erasers =
5248 {
5249 {
Sean Nelson329bde72010-01-19 16:39:19 +00005250 .eraseblocks = {
5251 {4 * 1024, 16}, /* sector */
5252 {64 * 1024, 13}, /* block */
5253 {4 * 1024, 16}, /* sector */
5254 {4 * 1024, 16}, /* sector */
5255 },
5256 .block_erase = NULL,
5257 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005258 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005259 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005260 }, {
5261 .eraseblocks = { {1024 * 1024, 1} },
5262 .block_erase = erase_chip_stm50flw0x0x,
5263 }
5264 },
Sean Nelson28accc22010-03-19 18:47:06 +00005265 .unlock = unlock_stm50flw0x0x,
5266 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005267 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005268 },
5269
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005270 {
5271 .vendor = "ST",
5272 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005273 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005274 .manufacture_id = ST_ID,
5275 .model_id = ST_M50FLW080B,
5276 .total_size = 1024,
5277 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005278 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005279 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005280 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005281 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005282 .block_erasers =
5283 {
5284 {
Sean Nelson329bde72010-01-19 16:39:19 +00005285 .eraseblocks = {
5286 {4 * 1024, 16}, /* sector */
5287 {4 * 1024, 16}, /* sector */
5288 {64 * 1024, 13}, /* block */
5289 {4 * 1024, 16}, /* sector */
5290 },
5291 .block_erase = NULL,
5292 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005293 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005294 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005295 }, {
5296 .eraseblocks = { {1024 * 1024, 1} },
5297 .block_erase = erase_chip_stm50flw0x0x,
5298 }
5299 },
Sean Nelson28accc22010-03-19 18:47:06 +00005300 .unlock = unlock_stm50flw0x0x,
5301 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005302 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005303 },
5304
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005305 {
5306 .vendor = "ST",
5307 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005308 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005309 .manufacture_id = ST_ID,
5310 .model_id = ST_M50FW002,
5311 .total_size = 256,
5312 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005313 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005314 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005315 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005316 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005317 .block_erasers =
5318 {
5319 {
5320 .eraseblocks = {
5321 {64 * 1024, 3},
5322 {32 * 1024, 1},
5323 {8 * 1024, 2},
5324 {16 * 1024, 1},
5325 },
Sean Nelson28accc22010-03-19 18:47:06 +00005326 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005327 }, {
5328 .eraseblocks = { {256 * 1024, 1} },
5329 .block_erase = erase_chip_stm50flw0x0x,
5330 }
5331 },
Sean Nelson28accc22010-03-19 18:47:06 +00005332 .unlock = unlock_stm50flw0x0x,
5333 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005334 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005335 },
5336
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005337 {
5338 .vendor = "ST",
5339 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005340 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005341 .manufacture_id = ST_ID,
5342 .model_id = ST_M50FW016,
5343 .total_size = 2048,
5344 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005345 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005346 .tested = TEST_UNTESTED,
5347 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005348 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005349 .block_erasers =
5350 {
5351 {
5352 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005353 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005354 }, {
5355 .eraseblocks = { {2 * 1024 * 1024, 1} },
5356 .block_erase = erase_chip_stm50flw0x0x,
5357 }
5358 },
Sean Nelson28accc22010-03-19 18:47:06 +00005359 .unlock = unlock_stm50flw0x0x,
5360 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005361 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005362 },
5363
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005364 {
5365 .vendor = "ST",
5366 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005367 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005368 .manufacture_id = ST_ID,
5369 .model_id = ST_M50FW040,
5370 .total_size = 512,
5371 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005372 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005373 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005374 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005375 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005376 .block_erasers =
5377 {
5378 {
5379 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005380 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005381 }, {
5382 .eraseblocks = { {512 * 1024, 1} },
5383 .block_erase = erase_chip_stm50flw0x0x,
5384 }
5385 },
Sean Nelson28accc22010-03-19 18:47:06 +00005386 .unlock = unlock_stm50flw0x0x,
5387 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005388 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005389 },
5390
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005391 {
5392 .vendor = "ST",
5393 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005394 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005395 .manufacture_id = ST_ID,
5396 .model_id = ST_M50FW080,
5397 .total_size = 1024,
5398 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005399 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005400 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005401 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005402 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005403 .block_erasers =
5404 {
5405 {
5406 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005407 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005408 }, {
5409 .eraseblocks = { {1024 * 1024, 1} },
5410 .block_erase = erase_chip_stm50flw0x0x,
5411 }
5412 },
Sean Nelson28accc22010-03-19 18:47:06 +00005413 .unlock = unlock_stm50flw0x0x,
5414 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005415 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005416 },
5417
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005418 {
5419 .vendor = "ST",
5420 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005421 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005422 .manufacture_id = ST_ID,
5423 .model_id = ST_M50LPW116,
5424 .total_size = 2048,
5425 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005426 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005427 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005428 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005429 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005430 .block_erasers =
5431 {
5432 {
5433 .eraseblocks = {
5434 {4 * 1024, 16},
5435 {64 * 1024, 30},
5436 {32 * 1024, 1},
5437 {8 * 1024, 2},
5438 {16 * 1024, 1},
5439 },
Sean Nelson28accc22010-03-19 18:47:06 +00005440 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005441 }, {
5442 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005443 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005444 }
5445 },
Sean Nelson28accc22010-03-19 18:47:06 +00005446 .unlock = unlock_stm50flw0x0x,
5447 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005448 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005449 },
5450
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005451 {
5452 .vendor = "SyncMOS",
5453 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005454 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005455 .manufacture_id = SYNCMOS_ID,
5456 .model_id = S29C31004T,
5457 .total_size = 512,
5458 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005459 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005460 .tested = TEST_UNTESTED,
5461 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005462 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005463 .block_erasers =
5464 {
5465 {
5466 .eraseblocks = { {1 * 1024, 512} },
5467 .block_erase = erase_sector_jedec,
5468 }, {
5469 .eraseblocks = { {512 * 1024, 1} },
5470 .block_erase = erase_chip_block_jedec,
5471 },
5472 },
Sean Nelson35727f72010-01-28 23:55:12 +00005473 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005474 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005475 },
5476
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005477 {
5478 .vendor = "SyncMOS",
5479 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005480 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005481 .manufacture_id = SYNCMOS_ID,
5482 .model_id = S29C51001T,
5483 .total_size = 128,
5484 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005485 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005486 .tested = TEST_UNTESTED,
5487 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005488 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005489 .block_erasers =
5490 {
5491 {
5492 .eraseblocks = { {512, 256} },
5493 .block_erase = erase_sector_jedec,
5494 }, {
5495 .eraseblocks = { {128 * 1024, 1} },
5496 .block_erase = erase_chip_block_jedec,
5497 },
5498 },
Sean Nelson35727f72010-01-28 23:55:12 +00005499 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005500 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005501 },
5502
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005503 {
5504 .vendor = "SyncMOS",
5505 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005506 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005507 .manufacture_id = SYNCMOS_ID,
5508 .model_id = S29C51002T,
5509 .total_size = 256,
5510 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005511 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005512 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005513 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005514 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005515 .block_erasers =
5516 {
5517 {
5518 .eraseblocks = { {512, 512} },
5519 .block_erase = erase_sector_jedec,
5520 }, {
5521 .eraseblocks = { {256 * 1024, 1} },
5522 .block_erase = erase_chip_block_jedec,
5523 },
5524 },
Sean Nelson35727f72010-01-28 23:55:12 +00005525 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005526 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005527 },
5528
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005529 {
5530 .vendor = "SyncMOS",
5531 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005532 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005533 .manufacture_id = SYNCMOS_ID,
5534 .model_id = S29C51004T,
5535 .total_size = 512,
5536 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005537 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005538 .tested = TEST_UNTESTED,
5539 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005540 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005541 .block_erasers =
5542 {
5543 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005544 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005545 .block_erase = erase_sector_jedec,
5546 }, {
5547 .eraseblocks = { {512 * 1024, 1} },
5548 .block_erase = erase_chip_block_jedec,
5549 },
5550 },
Sean Nelson35727f72010-01-28 23:55:12 +00005551 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005552 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005553 },
5554
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005555 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005556 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005557 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005558 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005559 .manufacture_id = TI_OLD_ID,
5560 .model_id = TI_TMS29F002RB,
5561 .total_size = 256,
5562 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005563 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005564 .tested = TEST_UNTESTED,
5565 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005566 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005567 .block_erasers =
5568 {
5569 {
5570 .eraseblocks = {
5571 {16 * 1024, 1},
5572 {8 * 1024, 2},
5573 {32 * 1024, 1},
5574 {64 * 1024, 3},
5575 },
5576 .block_erase = erase_sector_jedec,
5577 }, {
5578 .eraseblocks = { {256 * 1024, 1} },
5579 .block_erase = erase_chip_block_jedec,
5580 },
5581 },
Sean Nelson35727f72010-01-28 23:55:12 +00005582 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005583 .read = read_memmapped,
5584 },
5585
5586 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005587 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005588 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005589 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005590 .manufacture_id = TI_OLD_ID,
5591 .model_id = TI_TMS29F002RT,
5592 .total_size = 256,
5593 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005594 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005595 .tested = TEST_UNTESTED,
5596 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005597 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005598 .block_erasers =
5599 {
5600 {
5601 .eraseblocks = {
5602 {64 * 1024, 3},
5603 {32 * 1024, 1},
5604 {8 * 1024, 2},
5605 {16 * 1024, 1},
5606 },
5607 .block_erase = erase_sector_jedec,
5608 }, {
5609 .eraseblocks = { {256 * 1024, 1} },
5610 .block_erase = erase_chip_block_jedec,
5611 },
5612 },
Sean Nelson35727f72010-01-28 23:55:12 +00005613 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005614 .read = read_memmapped,
5615 },
5616
5617 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005618 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00005619 .name = "W25Q80",
5620 .bustype = CHIP_BUSTYPE_SPI,
5621 .manufacture_id = WINBOND_NEX_ID,
5622 .model_id = W_25Q80,
5623 .total_size = 1024,
5624 .page_size = 256,
5625 .tested = TEST_UNTESTED,
5626 .probe = probe_spi_rdid,
5627 .probe_timing = TIMING_ZERO,
5628 .block_erasers =
5629 {
5630 {
5631 .eraseblocks = { {4 * 1024, 256} },
5632 .block_erase = spi_block_erase_20,
5633 }, {
5634 .eraseblocks = { {32 * 1024, 32} },
5635 .block_erase = spi_block_erase_52,
5636 }, {
5637 .eraseblocks = { {64 * 1024, 16} },
5638 .block_erase = spi_block_erase_d8,
5639 }, {
5640 .eraseblocks = { {1024 * 1024, 1} },
5641 .block_erase = spi_block_erase_60,
5642 }, {
5643 .eraseblocks = { {1024 * 1024, 1} },
5644 .block_erase = spi_block_erase_c7,
5645 }
5646 },
5647 .write = spi_chip_write_256,
5648 .read = spi_chip_read,
5649 },
5650
5651 {
5652 .vendor = "Winbond",
5653 .name = "W25Q16",
5654 .bustype = CHIP_BUSTYPE_SPI,
5655 .manufacture_id = WINBOND_NEX_ID,
5656 .model_id = W_25Q16,
5657 .total_size = 2048,
5658 .page_size = 256,
5659 .tested = TEST_UNTESTED,
5660 .probe = probe_spi_rdid,
5661 .probe_timing = TIMING_ZERO,
5662 .block_erasers =
5663 {
5664 {
5665 .eraseblocks = { {4 * 1024, 512} },
5666 .block_erase = spi_block_erase_20,
5667 }, {
5668 .eraseblocks = { {32 * 1024, 64} },
5669 .block_erase = spi_block_erase_52,
5670 }, {
5671 .eraseblocks = { {64 * 1024, 32} },
5672 .block_erase = spi_block_erase_d8,
5673 }, {
5674 .eraseblocks = { {2 * 1024 * 1024, 1} },
5675 .block_erase = spi_block_erase_60,
5676 }, {
5677 .eraseblocks = { {2 * 1024 * 1024, 1} },
5678 .block_erase = spi_block_erase_c7,
5679 }
5680 },
5681 .write = spi_chip_write_256,
5682 .read = spi_chip_read,
5683 },
5684
5685 {
5686 .vendor = "Winbond",
5687 .name = "W25Q32",
5688 .bustype = CHIP_BUSTYPE_SPI,
5689 .manufacture_id = WINBOND_NEX_ID,
5690 .model_id = W_25Q32,
5691 .total_size = 4096,
5692 .page_size = 256,
5693 .tested = TEST_UNTESTED,
5694 .probe = probe_spi_rdid,
5695 .probe_timing = TIMING_ZERO,
5696 .block_erasers =
5697 {
5698 {
5699 .eraseblocks = { {4 * 1024, 1024} },
5700 .block_erase = spi_block_erase_20,
5701 }, {
5702 .eraseblocks = { {32 * 1024, 128} },
5703 .block_erase = spi_block_erase_52,
5704 }, {
5705 .eraseblocks = { {64 * 1024, 64} },
5706 .block_erase = spi_block_erase_d8,
5707 }, {
5708 .eraseblocks = { {4 * 1024 * 1024, 1} },
5709 .block_erase = spi_block_erase_60,
5710 }, {
5711 .eraseblocks = { {4 * 1024 * 1024, 1} },
5712 .block_erase = spi_block_erase_c7,
5713 }
5714 },
5715 .write = spi_chip_write_256,
5716 .read = spi_chip_read,
5717 },
5718
5719 {
5720 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005721 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005722 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005723 .manufacture_id = WINBOND_NEX_ID,
5724 .model_id = W_25X10,
5725 .total_size = 128,
5726 .page_size = 256,
5727 .tested = TEST_UNTESTED,
5728 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005729 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005730 .block_erasers =
5731 {
5732 {
5733 .eraseblocks = { {4 * 1024, 32} },
5734 .block_erase = spi_block_erase_20,
5735 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005736 .eraseblocks = { {64 * 1024, 2} },
5737 .block_erase = spi_block_erase_d8,
5738 }, {
5739 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005740 .block_erase = spi_block_erase_c7,
5741 }
5742 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005743 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005744 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005745 },
5746
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005747 {
5748 .vendor = "Winbond",
5749 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005750 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005751 .manufacture_id = WINBOND_NEX_ID,
5752 .model_id = W_25X20,
5753 .total_size = 256,
5754 .page_size = 256,
5755 .tested = TEST_UNTESTED,
5756 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005757 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005758 .block_erasers =
5759 {
5760 {
5761 .eraseblocks = { {4 * 1024, 64} },
5762 .block_erase = spi_block_erase_20,
5763 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005764 .eraseblocks = { {64 * 1024, 4} },
5765 .block_erase = spi_block_erase_d8,
5766 }, {
5767 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005768 .block_erase = spi_block_erase_c7,
5769 }
5770 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005771 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005772 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005773 },
5774
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005775 {
5776 .vendor = "Winbond",
5777 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005778 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005779 .manufacture_id = WINBOND_NEX_ID,
5780 .model_id = W_25X40,
5781 .total_size = 512,
5782 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005783 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005784 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005785 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005786 .block_erasers =
5787 {
5788 {
5789 .eraseblocks = { {4 * 1024, 128} },
5790 .block_erase = spi_block_erase_20,
5791 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005792 .eraseblocks = { {64 * 1024, 8} },
5793 .block_erase = spi_block_erase_d8,
5794 }, {
5795 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005796 .block_erase = spi_block_erase_c7,
5797 }
5798 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005799 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005800 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005801 },
5802
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005803 {
5804 .vendor = "Winbond",
5805 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005806 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005807 .manufacture_id = WINBOND_NEX_ID,
5808 .model_id = W_25X80,
5809 .total_size = 1024,
5810 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005811 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005812 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005813 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005814 .block_erasers =
5815 {
5816 {
5817 .eraseblocks = { {4 * 1024, 256} },
5818 .block_erase = spi_block_erase_20,
5819 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005820 .eraseblocks = { {64 * 1024, 16} },
5821 .block_erase = spi_block_erase_d8,
5822 }, {
5823 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005824 .block_erase = spi_block_erase_c7,
5825 }
5826 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005827 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005828 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005829 },
5830
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005831 {
5832 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005833 .name = "W25x16",
5834 .bustype = CHIP_BUSTYPE_SPI,
5835 .manufacture_id = WINBOND_NEX_ID,
5836 .model_id = W_25X16,
5837 .total_size = 2048,
5838 .page_size = 256,
5839 .tested = TEST_OK_PR,
5840 .probe = probe_spi_rdid,
5841 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005842 .block_erasers =
5843 {
5844 {
5845 .eraseblocks = { {4 * 1024, 512} },
5846 .block_erase = spi_block_erase_20,
5847 }, {
5848 .eraseblocks = { {32 * 1024, 64} },
5849 .block_erase = spi_block_erase_52,
5850 }, {
5851 .eraseblocks = { {64 * 1024, 32} },
5852 .block_erase = spi_block_erase_d8,
5853 }, {
5854 .eraseblocks = { {2 * 1024 * 1024, 1} },
5855 .block_erase = spi_block_erase_60,
5856 }, {
5857 .eraseblocks = { {2 * 1024 * 1024, 1} },
5858 .block_erase = spi_block_erase_c7,
5859 }
5860 },
Hector Martina721ae22009-07-11 19:39:11 +00005861 .write = spi_chip_write_256,
5862 .read = spi_chip_read,
5863 },
5864
5865 {
5866 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005867 .name = "W25x32",
5868 .bustype = CHIP_BUSTYPE_SPI,
5869 .manufacture_id = WINBOND_NEX_ID,
5870 .model_id = W_25X32,
5871 .total_size = 4096,
5872 .page_size = 256,
5873 .tested = TEST_OK_PROBE,
5874 .probe = probe_spi_rdid,
5875 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005876 .block_erasers =
5877 {
5878 {
5879 .eraseblocks = { {4 * 1024, 1024} },
5880 .block_erase = spi_block_erase_20,
5881 }, {
5882 .eraseblocks = { {32 * 1024, 128} },
5883 .block_erase = spi_block_erase_52,
5884 }, {
5885 .eraseblocks = { {64 * 1024, 64} },
5886 .block_erase = spi_block_erase_d8,
5887 }, {
5888 .eraseblocks = { {4 * 1024 * 1024, 1} },
5889 .block_erase = spi_block_erase_60,
5890 }, {
5891 .eraseblocks = { {4 * 1024 * 1024, 1} },
5892 .block_erase = spi_block_erase_c7,
5893 }
5894 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005895 .write = spi_chip_write_256,
5896 .read = spi_chip_read,
5897 },
5898
5899 {
5900 .vendor = "Winbond",
5901 .name = "W25x64",
5902 .bustype = CHIP_BUSTYPE_SPI,
5903 .manufacture_id = WINBOND_NEX_ID,
5904 .model_id = W_25X64,
5905 .total_size = 8192,
5906 .page_size = 256,
5907 .tested = TEST_UNTESTED,
5908 .probe = probe_spi_rdid,
5909 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005910 .block_erasers =
5911 {
5912 {
5913 .eraseblocks = { {4 * 1024, 2048} },
5914 .block_erase = spi_block_erase_20,
5915 }, {
5916 .eraseblocks = { {32 * 1024, 256} },
5917 .block_erase = spi_block_erase_52,
5918 }, {
5919 .eraseblocks = { {64 * 1024, 128} },
5920 .block_erase = spi_block_erase_d8,
5921 }, {
5922 .eraseblocks = { {8 * 1024 * 1024, 1} },
5923 .block_erase = spi_block_erase_60,
5924 }, {
5925 .eraseblocks = { {8 * 1024 * 1024, 1} },
5926 .block_erase = spi_block_erase_c7,
5927 }
5928 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005929 .write = spi_chip_write_256,
5930 .read = spi_chip_read,
5931 },
5932
5933 {
5934 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005935 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005936 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005937 .manufacture_id = WINBOND_ID,
5938 .model_id = W_29C011,
5939 .total_size = 128,
5940 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005941 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005942 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005943 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005944 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005945 .block_erasers =
5946 {
5947 {
5948 .eraseblocks = { {128 * 1024, 1} },
5949 .block_erase = erase_chip_block_jedec,
5950 }
5951 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005952 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005953 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005954 },
5955
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005956 {
5957 .vendor = "Winbond",
5958 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005959 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005960 .manufacture_id = WINBOND_ID,
5961 .model_id = W_29C020C,
5962 .total_size = 256,
5963 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005964 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005965 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005966 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005967 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005968 .block_erasers =
5969 {
5970 {
5971 .eraseblocks = { {256 * 1024, 1} },
5972 .block_erase = erase_chip_block_jedec,
5973 }
5974 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005975 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005976 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005977 },
5978
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005979 {
5980 .vendor = "Winbond",
5981 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005982 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005983 .manufacture_id = WINBOND_ID,
5984 .model_id = W_29C040P,
5985 .total_size = 512,
5986 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005987 .feature_bits = FEATURE_LONG_RESET,
5988 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005989 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005990 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005991 .block_erasers =
5992 {
5993 {
5994 .eraseblocks = { {512 * 1024, 1} },
5995 .block_erase = erase_chip_block_jedec,
5996 }
5997 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005998 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005999 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006000 },
6001
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006002 {
6003 .vendor = "Winbond",
6004 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006005 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006006 .manufacture_id = WINBOND_ID,
6007 .model_id = W_29C011,
6008 .total_size = 128,
6009 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006010 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006011 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006012 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006013 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006014 .block_erasers =
6015 {
6016 {
6017 .eraseblocks = { {128 * 1024, 1} },
6018 .block_erase = erase_chip_block_jedec,
6019 }
6020 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006021 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006022 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006023 },
6024
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006025 {
6026 .vendor = "Winbond",
6027 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006028 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006029 .manufacture_id = WINBOND_ID,
6030 .model_id = W_39V040A,
6031 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006032 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006033 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00006034 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006035 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006036 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006037 .block_erasers =
6038 {
6039 {
6040 .eraseblocks = { {64 * 1024, 8} },
6041 .block_erase = erase_sector_jedec,
6042 }, {
6043 .eraseblocks = { {512 * 1024, 1} },
6044 .block_erase = erase_chip_block_jedec,
6045 }
6046 },
Sean Nelson35727f72010-01-28 23:55:12 +00006047 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006048 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006049 },
6050
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006051 {
6052 .vendor = "Winbond",
6053 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006054 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006055 .manufacture_id = WINBOND_ID,
6056 .model_id = W_39V040B,
6057 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006058 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006059 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00006060 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006061 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006062 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006063 .block_erasers =
6064 {
6065 {
6066 .eraseblocks = { {64 * 1024, 8} },
6067 .block_erase = erase_sector_jedec,
6068 }, {
6069 .eraseblocks = { {512 * 1024, 1} },
6070 .block_erase = erase_chip_block_jedec,
6071 }
6072 },
Sean Nelson35727f72010-01-28 23:55:12 +00006073 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006074 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006075 },
6076
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006077 {
6078 .vendor = "Winbond",
6079 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006080 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006081 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006082 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006083 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006084 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006085 .feature_bits = FEATURE_EITHER_RESET,
6086 .tested = TEST_UNTESTED,
6087 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006088 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006089 .block_erasers =
6090 {
6091 {
6092 .eraseblocks = { {64 * 1024, 8} },
6093 .block_erase = erase_sector_jedec,
6094 }, {
6095 .eraseblocks = { {512 * 1024, 1} },
6096 .block_erase = erase_chip_block_jedec,
6097 }
6098 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006099 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00006100 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006101 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006102 },
6103
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006104 {
6105 .vendor = "Winbond",
6106 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006107 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006108 .manufacture_id = WINBOND_ID,
6109 .model_id = W_39V040FA,
6110 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006111 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00006112 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00006113 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006114 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006115 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006116 .block_erasers =
6117 {
6118 {
6119 .eraseblocks = { {4 * 1024, 128} },
6120 .block_erase = erase_block_jedec,
6121 }, {
6122 .eraseblocks = { {64 * 1024, 8} },
6123 .block_erase = erase_sector_jedec,
6124 }, {
6125 .eraseblocks = { {512 * 1024, 1} },
6126 .block_erase = erase_chip_block_jedec,
6127 }
6128 },
Michael Karcherc9b63412010-05-30 16:55:18 +00006129 .printlock = printlock_sst_fwhub,
6130 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006131 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006132 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006133 },
6134
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006135 {
6136 .vendor = "Winbond",
6137 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006138 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006139 .manufacture_id = WINBOND_ID,
6140 .model_id = W_39V080A,
6141 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006142 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006143 .feature_bits = FEATURE_EITHER_RESET,
6144 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006145 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006146 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006147 .block_erasers =
6148 {
6149 {
6150 .eraseblocks = { {64 * 1024, 16} },
6151 .block_erase = erase_sector_jedec,
6152 }, {
6153 .eraseblocks = { {1024 * 1024, 1} },
6154 .block_erase = erase_chip_block_jedec,
6155 }
6156 },
Sean Nelson35727f72010-01-28 23:55:12 +00006157 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006158 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006159 },
6160
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006161 {
6162 .vendor = "Winbond",
6163 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00006164 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006165 .manufacture_id = WINBOND_ID,
6166 .model_id = W_49F002U,
6167 .total_size = 256,
6168 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006169 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006170 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006171 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006172 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006173 .block_erasers =
6174 {
6175 {
6176 .eraseblocks = {
6177 {128 * 1024, 1},
6178 {96 * 1024, 1},
6179 {8 * 1024, 2},
6180 {16 * 1024, 1},
6181 },
6182 .block_erase = erase_sector_jedec,
6183 }, {
6184 .eraseblocks = { {256 * 1024, 1} },
6185 .block_erase = erase_chip_block_jedec,
6186 }
6187 },
Sean Nelson35727f72010-01-28 23:55:12 +00006188 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006189 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006190 },
6191
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006192 {
6193 .vendor = "Winbond",
6194 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006195 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006196 .manufacture_id = WINBOND_ID,
6197 .model_id = W_49V002A,
6198 .total_size = 256,
6199 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006200 .feature_bits = FEATURE_EITHER_RESET,
6201 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006202 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006203 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006204 .block_erasers =
6205 {
6206 {
6207 .eraseblocks = {
6208 {64 * 1024, 3},
6209 {32 * 1024, 1},
6210 {8 * 1024, 2},
6211 {16 * 1024, 1},
6212 },
6213 .block_erase = erase_sector_jedec,
6214 }, {
6215 .eraseblocks = { {256 * 1024, 1} },
6216 .block_erase = erase_chip_block_jedec,
6217 }
6218 },
Sean Nelson35727f72010-01-28 23:55:12 +00006219 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006220 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006221 },
6222
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006223 {
6224 .vendor = "Winbond",
6225 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006226 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006227 .manufacture_id = WINBOND_ID,
6228 .model_id = W_49V002FA,
6229 .total_size = 256,
6230 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006231 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00006232 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006233 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006234 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006235 .block_erasers =
6236 {
6237 {
6238 .eraseblocks = {
6239 {64 * 1024, 3},
6240 {32 * 1024, 1},
6241 {8 * 1024, 2},
6242 {16 * 1024, 1},
6243 },
6244 .block_erase = erase_sector_jedec,
6245 }, {
6246 .eraseblocks = { {256 * 1024, 1} },
6247 .block_erase = erase_chip_block_jedec,
6248 }
6249 },
Sean Nelson35727f72010-01-28 23:55:12 +00006250 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006251 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006252 },
6253
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006254 {
6255 .vendor = "Winbond",
6256 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006257 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006258 .manufacture_id = WINBOND_ID,
6259 .model_id = W_39V080FA,
6260 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006261 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006262 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006263 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006264 .probe = probe_jedec,
6265 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006266 .block_erasers =
6267 {
6268 {
6269 .eraseblocks = { {64 * 1024, 16}, },
6270 .block_erase = erase_sector_jedec,
6271 }, {
6272 .eraseblocks = { {1024 * 1024, 1} },
6273 .block_erase = erase_chip_block_jedec,
6274 }
6275 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006276 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006277 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006278 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006279 },
6280
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006281 {
6282 .vendor = "Winbond",
6283 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006284 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006285 .manufacture_id = WINBOND_ID,
6286 .model_id = W_39V080FA_DM,
6287 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006288 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006289 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006290 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006291 .probe = probe_jedec,
6292 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006293 .block_erasers =
6294 {
6295 {
6296 .eraseblocks = { {64 * 1024, 8}, },
6297 .block_erase = erase_sector_jedec,
6298 }, {
6299 .eraseblocks = { {512 * 1024, 1} },
6300 .block_erase = erase_chip_block_jedec,
6301 }
6302 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006303 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006304 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006305 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006306 },
6307
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006308 {
6309 .vendor = "Atmel",
6310 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006311 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006312 .manufacture_id = ATMEL_ID,
6313 .model_id = GENERIC_DEVICE_ID,
6314 .total_size = 0,
6315 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006316 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006317 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006318 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006319 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006320 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006321 },
6322
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006323 {
6324 .vendor = "EON",
6325 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006326 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006327 .manufacture_id = EON_ID_NOPREFIX,
6328 .model_id = GENERIC_DEVICE_ID,
6329 .total_size = 0,
6330 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006331 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006332 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006333 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006334 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006335 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006336 },
6337
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006338 {
6339 .vendor = "Macronix",
6340 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006341 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006342 .manufacture_id = MX_ID,
6343 .model_id = GENERIC_DEVICE_ID,
6344 .total_size = 0,
6345 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006346 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006347 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006348 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006349 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006350 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006351 },
6352
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006353 {
6354 .vendor = "PMC",
6355 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006356 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006357 .manufacture_id = PMC_ID,
6358 .model_id = GENERIC_DEVICE_ID,
6359 .total_size = 0,
6360 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006361 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006362 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006363 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006364 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006365 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006366 },
6367
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006368 {
6369 .vendor = "SST",
6370 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006371 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006372 .manufacture_id = SST_ID,
6373 .model_id = GENERIC_DEVICE_ID,
6374 .total_size = 0,
6375 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006376 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006377 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006378 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006379 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006380 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006381 },
6382
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006383 {
6384 .vendor = "ST",
6385 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006386 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006387 .manufacture_id = ST_ID,
6388 .model_id = GENERIC_DEVICE_ID,
6389 .total_size = 0,
6390 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006391 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006392 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006393 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006394 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006395 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006396 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006397
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006398 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006399 .vendor = "Sanyo",
6400 .name = "unknown Sanyo SPI chip",
6401 .bustype = CHIP_BUSTYPE_SPI,
6402 .manufacture_id = SANYO_ID,
6403 .model_id = GENERIC_DEVICE_ID,
6404 .total_size = 0,
6405 .page_size = 256,
6406 .tested = TEST_BAD_PREW,
6407 .probe = probe_spi_rdid,
6408 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006409 .write = NULL,
6410 .read = NULL,
6411 },
6412
6413 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006414 .vendor = "Generic",
6415 .name = "unknown SPI chip (RDID)",
6416 .bustype = CHIP_BUSTYPE_SPI,
6417 .manufacture_id = GENERIC_MANUF_ID,
6418 .model_id = GENERIC_DEVICE_ID,
6419 .total_size = 0,
6420 .page_size = 256,
6421 .tested = TEST_BAD_PREW,
6422 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006423 .write = NULL,
6424 },
6425 {
6426 .vendor = "Generic",
6427 .name = "unknown SPI chip (REMS)",
6428 .bustype = CHIP_BUSTYPE_SPI,
6429 .manufacture_id = GENERIC_MANUF_ID,
6430 .model_id = GENERIC_DEVICE_ID,
6431 .total_size = 0,
6432 .page_size = 256,
6433 .tested = TEST_BAD_PREW,
6434 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006435 .write = NULL,
6436 },
6437
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006438 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006439};