blob: b324feb00008d140087f980f98ce4a94a14778e7 [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 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00001369 .vendor = "EMST",
1370 .name = "F25L008A",
1371 .bustype = CHIP_BUSTYPE_SPI,
1372 .manufacture_id = EMST_ID,
1373 .model_id = EMST_F25L008A,
1374 .total_size = 1024,
1375 .page_size = 256,
1376 .tested = TEST_UNTESTED,
1377 .probe = probe_spi_rdid,
1378 .probe_timing = TIMING_ZERO,
1379 .block_erasers =
1380 {
1381 {
1382 .eraseblocks = { {4 * 1024, 256} },
1383 .block_erase = spi_block_erase_20,
1384 }, {
1385 .eraseblocks = { {64 * 1024, 16} },
1386 .block_erase = spi_block_erase_d8,
1387 }, {
1388 .eraseblocks = { {1024 * 1024, 1} },
1389 .block_erase = spi_block_erase_60,
1390 }, {
1391 .eraseblocks = { {1024 * 1024, 1} },
1392 .block_erase = spi_block_erase_c7,
1393 }
1394 },
1395 .write = spi_aai_write,
1396 .read = read_memmapped,
1397 },
1398
1399 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001400 .vendor = "Eon",
1401 .name = "EN25B05",
1402 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001403 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001404 .model_id = EN_25B05,
1405 .total_size = 64,
1406 .page_size = 256,
1407 .tested = TEST_UNTESTED,
1408 .probe = probe_spi_rdid,
1409 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001410 .block_erasers =
1411 {
1412 {
1413 .eraseblocks = {
1414 {4 * 1024, 2},
1415 {8 * 1024, 1},
1416 {16 * 1024, 1},
1417 {32 * 1024, 1},
1418 },
1419 .block_erase = spi_block_erase_d8,
1420 }, {
1421 .eraseblocks = { {64 * 1024, 1} },
1422 .block_erase = spi_block_erase_c7,
1423 }
1424 },
1425 .write = spi_chip_write_256,
1426 .read = spi_chip_read,
1427 },
1428
1429 {
1430 .vendor = "Eon",
1431 .name = "EN25B05T",
1432 .bustype = CHIP_BUSTYPE_SPI,
1433 .manufacture_id = EON_ID_NOPREFIX,
1434 .model_id = EN_25B05,
1435 .total_size = 64,
1436 .page_size = 256,
1437 .tested = TEST_UNTESTED,
1438 .probe = probe_spi_rdid,
1439 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001440 .block_erasers =
1441 {
1442 {
1443 .eraseblocks = {
1444 {32 * 1024, 1},
1445 {16 * 1024, 1},
1446 {8 * 1024, 1},
1447 {4 * 1024, 2},
1448 },
1449 .block_erase = spi_block_erase_d8,
1450 }, {
1451 .eraseblocks = { {64 * 1024, 1} },
1452 .block_erase = spi_block_erase_c7,
1453 }
1454 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001455 .write = spi_chip_write_256,
1456 .read = spi_chip_read,
1457 },
1458
1459 {
1460 .vendor = "Eon",
1461 .name = "EN25B10",
1462 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001463 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001464 .model_id = EN_25B10,
1465 .total_size = 128,
1466 .page_size = 256,
1467 .tested = TEST_UNTESTED,
1468 .probe = probe_spi_rdid,
1469 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001470 .block_erasers =
1471 {
1472 {
1473 .eraseblocks = {
1474 {4 * 1024, 2},
1475 {8 * 1024, 1},
1476 {16 * 1024, 1},
1477 {32 * 1024, 3},
1478 },
1479 .block_erase = spi_block_erase_d8,
1480 }, {
1481 .eraseblocks = { {128 * 1024, 1} },
1482 .block_erase = spi_block_erase_c7,
1483 }
1484 },
1485 .write = spi_chip_write_256,
1486 .read = spi_chip_read,
1487 },
1488
1489 {
1490 .vendor = "Eon",
1491 .name = "EN25B10T",
1492 .bustype = CHIP_BUSTYPE_SPI,
1493 .manufacture_id = EON_ID_NOPREFIX,
1494 .model_id = EN_25B10,
1495 .total_size = 128,
1496 .page_size = 256,
1497 .tested = TEST_UNTESTED,
1498 .probe = probe_spi_rdid,
1499 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001500 .block_erasers =
1501 {
1502 {
1503 .eraseblocks = {
1504 {32 * 1024, 3},
1505 {16 * 1024, 1},
1506 {8 * 1024, 1},
1507 {4 * 1024, 2},
1508 },
1509 .block_erase = spi_block_erase_d8,
1510 }, {
1511 .eraseblocks = { {128 * 1024, 1} },
1512 .block_erase = spi_block_erase_c7,
1513 }
1514 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001515 .write = spi_chip_write_256,
1516 .read = spi_chip_read,
1517 },
1518
1519 {
1520 .vendor = "Eon",
1521 .name = "EN25B20",
1522 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001523 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001524 .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 {4 * 1024, 2},
1535 {8 * 1024, 1},
1536 {16 * 1024, 1},
1537 {32 * 1024, 1},
1538 {64 * 1024, 3}
1539 },
1540 .block_erase = spi_block_erase_d8,
1541 }, {
1542 .eraseblocks = { {256 * 1024, 1} },
1543 .block_erase = spi_block_erase_c7,
1544 }
1545 },
1546 .write = spi_chip_write_256,
1547 .read = spi_chip_read,
1548 },
1549
1550 {
1551 .vendor = "Eon",
1552 .name = "EN25B20T",
1553 .bustype = CHIP_BUSTYPE_SPI,
1554 .manufacture_id = EON_ID_NOPREFIX,
1555 .model_id = EN_25B20,
1556 .total_size = 256,
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 {64 * 1024, 3},
1566 {32 * 1024, 1},
1567 {16 * 1024, 1},
1568 {8 * 1024, 1},
1569 {4 * 1024, 2},
1570 },
1571 .block_erase = spi_block_erase_d8,
1572 }, {
1573 .eraseblocks = { {256 * 1024, 1} },
1574 .block_erase = spi_block_erase_c7,
1575 }
1576 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001577 .write = spi_chip_write_256,
1578 .read = spi_chip_read,
1579 },
1580
1581 {
1582 .vendor = "Eon",
1583 .name = "EN25B40",
1584 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001585 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001586 .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 {4 * 1024, 2},
1597 {8 * 1024, 1},
1598 {16 * 1024, 1},
1599 {32 * 1024, 1},
1600 {64 * 1024, 7}
1601 },
1602 .block_erase = spi_block_erase_d8,
1603 }, {
1604 .eraseblocks = { {512 * 1024, 1} },
1605 .block_erase = spi_block_erase_c7,
1606 }
1607 },
1608 .write = spi_chip_write_256,
1609 .read = spi_chip_read,
1610 },
1611
1612 {
1613 .vendor = "Eon",
1614 .name = "EN25B40T",
1615 .bustype = CHIP_BUSTYPE_SPI,
1616 .manufacture_id = EON_ID_NOPREFIX,
1617 .model_id = EN_25B40,
1618 .total_size = 512,
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 {64 * 1024, 7},
1628 {32 * 1024, 1},
1629 {16 * 1024, 1},
1630 {8 * 1024, 1},
1631 {4 * 1024, 2},
1632 },
1633 .block_erase = spi_block_erase_d8,
1634 }, {
1635 .eraseblocks = { {512 * 1024, 1} },
1636 .block_erase = spi_block_erase_c7,
1637 }
1638 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001639 .write = spi_chip_write_256,
1640 .read = spi_chip_read,
1641 },
1642
1643 {
1644 .vendor = "Eon",
1645 .name = "EN25B80",
1646 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001647 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001648 .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 {4 * 1024, 2},
1659 {8 * 1024, 1},
1660 {16 * 1024, 1},
1661 {32 * 1024, 1},
1662 {64 * 1024, 15}
1663 },
1664 .block_erase = spi_block_erase_d8,
1665 }, {
1666 .eraseblocks = { {1024 * 1024, 1} },
1667 .block_erase = spi_block_erase_c7,
1668 }
1669 },
1670 .write = spi_chip_write_256,
1671 .read = spi_chip_read,
1672 },
1673
1674 {
1675 .vendor = "Eon",
1676 .name = "EN25B80T",
1677 .bustype = CHIP_BUSTYPE_SPI,
1678 .manufacture_id = EON_ID_NOPREFIX,
1679 .model_id = EN_25B80,
1680 .total_size = 1024,
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 {64 * 1024, 15},
1690 {32 * 1024, 1},
1691 {16 * 1024, 1},
1692 {8 * 1024, 1},
1693 {4 * 1024, 2},
1694 },
1695 .block_erase = spi_block_erase_d8,
1696 }, {
1697 .eraseblocks = { {1024 * 1024, 1} },
1698 .block_erase = spi_block_erase_c7,
1699 }
1700 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001701 .write = spi_chip_write_256,
1702 .read = spi_chip_read,
1703 },
1704
1705 {
1706 .vendor = "Eon",
1707 .name = "EN25B16",
1708 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001709 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001710 .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 {4 * 1024, 2},
1721 {8 * 1024, 1},
1722 {16 * 1024, 1},
1723 {32 * 1024, 1},
1724 {64 * 1024, 31},
1725 },
1726 .block_erase = spi_block_erase_d8,
1727 }, {
1728 .eraseblocks = { {2 * 1024 * 1024, 1} },
1729 .block_erase = spi_block_erase_c7,
1730 }
1731 },
1732 .write = spi_chip_write_256,
1733 .read = spi_chip_read,
1734 },
1735
1736 {
1737 .vendor = "Eon",
1738 .name = "EN25B16T",
1739 .bustype = CHIP_BUSTYPE_SPI,
1740 .manufacture_id = EON_ID_NOPREFIX,
1741 .model_id = EN_25B16,
1742 .total_size = 2048,
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 {64 * 1024, 31},
1752 {32 * 1024, 1},
1753 {16 * 1024, 1},
1754 {8 * 1024, 1},
1755 {4 * 1024, 2},
1756 },
1757 .block_erase = spi_block_erase_d8,
1758 }, {
1759 .eraseblocks = { {2 * 1024 * 1024, 1} },
1760 .block_erase = spi_block_erase_c7,
1761 }
1762 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001763 .write = spi_chip_write_256,
1764 .read = spi_chip_read,
1765 },
1766
1767 {
1768 .vendor = "Eon",
1769 .name = "EN25B32",
1770 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001771 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001772 .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 {4 * 1024, 2},
1783 {8 * 1024, 1},
1784 {16 * 1024, 1},
1785 {32 * 1024, 1},
1786 {64 * 1024, 63},
1787 },
1788 .block_erase = spi_block_erase_d8,
1789 }, {
1790 .eraseblocks = { {4 * 1024 * 1024, 1} },
1791 .block_erase = spi_block_erase_c7,
1792 }
1793 },
1794 .write = spi_chip_write_256,
1795 .read = spi_chip_read,
1796 },
1797
1798 {
1799 .vendor = "Eon",
1800 .name = "EN25B32T",
1801 .bustype = CHIP_BUSTYPE_SPI,
1802 .manufacture_id = EON_ID_NOPREFIX,
1803 .model_id = EN_25B32,
1804 .total_size = 4096,
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 {64 * 1024, 63},
1814 {32 * 1024, 1},
1815 {16 * 1024, 1},
1816 {8 * 1024, 1},
1817 {4 * 1024, 2},
1818 },
1819 .block_erase = spi_block_erase_d8,
1820 }, {
1821 .eraseblocks = { {4 * 1024 * 1024, 1} },
1822 .block_erase = spi_block_erase_c7,
1823 }
1824 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001825 .write = spi_chip_write_256,
1826 .read = spi_chip_read,
1827 },
1828
1829 {
1830 .vendor = "Eon",
1831 .name = "EN25B64",
1832 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001833 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001834 .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 {4 * 1024, 2},
1845 {8 * 1024, 1},
1846 {16 * 1024, 1},
1847 {32 * 1024, 1},
1848 {64 * 1024, 127},
1849 },
1850 .block_erase = spi_block_erase_d8,
1851 }, {
1852 .eraseblocks = { {8 * 1024 * 1024, 1} },
1853 .block_erase = spi_block_erase_c7,
1854 }
1855 },
1856 .write = spi_chip_write_256,
1857 .read = spi_chip_read,
1858 },
1859
1860 {
1861 .vendor = "Eon",
1862 .name = "EN25B64T",
1863 .bustype = CHIP_BUSTYPE_SPI,
1864 .manufacture_id = EON_ID_NOPREFIX,
1865 .model_id = EN_25B64,
1866 .total_size = 8192,
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 = {
1875 {64 * 1024, 127},
1876 {32 * 1024, 1},
1877 {16 * 1024, 1},
1878 {8 * 1024, 1},
1879 {4 * 1024, 2},
1880 },
1881 .block_erase = spi_block_erase_d8,
1882 }, {
1883 .eraseblocks = { {8 * 1024 * 1024, 1} },
1884 .block_erase = spi_block_erase_c7,
1885 }
1886 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001887 .write = spi_chip_write_256,
1888 .read = spi_chip_read,
1889 },
1890
1891 {
1892 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001893 .name = "EN25D16",
1894 .bustype = CHIP_BUSTYPE_SPI,
1895 .manufacture_id = EON_ID_NOPREFIX,
1896 .model_id = EN_25D16,
1897 .total_size = 2048,
1898 .page_size = 256,
1899 .tested = TEST_UNTESTED,
1900 .probe = probe_spi_rdid,
1901 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001902 .block_erasers =
1903 {
1904 {
1905 .eraseblocks = { {4 * 1024, 512} },
1906 .block_erase = spi_block_erase_20,
1907 }, {
1908 .eraseblocks = { {64 * 1024, 32} },
1909 .block_erase = spi_block_erase_d8,
1910 }, {
1911 .eraseblocks = { {64 * 1024, 32} },
1912 .block_erase = spi_block_erase_52,
1913 }, {
1914 .eraseblocks = { {2 * 1024 * 1024, 1} },
1915 .block_erase = spi_block_erase_60,
1916 }, {
1917 .eraseblocks = { {2 * 1024 * 1024, 1} },
1918 .block_erase = spi_block_erase_c7,
1919 }
1920 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001921 .write = spi_chip_write_256,
1922 .read = spi_chip_read,
1923 },
1924
1925 {
1926 .vendor = "Eon",
1927 .name = "EN25F05",
1928 .bustype = CHIP_BUSTYPE_SPI,
1929 .manufacture_id = EON_ID_NOPREFIX,
1930 .model_id = EN_25F05,
1931 .total_size = 64,
1932 .page_size = 256,
1933 .tested = TEST_UNTESTED,
1934 .probe = probe_spi_rdid,
1935 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001936 .block_erasers =
1937 {
1938 {
1939 .eraseblocks = { {4 * 1024, 16} },
1940 .block_erase = spi_block_erase_20,
1941 }, {
1942 .eraseblocks = { {32 * 1024, 2} },
1943 .block_erase = spi_block_erase_d8,
1944 }, {
1945 .eraseblocks = { {32 * 1024, 2} },
1946 .block_erase = spi_block_erase_52,
1947 }, {
1948 .eraseblocks = { {64 * 1024, 1} },
1949 .block_erase = spi_block_erase_60,
1950 }, {
1951 .eraseblocks = { {64 * 1024, 1} },
1952 .block_erase = spi_block_erase_c7,
1953 }
1954 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001955 .write = spi_chip_write_256,
1956 .read = spi_chip_read,
1957 },
1958
1959 {
1960 .vendor = "Eon",
1961 .name = "EN25F10",
1962 .bustype = CHIP_BUSTYPE_SPI,
1963 .manufacture_id = EON_ID_NOPREFIX,
1964 .model_id = EN_25F10,
1965 .total_size = 128,
1966 .page_size = 256,
1967 .tested = TEST_UNTESTED,
1968 .probe = probe_spi_rdid,
1969 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001970 .block_erasers =
1971 {
1972 {
1973 .eraseblocks = { {4 * 1024, 32} },
1974 .block_erase = spi_block_erase_20,
1975 }, {
1976 .eraseblocks = { {32 * 1024, 4} },
1977 .block_erase = spi_block_erase_d8,
1978 }, {
1979 .eraseblocks = { {32 * 1024, 4} },
1980 .block_erase = spi_block_erase_52,
1981 }, {
1982 .eraseblocks = { {128 * 1024, 1} },
1983 .block_erase = spi_block_erase_60,
1984 }, {
1985 .eraseblocks = { {128 * 1024, 1} },
1986 .block_erase = spi_block_erase_c7,
1987 }
1988 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001989 .write = spi_chip_write_256,
1990 .read = spi_chip_read,
1991 },
1992
1993 {
1994 .vendor = "Eon",
1995 .name = "EN25F20",
1996 .bustype = CHIP_BUSTYPE_SPI,
1997 .manufacture_id = EON_ID_NOPREFIX,
1998 .model_id = EN_25F20,
1999 .total_size = 256,
2000 .page_size = 256,
2001 .tested = TEST_UNTESTED,
2002 .probe = probe_spi_rdid,
2003 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002004 .block_erasers =
2005 {
2006 {
2007 .eraseblocks = { {4 * 1024, 64} },
2008 .block_erase = spi_block_erase_20,
2009 }, {
2010 .eraseblocks = { {64 * 1024, 4} },
2011 .block_erase = spi_block_erase_d8,
2012 }, {
2013 .eraseblocks = { {64 * 1024, 4} },
2014 .block_erase = spi_block_erase_52,
2015 }, {
2016 .eraseblocks = { {256 * 1024, 1} },
2017 .block_erase = spi_block_erase_60,
2018 }, {
2019 .eraseblocks = { {256 * 1024, 1} },
2020 .block_erase = spi_block_erase_c7,
2021 }
2022 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002023 .write = spi_chip_write_256,
2024 .read = spi_chip_read,
2025 },
2026
2027 {
2028 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002029 .name = "EN25F40",
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_25F40,
2033 .total_size = 512,
2034 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002035 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002036 .probe = probe_spi_rdid,
2037 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002038 .block_erasers =
2039 {
2040 {
Sean Nelson54596372010-01-09 05:30:14 +00002041 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002042 .block_erase = spi_block_erase_20,
2043 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002044 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002045 .block_erase = spi_block_erase_d8,
2046 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002047 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002048 .block_erase = spi_block_erase_60,
2049 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002050 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002051 .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 = "EN25F80",
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_25F80,
2064 .total_size = 1024,
2065 .page_size = 256,
Uwe Hermannea5425b2010-05-30 17:00:19 +00002066 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002067 .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, 256} },
2073 .block_erase = spi_block_erase_20,
2074 }, {
2075 .eraseblocks = { {64 * 1024, 16} },
2076 .block_erase = spi_block_erase_d8,
2077 }, {
2078 .eraseblocks = { {1024 * 1024, 1} },
2079 .block_erase = spi_block_erase_60,
2080 }, {
2081 .eraseblocks = { {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 {
2090 .vendor = "Eon",
2091 .name = "EN25F16",
2092 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002093 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002094 .model_id = EN_25F16,
2095 .total_size = 2048,
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, 512} },
2104 .block_erase = spi_block_erase_20,
2105 }, {
2106 .eraseblocks = { {64 * 1024, 32} },
2107 .block_erase = spi_block_erase_d8,
2108 }, {
2109 .eraseblocks = { {2 * 1024 * 1024, 1} },
2110 .block_erase = spi_block_erase_60,
2111 }, {
2112 .eraseblocks = { {2 * 1024 * 1024, 1} },
2113 .block_erase = spi_block_erase_c7,
2114 }
2115 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002116 .write = spi_chip_write_256,
2117 .read = spi_chip_read,
2118 },
2119
2120 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002121 .vendor = "Eon",
2122 .name = "EN25F32",
2123 .bustype = CHIP_BUSTYPE_SPI,
2124 .manufacture_id = EON_ID_NOPREFIX,
2125 .model_id = EN_25F32,
2126 .total_size = 4096,
2127 .page_size = 256,
2128 .tested = TEST_UNTESTED,
2129 .probe = probe_spi_rdid,
2130 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002131 .block_erasers =
2132 {
2133 {
2134 .eraseblocks = { {4 * 1024, 1024} },
2135 .block_erase = spi_block_erase_20,
2136 }, {
2137 .eraseblocks = { {64 * 1024, 64} },
2138 .block_erase = spi_block_erase_d8,
2139 }, {
2140 .eraseblocks = { {4 * 1024 * 1024, 1} },
2141 .block_erase = spi_block_erase_60,
2142 }, {
2143 .eraseblocks = { {4 * 1024 * 1024, 1} },
2144 .block_erase = spi_block_erase_c7,
2145 }
2146 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002147 .write = spi_chip_write_256,
2148 .read = spi_chip_read,
2149 },
2150
2151 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002152 .vendor = "Eon",
2153 .name = "EN29F010",
2154 .bustype = CHIP_BUSTYPE_PARALLEL,
2155 .manufacture_id = EON_ID,
2156 .model_id = EN_29F010,
2157 .total_size = 128,
2158 .page_size = 128,
2159 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2160 .tested = TEST_OK_PREW,
2161 .probe = probe_jedec,
2162 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2163 .block_erasers =
2164 {
2165 {
2166 .eraseblocks = { {16 * 1024, 8} },
2167 .block_erase = erase_sector_jedec,
2168 },
2169 {
2170 .eraseblocks = { {128 * 1024, 1} },
2171 .block_erase = erase_chip_block_jedec,
2172 },
2173 },
2174 .write = write_jedec_1,
2175 .read = read_memmapped,
2176 },
2177
2178 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002179 .vendor = "EON",
2180 .name = "EN29F002(A)(N)B",
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_29F002B,
2184 .total_size = 256,
2185 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002186 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +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 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002195 {8 * 1024, 2},
2196 {32 * 1024, 1},
2197 {64 * 1024, 3},
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 = "EON",
2211 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002212 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 .manufacture_id = EON_ID,
2214 .model_id = EN_29F002T,
2215 .total_size = 256,
2216 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002217 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002218 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002219 .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 = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002225 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002226 {32 * 1024, 1},
2227 {8 * 1024, 2},
2228 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002229 },
2230 .block_erase = erase_sector_jedec,
2231 }, {
2232 .eraseblocks = { {256 * 1024, 1} },
2233 .block_erase = erase_chip_block_jedec,
2234 },
2235 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002236 .write = write_jedec_1,
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 = "MBM29F004BC",
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 = MBM29F004BC,
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 {16 * 1024, 1},
2257 {8 * 1024, 2},
2258 {32 * 1024, 1},
2259 {64 * 1024, 7},
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 {
2272 .vendor = "Fujitsu",
2273 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002274 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002275 .manufacture_id = FUJITSU_ID,
2276 .model_id = MBM29F004TC,
2277 .total_size = 512,
2278 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002279 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002280 .tested = TEST_UNTESTED,
2281 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002282 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002283 .block_erasers =
2284 {
2285 {
2286 .eraseblocks = {
2287 {64 * 1024, 7},
2288 {32 * 1024, 1},
2289 {8 * 1024, 2},
2290 {16 * 1024, 1},
2291 },
Sean Nelson35727f72010-01-28 23:55:12 +00002292 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002293 }, {
2294 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002295 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002296 },
2297 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002298 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002299 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002300 },
2301
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002302 {
Sean Nelson35727f72010-01-28 23:55:12 +00002303 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002304 .vendor = "Fujitsu",
2305 .name = "MBM29F400BC",
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 = MBM29F400BC,
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 {16 * 1024, 1},
2320 {8 * 1024, 2},
2321 {32 * 1024, 1},
2322 {64 * 1024, 7},
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 = "Fujitsu",
2336 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002337 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002338 .manufacture_id = FUJITSU_ID,
2339 .model_id = MBM29F400TC,
2340 .total_size = 512,
2341 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002342 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002343 .tested = TEST_UNTESTED,
2344 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002345 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002346 .block_erasers =
2347 {
2348 {
2349 .eraseblocks = {
2350 {64 * 1024, 7},
2351 {32 * 1024, 1},
2352 {8 * 1024, 2},
2353 {16 * 1024, 1},
2354 },
2355 .block_erase = block_erase_m29f400bt,
2356 }, {
2357 .eraseblocks = { {512 * 1024, 1} },
2358 .block_erase = block_erase_chip_m29f400bt,
2359 },
2360 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002361 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002362 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002363 },
2364
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002365 {
2366 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002367 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002368 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002369 .manufacture_id = INTEL_ID,
2370 .model_id = P28F001BXB,
2371 .total_size = 128,
2372 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002373 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002374 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002375 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002376 .block_erasers =
2377 {
2378 {
2379 .eraseblocks = {
2380 {8 * 1024, 1},
2381 {4 * 1024, 2},
2382 {112 * 1024, 1},
2383 },
Sean Nelson28accc22010-03-19 18:47:06 +00002384 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002385 },
2386 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002387 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002388 .read = read_memmapped,
2389 },
2390
2391 {
2392 .vendor = "Intel",
2393 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002394 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002395 .manufacture_id = INTEL_ID,
2396 .model_id = P28F001BXT,
2397 .total_size = 128,
2398 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002399 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002400 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002401 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002402 .block_erasers =
2403 {
2404 {
2405 .eraseblocks = {
2406 {112 * 1024, 1},
2407 {4 * 1024, 2},
2408 {8 * 1024, 1},
2409 },
Sean Nelson28accc22010-03-19 18:47:06 +00002410 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002411 },
2412 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002413 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002414 .read = read_memmapped,
2415 },
2416
2417 {
2418 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002419 .name = "28F004S5",
2420 .bustype = CHIP_BUSTYPE_PARALLEL,
2421 .manufacture_id = INTEL_ID,
2422 .model_id = E_28F004S5,
2423 .total_size = 512,
2424 .page_size = 256,
2425 .tested = TEST_UNTESTED,
2426 .probe = probe_82802ab,
2427 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002428 .block_erasers =
2429 {
2430 {
2431 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002432 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002433 },
2434 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002435 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002436 .write = write_82802ab,
2437 .read = read_memmapped,
2438 },
2439
2440 {
2441 .vendor = "Intel",
Michael Karcherad0010a2010-04-03 10:27:08 +00002442 .name = "28F004BV/BE-B",
2443 .bustype = CHIP_BUSTYPE_PARALLEL,
2444 .manufacture_id = INTEL_ID,
2445 .model_id = P28F004BB,
2446 .total_size = 512,
2447 .page_size = 128 * 1024, /* maximal block size */
2448 .tested = TEST_UNTESTED,
2449 .probe = probe_82802ab,
2450 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2451 .block_erasers =
2452 {
2453 {
2454 .eraseblocks = {
2455 {16 * 1024, 1},
2456 {8 * 1024, 2},
2457 {96 * 1024, 1},
2458 {128 * 1024, 3},
2459 },
2460 .block_erase = erase_block_82802ab,
2461 },
2462 },
2463 .write = write_82802ab,
2464 .read = read_memmapped,
2465 },
2466
2467 {
2468 .vendor = "Intel",
2469 .name = "28F004BV/BE-T",
2470 .bustype = CHIP_BUSTYPE_PARALLEL,
2471 .manufacture_id = INTEL_ID,
2472 .model_id = P28F004BT,
2473 .total_size = 512,
2474 .page_size = 128 * 1024, /* maximal block size */
2475 .tested = TEST_UNTESTED,
2476 .probe = probe_82802ab,
2477 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2478 .block_erasers =
2479 {
2480 {
2481 .eraseblocks = {
2482 {128 * 1024, 3},
2483 {96 * 1024, 1},
2484 {8 * 1024, 2},
2485 {16 * 1024, 1},
2486 },
2487 .block_erase = erase_block_82802ab,
2488 },
2489 },
2490 .write = write_82802ab,
2491 .read = read_memmapped,
2492 },
2493
2494 {
2495 .vendor = "Intel",
2496 .name = "28F400BV/CV/CE-B",
2497 .bustype = CHIP_BUSTYPE_PARALLEL,
2498 .manufacture_id = INTEL_ID,
2499 .model_id = P28F400BB,
2500 .total_size = 512,
2501 .page_size = 128 * 1024, /* maximal block size */
2502 .feature_bits = FEATURE_ADDR_SHIFTED,
2503 .tested = TEST_UNTESTED,
2504 .probe = probe_82802ab,
2505 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2506 .block_erasers =
2507 {
2508 {
2509 .eraseblocks = {
2510 {16 * 1024, 1},
2511 {8 * 1024, 2},
2512 {96 * 1024, 1},
2513 {128 * 1024, 3},
2514 },
2515 .block_erase = erase_block_82802ab,
2516 },
2517 },
2518 .write = write_82802ab,
2519 .read = read_memmapped,
2520 },
2521
2522 {
2523 .vendor = "Intel",
2524 .name = "28F400BV/CV/CE-T",
2525 .bustype = CHIP_BUSTYPE_PARALLEL,
2526 .manufacture_id = INTEL_ID,
2527 .model_id = P28F400BT,
2528 .total_size = 512,
2529 .page_size = 128 * 1024, /* maximal block size */
2530 .feature_bits = FEATURE_ADDR_SHIFTED,
2531 .tested = TEST_UNTESTED,
2532 .probe = probe_82802ab,
2533 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2534 .block_erasers =
2535 {
2536 {
2537 .eraseblocks = {
2538 {128 * 1024, 3},
2539 {96 * 1024, 1},
2540 {8 * 1024, 2},
2541 {16 * 1024, 1},
2542 },
2543 .block_erase = erase_block_82802ab,
2544 },
2545 },
2546 .write = write_82802ab,
2547 .read = read_memmapped,
2548 },
2549
2550 {
2551 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002552 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002553 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002554 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002555 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002556 .total_size = 512,
2557 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002558 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002559 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002560 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002561 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002562 .block_erasers =
2563 {
2564 {
2565 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002566 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002567 },
2568 },
Sean Nelson28accc22010-03-19 18:47:06 +00002569 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002570 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002571 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002572 },
2573
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002574 {
2575 .vendor = "Intel",
2576 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002577 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002578 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002579 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002580 .total_size = 1024,
2581 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002582 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002583 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002584 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002585 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002586 .block_erasers =
2587 {
2588 {
2589 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00002590 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002591 },
2592 },
Sean Nelson28accc22010-03-19 18:47:06 +00002593 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002594 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002595 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002596 },
2597
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002598 {
2599 .vendor = "Macronix",
2600 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002601 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002602 .manufacture_id = MX_ID,
2603 .model_id = MX_25L512,
2604 .total_size = 64,
2605 .page_size = 256,
2606 .tested = TEST_UNTESTED,
2607 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002608 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002609 .block_erasers =
2610 {
2611 {
2612 .eraseblocks = { {4 * 1024, 16} },
2613 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002614 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002615 .eraseblocks = { {64 * 1024, 1} },
2616 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002617 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002618 .eraseblocks = { {64 * 1024, 1} },
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 = { {64 * 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 = { {64 * 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 = "MX25L1005",
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_25L1005,
2638 .total_size = 128,
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 Hailfingerf38431a2009-09-05 02:30:58 +00002643 .block_erasers =
2644 {
2645 {
2646 .eraseblocks = { {4 * 1024, 32} },
2647 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002648 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002649 .eraseblocks = { {64 * 1024, 2} },
2650 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002651 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002652 .eraseblocks = { {128 * 1024, 1} },
2653 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002654 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002655 .eraseblocks = { {128 * 1024, 1} },
2656 .block_erase = spi_block_erase_c7,
2657 },
2658 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002659 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002660 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002661 },
2662
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002663 {
2664 .vendor = "Macronix",
2665 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002666 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002667 .manufacture_id = MX_ID,
2668 .model_id = MX_25L2005,
2669 .total_size = 256,
2670 .page_size = 256,
2671 .tested = TEST_UNTESTED,
2672 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002673 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002674 .block_erasers =
2675 {
2676 {
2677 .eraseblocks = { {4 * 1024, 64} },
2678 .block_erase = spi_block_erase_20,
2679 }, {
2680 .eraseblocks = { {64 * 1024, 4} },
2681 .block_erase = spi_block_erase_52,
2682 }, {
2683 .eraseblocks = { {64 * 1024, 4} },
2684 .block_erase = spi_block_erase_d8,
2685 }, {
2686 .eraseblocks = { {256 * 1024, 1} },
2687 .block_erase = spi_block_erase_60,
2688 }, {
2689 .eraseblocks = { {256 * 1024, 1} },
2690 .block_erase = spi_block_erase_c7,
2691 },
2692 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002693 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002694 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002695 },
2696
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002697 {
2698 .vendor = "Macronix",
2699 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002700 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002701 .manufacture_id = MX_ID,
2702 .model_id = MX_25L4005,
2703 .total_size = 512,
2704 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002705 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002706 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002707 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002708 .block_erasers =
2709 {
2710 {
2711 .eraseblocks = { {4 * 1024, 128} },
2712 .block_erase = spi_block_erase_20,
2713 }, {
2714 .eraseblocks = { {64 * 1024, 8} },
2715 .block_erase = spi_block_erase_52,
2716 }, {
2717 .eraseblocks = { {64 * 1024, 8} },
2718 .block_erase = spi_block_erase_d8,
2719 }, {
2720 .eraseblocks = { {512 * 1024, 1} },
2721 .block_erase = spi_block_erase_60,
2722 }, {
2723 .eraseblocks = { {512 * 1024, 1} },
2724 .block_erase = spi_block_erase_c7,
2725 },
2726 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002727 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002728 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002729 },
2730
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002731 {
2732 .vendor = "Macronix",
2733 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002734 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002735 .manufacture_id = MX_ID,
2736 .model_id = MX_25L8005,
2737 .total_size = 1024,
2738 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002739 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002740 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002741 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002742 .block_erasers =
2743 {
2744 {
2745 .eraseblocks = { {4 * 1024, 256} },
2746 .block_erase = spi_block_erase_20,
2747 }, {
2748 .eraseblocks = { {64 * 1024, 16} },
2749 .block_erase = spi_block_erase_52,
2750 }, {
2751 .eraseblocks = { {64 * 1024, 16} },
2752 .block_erase = spi_block_erase_d8,
2753 }, {
2754 .eraseblocks = { {1024 * 1024, 1} },
2755 .block_erase = spi_block_erase_60,
2756 }, {
2757 .eraseblocks = { {1024 * 1024, 1} },
2758 .block_erase = spi_block_erase_c7,
2759 },
2760 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002761 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002762 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002763 },
2764
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002765 {
2766 .vendor = "Macronix",
2767 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002768 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002769 .manufacture_id = MX_ID,
2770 .model_id = MX_25L1605,
2771 .total_size = 2048,
2772 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002773 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002774 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002775 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002776 .block_erasers =
2777 {
2778 {
2779 .eraseblocks = { {4 * 1024, 512} },
2780 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2781 }, {
2782 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2783 .block_erase = spi_block_erase_52,
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 Guilloux5c5b5252009-01-08 03:40:17 +00002796 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002797 },
2798
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002799 {
2800 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002801 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002802 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002803 .manufacture_id = MX_ID,
2804 .model_id = MX_25L1635D,
2805 .total_size = 2048,
2806 .page_size = 256,
2807 .tested = TEST_UNTESTED,
2808 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002809 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002810 .block_erasers =
2811 {
2812 {
2813 .eraseblocks = { {4 * 1024, 512} },
2814 .block_erase = spi_block_erase_20,
2815 }, {
2816 .eraseblocks = { {64 * 1024, 32} },
2817 .block_erase = spi_block_erase_d8,
2818 }, {
2819 .eraseblocks = { {2 * 1024 * 1024, 1} },
2820 .block_erase = spi_block_erase_60,
2821 }, {
2822 .eraseblocks = { {2 * 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 Guillouxf5c70902009-04-19 23:04:00 +00002827 .read = spi_chip_read,
2828 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002829
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002830 {
2831 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002832 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002833 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002834 .manufacture_id = MX_ID,
2835 .model_id = MX_25L3205,
2836 .total_size = 4096,
2837 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002838 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002839 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002840 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002841 .block_erasers =
2842 {
2843 {
2844 .eraseblocks = { {4 * 1024, 1024} },
2845 .block_erase = spi_block_erase_20,
2846 }, {
2847 .eraseblocks = { {4 * 1024, 1024} },
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 Guilloux5c5b5252009-01-08 03:40:17 +00002858 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002859 },
2860
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002861 {
2862 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002863 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002864 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002865 .manufacture_id = MX_ID,
2866 .model_id = MX_25L3235D,
2867 .total_size = 4096,
2868 .page_size = 256,
2869 .tested = TEST_UNTESTED,
2870 .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 = { {4 * 1024, 1024} },
2876 .block_erase = spi_block_erase_20,
2877 }, {
2878 .eraseblocks = { {64 * 1024, 64} },
2879 .block_erase = spi_block_erase_d8,
2880 }, {
2881 .eraseblocks = { {4 * 1024 * 1024, 1} },
2882 .block_erase = spi_block_erase_60,
2883 }, {
2884 .eraseblocks = { {4 * 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 Guilloux70ea9a32009-04-23 22:51:56 +00002889 .read = spi_chip_read,
2890 },
2891
2892 {
2893 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002894 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002895 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002896 .manufacture_id = MX_ID,
2897 .model_id = MX_25L6405,
2898 .total_size = 8192,
2899 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002900 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002901 .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 = { {64 * 1024, 128} },
2907 .block_erase = spi_block_erase_20,
2908 }, {
2909 .eraseblocks = { {64 * 1024, 128} },
2910 .block_erase = spi_block_erase_d8,
2911 }, {
2912 .eraseblocks = { {8 * 1024 * 1024, 1} },
2913 .block_erase = spi_block_erase_60,
2914 }, {
2915 .eraseblocks = { {8 * 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 Guilloux5c5b5252009-01-08 03:40:17 +00002920 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002921 },
2922
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002923 {
2924 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002925 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002926 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002927 .manufacture_id = MX_ID,
2928 .model_id = MX_25L12805,
2929 .total_size = 16384,
2930 .page_size = 256,
2931 .tested = TEST_UNTESTED,
2932 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002933 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002934 .block_erasers =
2935 {
2936 {
2937 .eraseblocks = { {4 * 1024, 4096} },
2938 .block_erase = spi_block_erase_20,
2939 }, {
2940 .eraseblocks = { {64 * 1024, 256} },
2941 .block_erase = spi_block_erase_d8,
2942 }, {
2943 .eraseblocks = { {16 * 1024 * 1024, 1} },
2944 .block_erase = spi_block_erase_60,
2945 }, {
2946 .eraseblocks = { {16 * 1024 * 1024, 1} },
2947 .block_erase = spi_block_erase_c7,
2948 }
2949 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002950 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002951 .read = spi_chip_read,
2952 },
2953
2954 {
2955 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002956 .name = "MX29F001B",
2957 .bustype = CHIP_BUSTYPE_PARALLEL,
2958 .manufacture_id = MX_ID,
2959 .model_id = MX_29F001B,
2960 .total_size = 128,
2961 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002962 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2963 .tested = TEST_UNTESTED,
2964 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002965 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002966 .block_erasers =
2967 {
2968 {
2969 .eraseblocks = {
2970 {8 * 1024, 1},
2971 {4 * 1024, 2},
2972 {8 * 1024, 2},
2973 {32 * 1024, 1},
2974 {64 * 1024, 1},
2975 },
Sean Nelson35727f72010-01-28 23:55:12 +00002976 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002977 }, {
2978 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002979 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002980 }
2981 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002982 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002983 .read = read_memmapped,
2984 },
2985
2986 {
2987 .vendor = "Macronix",
2988 .name = "MX29F001T",
2989 .bustype = CHIP_BUSTYPE_PARALLEL,
2990 .manufacture_id = MX_ID,
2991 .model_id = MX_29F001T,
2992 .total_size = 128,
2993 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002994 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2995 .tested = TEST_UNTESTED,
2996 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002997 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002998 .block_erasers =
2999 {
3000 {
3001 .eraseblocks = {
3002 {64 * 1024, 1},
3003 {32 * 1024, 1},
3004 {8 * 1024, 2},
3005 {4 * 1024, 2},
3006 {8 * 1024, 1},
3007 },
Sean Nelson35727f72010-01-28 23:55:12 +00003008 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003009 }, {
3010 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003011 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003012 }
3013 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003014 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003015 .read = read_memmapped,
3016 },
3017
3018 {
3019 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003020 .name = "MX29F002B",
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_29F002B,
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,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003027 .tested = TEST_UNTESTED,
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 {16 * 1024, 1},
3035 {8 * 1024, 2},
3036 {32 * 1024, 1},
3037 {64 * 1024, 3},
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",
3051 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003052 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003053 .manufacture_id = MX_ID,
3054 .model_id = MX_29F002T,
3055 .total_size = 256,
3056 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003057 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003058 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00003059 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003060 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003061 .block_erasers =
3062 {
3063 {
3064 .eraseblocks = {
3065 {64 * 1024, 3},
3066 {32 * 1024, 1},
3067 {8 * 1024, 2},
3068 {16 * 1024, 1},
3069 },
Sean Nelson35727f72010-01-28 23:55:12 +00003070 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003071 }, {
3072 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003073 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003074 },
3075 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003076 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003077 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003078 },
3079
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003080 {
3081 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003082 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003083 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003084 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003085 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003086 .total_size = 512,
3087 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003088 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3089 .tested = TEST_UNTESTED,
3090 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003091 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003092 .block_erasers =
3093 {
3094 {
3095 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00003096 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003097 }, {
3098 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003099 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003100 },
3101 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003102 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003103 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00003104 },
3105
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003106 {
3107 .vendor = "Numonyx",
3108 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003109 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003110 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003111 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003112 .total_size = 128,
3113 .page_size = 256,
3114 .tested = TEST_UNTESTED,
3115 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003116 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003117 .block_erasers =
3118 {
3119 {
3120 .eraseblocks = { {4 * 1024, 32} },
3121 .block_erase = spi_block_erase_20,
3122 }, {
3123 .eraseblocks = { {64 * 1024, 2} },
3124 .block_erase = spi_block_erase_d8,
3125 }, {
3126 .eraseblocks = { {128 * 1024, 1} },
3127 .block_erase = spi_block_erase_c7,
3128 }
3129 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003130 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003131 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003132 },
3133
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003134 {
3135 .vendor = "Numonyx",
3136 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003137 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003138 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003139 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003140 .total_size = 256,
3141 .page_size = 256,
3142 .tested = TEST_UNTESTED,
3143 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003144 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003145 .block_erasers =
3146 {
3147 {
3148 .eraseblocks = { {4 * 1024, 64} },
3149 .block_erase = spi_block_erase_20,
3150 }, {
3151 .eraseblocks = { {64 * 1024, 4} },
3152 .block_erase = spi_block_erase_d8,
3153 }, {
3154 .eraseblocks = { {256 * 1024, 1} },
3155 .block_erase = spi_block_erase_c7,
3156 }
3157 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003158 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003159 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003160 },
3161
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003162 {
3163 .vendor = "Numonyx",
3164 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003165 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003166 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003167 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003168 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003169 .page_size = 256,
3170 .tested = TEST_UNTESTED,
3171 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003172 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003173 .block_erasers =
3174 {
3175 {
3176 .eraseblocks = { {4 * 1024, 128} },
3177 .block_erase = spi_block_erase_20,
3178 }, {
3179 .eraseblocks = { {64 * 1024, 8} },
3180 .block_erase = spi_block_erase_d8,
3181 }, {
3182 .eraseblocks = { {512 * 1024, 1} },
3183 .block_erase = spi_block_erase_c7,
3184 }
3185 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003186 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003187 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003188 },
3189
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003190 {
3191 .vendor = "Numonyx",
3192 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003193 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003194 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003195 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003196 .total_size = 1024,
3197 .page_size = 256,
3198 .tested = TEST_OK_PREW,
3199 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003200 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003201 .block_erasers =
3202 {
3203 {
3204 .eraseblocks = { {4 * 1024, 256} },
3205 .block_erase = spi_block_erase_20,
3206 }, {
3207 .eraseblocks = { {64 * 1024, 16} },
3208 .block_erase = spi_block_erase_d8,
3209 }, {
3210 .eraseblocks = { {1024 * 1024, 1} },
3211 .block_erase = spi_block_erase_c7,
3212 }
3213 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003214 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003215 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003216 },
3217
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003218 {
3219 .vendor = "Numonyx",
3220 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003221 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003222 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003223 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003224 .total_size = 2048,
3225 .page_size = 256,
3226 .tested = TEST_UNTESTED,
3227 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003228 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003229 .block_erasers =
3230 {
3231 {
3232 .eraseblocks = { {4 * 1024, 512} },
3233 .block_erase = spi_block_erase_20,
3234 }, {
3235 .eraseblocks = { {64 * 1024, 32} },
3236 .block_erase = spi_block_erase_d8,
3237 }, {
3238 .eraseblocks = { {2 * 1024 * 1024, 1} },
3239 .block_erase = spi_block_erase_c7,
3240 }
3241 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003242 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003243 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003244 },
3245
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003246 {
3247 .vendor = "PMC",
3248 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003249 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003250 .manufacture_id = PMC_ID,
3251 .model_id = PMC_25LV010,
3252 .total_size = 128,
3253 .page_size = 256,
3254 .tested = TEST_UNTESTED,
3255 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003256 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003257 .block_erasers =
3258 {
3259 {
3260 .eraseblocks = { {4 * 1024, 32} },
3261 .block_erase = spi_block_erase_d7,
3262 }, {
3263 .eraseblocks = { {32 * 1024, 4} },
3264 .block_erase = spi_block_erase_d8,
3265 }, {
3266 .eraseblocks = { {128 * 1024, 1} },
3267 .block_erase = spi_block_erase_c7,
3268 }
3269 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003270 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003271 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003272 },
3273
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003274 {
3275 .vendor = "PMC",
3276 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003277 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003278 .manufacture_id = PMC_ID,
3279 .model_id = PMC_25LV016B,
3280 .total_size = 2048,
3281 .page_size = 256,
3282 .tested = TEST_UNTESTED,
3283 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003284 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003285 .block_erasers =
3286 {
3287 {
3288 .eraseblocks = { {4 * 1024, 512} },
3289 .block_erase = spi_block_erase_d7,
3290 }, {
3291 .eraseblocks = { {4 * 1024, 512} },
3292 .block_erase = spi_block_erase_20,
3293 }, {
3294 .eraseblocks = { {64 * 1024, 32} },
3295 .block_erase = spi_block_erase_d8,
3296 }, {
3297 .eraseblocks = { {2 * 1024 * 1024, 1} },
3298 .block_erase = spi_block_erase_60,
3299 }, {
3300 .eraseblocks = { {2 * 1024 * 1024, 1} },
3301 .block_erase = spi_block_erase_c7,
3302 }
3303 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003304 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003305 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003306 },
3307
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003308 {
3309 .vendor = "PMC",
3310 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003311 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003312 .manufacture_id = PMC_ID,
3313 .model_id = PMC_25LV020,
3314 .total_size = 256,
3315 .page_size = 256,
3316 .tested = TEST_UNTESTED,
3317 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003318 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003319 .block_erasers =
3320 {
3321 {
3322 .eraseblocks = { {4 * 1024, 64} },
3323 .block_erase = spi_block_erase_d7,
3324 }, {
3325 .eraseblocks = { {64 * 1024, 4} },
3326 .block_erase = spi_block_erase_d8,
3327 }, {
3328 .eraseblocks = { {256 * 1024, 1} },
3329 .block_erase = spi_block_erase_c7,
3330 }
3331 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003332 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003333 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003334 },
3335
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003336 {
3337 .vendor = "PMC",
3338 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003339 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003340 .manufacture_id = PMC_ID,
3341 .model_id = PMC_25LV040,
3342 .total_size = 512,
3343 .page_size = 256,
3344 .tested = TEST_UNTESTED,
3345 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003346 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003347 .block_erasers =
3348 {
3349 {
3350 .eraseblocks = { {4 * 1024, 128} },
3351 .block_erase = spi_block_erase_d7,
3352 }, {
3353 .eraseblocks = { {64 * 1024, 8} },
3354 .block_erase = spi_block_erase_d8,
3355 }, {
3356 .eraseblocks = { {512 * 1024, 1} },
3357 .block_erase = spi_block_erase_c7,
3358 }
3359 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003360 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003361 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003362 },
3363
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003364 {
3365 .vendor = "PMC",
3366 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003367 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003368 .manufacture_id = PMC_ID,
3369 .model_id = PMC_25LV080B,
3370 .total_size = 1024,
3371 .page_size = 256,
3372 .tested = TEST_UNTESTED,
3373 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003374 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003375 .block_erasers =
3376 {
3377 {
3378 .eraseblocks = { {4 * 1024, 256} },
3379 .block_erase = spi_block_erase_d7,
3380 }, {
3381 .eraseblocks = { {4 * 1024, 256} },
3382 .block_erase = spi_block_erase_20,
3383 }, {
3384 .eraseblocks = { {64 * 1024, 16} },
3385 .block_erase = spi_block_erase_d8,
3386 }, {
3387 .eraseblocks = { {1024 * 1024, 1} },
3388 .block_erase = spi_block_erase_60,
3389 }, {
3390 .eraseblocks = { {1024 * 1024, 1} },
3391 .block_erase = spi_block_erase_c7,
3392 }
3393 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003394 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003395 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003396 },
3397
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003398 {
3399 .vendor = "PMC",
3400 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003401 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003402 .manufacture_id = PMC_ID,
3403 .model_id = PMC_25LV512,
3404 .total_size = 64,
3405 .page_size = 256,
3406 .tested = TEST_UNTESTED,
3407 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003408 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003409 .block_erasers =
3410 {
3411 {
3412 .eraseblocks = { {4 * 1024, 16} },
3413 .block_erase = spi_block_erase_d7,
3414 }, {
3415 .eraseblocks = { {32 * 1024, 2} },
3416 .block_erase = spi_block_erase_d8,
3417 }, {
3418 .eraseblocks = { {64 * 1024, 1} },
3419 .block_erase = spi_block_erase_c7,
3420 }
3421 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003422 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003423 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003424 },
3425
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003426 {
3427 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003428 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003429 .bustype = CHIP_BUSTYPE_PARALLEL,
3430 .manufacture_id = PMC_ID_NOPREFIX,
3431 .model_id = PMC_29F002T,
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,
3435 .tested = TEST_UNTESTED,
3436 .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 {128 * 1024, 1},
3443 {96 * 1024, 1},
3444 {8 * 1024, 2},
3445 {16 * 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",
Sean Nelson72a9a022009-12-22 22:15:33 +00003459 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003460 .bustype = CHIP_BUSTYPE_PARALLEL,
3461 .manufacture_id = PMC_ID_NOPREFIX,
3462 .model_id = PMC_29F002B,
3463 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003464 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003465 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003466 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003467 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003468 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003469 .block_erasers =
3470 {
3471 {
3472 .eraseblocks = {
3473 {16 * 1024, 1},
3474 {8 * 1024, 2},
3475 {96 * 1024, 1},
3476 {128 * 1024, 1},
3477 },
Sean Nelson35727f72010-01-28 23:55:12 +00003478 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003479 }, {
3480 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003481 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003482 },
3483 },
Sean Nelson35727f72010-01-28 23:55:12 +00003484 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003485 .read = read_memmapped,
3486 },
3487
3488 {
3489 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003490 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003491 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003492 .manufacture_id = PMC_ID_NOPREFIX,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003493 .model_id = PMC_39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003494 .total_size = 128,
3495 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003496 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00003497 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003498 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003499 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003500 .block_erasers =
3501 {
3502 {
3503 .eraseblocks = { {4 * 1024, 32} },
3504 .block_erase = erase_sector_jedec,
3505 }, {
3506 .eraseblocks = { {64 * 1024, 2} },
3507 .block_erase = erase_block_jedec,
3508 }, {
3509 .eraseblocks = { {128 * 1024, 1} },
3510 .block_erase = erase_chip_block_jedec,
3511 }
3512 },
Sean Nelson35727f72010-01-28 23:55:12 +00003513 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003514 .read = read_memmapped,
3515 },
3516
3517 {
3518 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003519 .name = "Pm39LV020",
3520 .bustype = CHIP_BUSTYPE_PARALLEL,
3521 .manufacture_id = PMC_ID_NOPREFIX,
3522 .model_id = PMC_39LV020,
3523 .total_size = 256,
3524 .page_size = 4096,
3525 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3526 .tested = TEST_UNTESTED,
3527 .probe = probe_jedec,
3528 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3529 .block_erasers =
3530 {
3531 {
3532 .eraseblocks = { {4 * 1024, 64} },
3533 .block_erase = erase_sector_jedec,
3534 }, {
3535 .eraseblocks = { {64 * 1024, 4} },
3536 .block_erase = erase_block_jedec,
3537 }, {
3538 .eraseblocks = { {256 * 1024, 1} },
3539 .block_erase = erase_chip_block_jedec,
3540 }
3541 },
3542 .write = write_jedec_1,
3543 .read = read_memmapped,
3544 },
3545
3546 {
3547 .vendor = "PMC",
3548 .name = "Pm39LV040",
3549 .bustype = CHIP_BUSTYPE_PARALLEL,
3550 .manufacture_id = PMC_ID_NOPREFIX,
3551 .model_id = PMC_39LV040,
3552 .total_size = 512,
3553 .page_size = 4096,
3554 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3555 .tested = TEST_UNTESTED,
3556 .probe = probe_jedec,
3557 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3558 .block_erasers =
3559 {
3560 {
3561 .eraseblocks = { {4 * 1024, 128} },
3562 .block_erase = erase_sector_jedec,
3563 }, {
3564 .eraseblocks = { {64 * 1024, 8} },
3565 .block_erase = erase_block_jedec,
3566 }, {
3567 .eraseblocks = { {512 * 1024, 1} },
3568 .block_erase = erase_chip_block_jedec,
3569 }
3570 },
3571 .write = write_jedec_1,
3572 .read = read_memmapped,
3573 },
3574
3575 {
3576 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003577 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003578 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003579 .manufacture_id = PMC_ID_NOPREFIX,
3580 .model_id = PMC_49FL002,
3581 .total_size = 256,
3582 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003583 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00003584 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003585 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003586 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003587 .block_erasers =
3588 {
3589 {
3590 .eraseblocks = { {4 * 1024, 64} },
3591 .block_erase = erase_sector_jedec,
3592 }, {
3593 .eraseblocks = { {16 * 1024, 16} },
3594 .block_erase = erase_block_jedec,
3595 }, {
3596 .eraseblocks = { {256 * 1024, 1} },
3597 .block_erase = erase_chip_block_jedec,
3598 }
3599 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003600 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003601 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003602 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003603 },
3604
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003605 {
3606 .vendor = "PMC",
3607 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003608 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003609 .manufacture_id = PMC_ID_NOPREFIX,
3610 .model_id = PMC_49FL004,
3611 .total_size = 512,
3612 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003613 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00003614 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003615 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003616 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003617 .block_erasers =
3618 {
3619 {
3620 .eraseblocks = { {4 * 1024, 128} },
3621 .block_erase = erase_sector_jedec,
3622 }, {
3623 .eraseblocks = { {64 * 1024, 8} },
3624 .block_erase = erase_block_jedec,
3625 }, {
3626 .eraseblocks = { {512 * 1024, 1} },
3627 .block_erase = erase_chip_block_jedec,
3628 }
3629 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003630 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003631 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003632 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003633 },
3634
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003635 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003636 .vendor = "Sanyo",
3637 .name = "LF25FW203A",
3638 .bustype = CHIP_BUSTYPE_SPI,
3639 .manufacture_id = SANYO_ID,
3640 .model_id = SANYO_LE25FW203A,
3641 .total_size = 2048,
3642 .page_size = 256,
3643 .tested = TEST_UNTESTED,
3644 .probe = probe_spi_rdid,
3645 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003646 .block_erasers =
3647 {
3648 {
3649 .eraseblocks = { {64 * 1024, 32} },
3650 .block_erase = spi_block_erase_d8,
3651 }, {
3652 .eraseblocks = { {2 * 1024 * 1024, 1} },
3653 .block_erase = spi_block_erase_c7,
3654 }
3655 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003656 .write = spi_chip_write_256,
3657 .read = spi_chip_read,
3658 },
3659
3660 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003661 .vendor = "Sharp",
3662 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003663 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003664 .manufacture_id = SHARP_ID,
3665 .model_id = SHARP_LHF00L04,
3666 .total_size = 1024,
3667 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003668 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003669 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003670 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003671 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003672 .block_erasers =
3673 {
3674 {
3675 .eraseblocks = {
3676 {64 * 1024, 15},
3677 {8 * 1024, 8}
3678 },
Sean Nelson28accc22010-03-19 18:47:06 +00003679 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003680 }, {
3681 .eraseblocks = {
3682 {1024 * 1024, 1}
3683 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003684 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003685 },
3686 },
Sean Nelson28accc22010-03-19 18:47:06 +00003687 .unlock = unlock_82802ab,
3688 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003689 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003690 },
3691
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003692 {
3693 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003694 .name = "S25FL008A",
3695 .bustype = CHIP_BUSTYPE_SPI,
3696 .manufacture_id = SPANSION_ID,
3697 .model_id = SPANSION_S25FL008A,
3698 .total_size = 1024,
3699 .page_size = 256,
3700 .tested = TEST_OK_PREW,
3701 .probe = probe_spi_rdid,
3702 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003703 .block_erasers =
3704 {
3705 {
3706 .eraseblocks = { {64 * 1024, 16} },
3707 .block_erase = spi_block_erase_d8,
3708 }, {
3709 .eraseblocks = { {1024 * 1024, 1} },
3710 .block_erase = spi_block_erase_c7,
3711 }
3712 },
3713 .write = spi_chip_write_256,
3714 .read = spi_chip_read,
3715 },
3716
3717 {
3718 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003719 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003720 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003721 .manufacture_id = SPANSION_ID,
3722 .model_id = SPANSION_S25FL016A,
3723 .total_size = 2048,
3724 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003725 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003726 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003727 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003728 .block_erasers =
3729 {
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_c7,
3736 }
3737 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003738 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003739 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003740 },
3741
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003742 {
3743 .vendor = "SST",
3744 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003745 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003746 .manufacture_id = SST_ID,
3747 .model_id = SST_25VF016B,
3748 .total_size = 2048,
3749 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003750 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003751 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003752 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003753 .block_erasers =
3754 {
3755 {
3756 .eraseblocks = { {4 * 1024, 512} },
3757 .block_erase = spi_block_erase_20,
3758 }, {
3759 .eraseblocks = { {32 * 1024, 64} },
3760 .block_erase = spi_block_erase_52,
3761 }, {
3762 .eraseblocks = { {64 * 1024, 32} },
3763 .block_erase = spi_block_erase_d8,
3764 }, {
3765 .eraseblocks = { {2 * 1024 * 1024, 1} },
3766 .block_erase = spi_block_erase_60,
3767 }, {
3768 .eraseblocks = { {2 * 1024 * 1024, 1} },
3769 .block_erase = spi_block_erase_c7,
3770 },
3771 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003772 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003773 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003774 },
3775
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003776 {
3777 .vendor = "SST",
3778 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003779 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003780 .manufacture_id = SST_ID,
3781 .model_id = SST_25VF032B,
3782 .total_size = 4096,
3783 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003784 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003785 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003786 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003787 .block_erasers =
3788 {
3789 {
3790 .eraseblocks = { {4 * 1024, 1024} },
3791 .block_erase = spi_block_erase_20,
3792 }, {
3793 .eraseblocks = { {32 * 1024, 128} },
3794 .block_erase = spi_block_erase_52,
3795 }, {
3796 .eraseblocks = { {64 * 1024, 64} },
3797 .block_erase = spi_block_erase_d8,
3798 }, {
3799 .eraseblocks = { {4 * 1024 * 1024, 1} },
3800 .block_erase = spi_block_erase_60,
3801 }, {
3802 .eraseblocks = { {4 * 1024 * 1024, 1} },
3803 .block_erase = spi_block_erase_c7,
3804 },
3805 },
3806 .write = spi_chip_write_1,
3807 .read = spi_chip_read,
3808 },
3809
3810 {
3811 .vendor = "SST",
3812 .name = "SST25VF040.REMS",
3813 .bustype = CHIP_BUSTYPE_SPI,
3814 .manufacture_id = SST_ID,
3815 .model_id = SST_25VF040_REMS,
3816 .total_size = 512,
3817 .page_size = 256,
3818 .tested = TEST_OK_PR,
3819 .probe = probe_spi_rems,
3820 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003821 .block_erasers =
3822 {
3823 {
3824 .eraseblocks = { {4 * 1024, 128} },
3825 .block_erase = spi_block_erase_20,
3826 }, {
3827 .eraseblocks = { {32 * 1024, 16} },
3828 .block_erase = spi_block_erase_52,
3829 }, {
3830 .eraseblocks = { {512 * 1024, 1} },
3831 .block_erase = spi_block_erase_60,
3832 },
3833 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003834 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003835 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003836 },
3837
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003838 {
3839 .vendor = "SST",
3840 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003841 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003842 .manufacture_id = SST_ID,
3843 .model_id = SST_25VF040B,
3844 .total_size = 512,
3845 .page_size = 256,
3846 .tested = TEST_UNTESTED,
3847 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003848 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003849 .block_erasers =
3850 {
3851 {
3852 .eraseblocks = { {4 * 1024, 128} },
3853 .block_erase = spi_block_erase_20,
3854 }, {
3855 .eraseblocks = { {32 * 1024, 16} },
3856 .block_erase = spi_block_erase_52,
3857 }, {
3858 .eraseblocks = { {64 * 1024, 8} },
3859 .block_erase = spi_block_erase_d8,
3860 }, {
3861 .eraseblocks = { {512 * 1024, 1} },
3862 .block_erase = spi_block_erase_60,
3863 }, {
3864 .eraseblocks = { {512 * 1024, 1} },
3865 .block_erase = spi_block_erase_c7,
3866 },
3867 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003868 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003869 .read = spi_chip_read,
3870 },
3871
3872 {
3873 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00003874 .name = "SST25LF040A.RES",
3875 .bustype = CHIP_BUSTYPE_SPI,
3876 .manufacture_id = SST_ID,
3877 .model_id = SST_25VF040_REMS,
3878 .total_size = 512,
3879 .page_size = 256,
3880 .tested = TEST_OK_PROBE,
3881 .probe = probe_spi_res2,
3882 .probe_timing = TIMING_ZERO,
3883 .block_erasers =
3884 {
3885 {
3886 .eraseblocks = { {4 * 1024, 128} },
3887 .block_erase = spi_block_erase_20,
3888 }, {
3889 .eraseblocks = { {32 * 1024, 16} },
3890 .block_erase = spi_block_erase_52,
3891 }, {
3892 .eraseblocks = { {512 * 1024, 1} },
3893 .block_erase = spi_block_erase_60,
3894 },
3895 },
3896 .write = spi_chip_write_1,
3897 .read = spi_chip_read,
3898 },
3899
3900 {
3901 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003902 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003903 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003904 .manufacture_id = SST_ID,
3905 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003906 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003907 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003908 .tested = TEST_OK_PR,
3909 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003910 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003911 .block_erasers =
3912 {
3913 {
3914 .eraseblocks = { {4 * 1024, 128} },
3915 .block_erase = spi_block_erase_20,
3916 }, {
3917 .eraseblocks = { {32 * 1024, 16} },
3918 .block_erase = spi_block_erase_52,
3919 }, {
3920 .eraseblocks = { {64 * 1024, 8} },
3921 .block_erase = spi_block_erase_d8,
3922 }, {
3923 .eraseblocks = { {512 * 1024, 1} },
3924 .block_erase = spi_block_erase_60,
3925 }, {
3926 .eraseblocks = { {512 * 1024, 1} },
3927 .block_erase = spi_block_erase_c7,
3928 },
3929 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003930 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003931 .read = spi_chip_read,
3932 },
3933
3934 {
3935 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003936 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003937 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003938 .manufacture_id = SST_ID,
3939 .model_id = SST_25VF080B,
3940 .total_size = 1024,
3941 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003942 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003943 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003944 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003945 .block_erasers =
3946 {
3947 {
3948 .eraseblocks = { {4 * 1024, 256} },
3949 .block_erase = spi_block_erase_20,
3950 }, {
3951 .eraseblocks = { {32 * 1024, 32} },
3952 .block_erase = spi_block_erase_52,
3953 }, {
3954 .eraseblocks = { {64 * 1024, 16} },
3955 .block_erase = spi_block_erase_d8,
3956 }, {
3957 .eraseblocks = { {1024 * 1024, 1} },
3958 .block_erase = spi_block_erase_60,
3959 }, {
3960 .eraseblocks = { {1024 * 1024, 1} },
3961 .block_erase = spi_block_erase_c7,
3962 },
3963 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003964 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003965 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003966 },
3967
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003968 {
3969 .vendor = "SST",
3970 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003971 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003972 .manufacture_id = SST_ID,
3973 .model_id = SST_28SF040,
3974 .total_size = 512,
3975 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003976 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003977 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003978 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003979 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003980 .block_erasers =
3981 {
3982 {
3983 .eraseblocks = { {128, 4096} },
3984 .block_erase = erase_sector_28sf040,
3985 }, {
3986 .eraseblocks = { {512 * 1024, 1} },
3987 .block_erase = erase_chip_28sf040,
3988 }
3989 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003990 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003991 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003992 },
3993
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003994 {
3995 .vendor = "SST",
3996 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003997 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003998 .manufacture_id = SST_ID,
3999 .model_id = SST_29EE010,
4000 .total_size = 128,
4001 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004002 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004003 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004004 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004005 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004006 .block_erasers =
4007 {
4008 {
4009 .eraseblocks = { {128 * 1024, 1} },
4010 .block_erase = erase_chip_block_jedec,
4011 }
4012 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004013 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004014 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004015 },
4016
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004017 {
4018 .vendor = "SST",
4019 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004020 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004021 .manufacture_id = SST_ID,
4022 .model_id = SST_29LE010,
4023 .total_size = 128,
4024 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004025 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004026 .tested = TEST_UNTESTED,
4027 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004028 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004029 .block_erasers =
4030 {
4031 {
4032 .eraseblocks = { {128 * 1024, 1} },
4033 .block_erase = erase_chip_block_jedec,
4034 }
4035 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004036 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004037 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004038 },
4039
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004040 {
4041 .vendor = "SST",
4042 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004043 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004044 .manufacture_id = SST_ID,
4045 .model_id = SST_29EE020A,
4046 .total_size = 256,
4047 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004048 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004049 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004050 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004051 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004052 .block_erasers =
4053 {
4054 {
4055 .eraseblocks = { {256 * 1024, 1} },
4056 .block_erase = erase_chip_block_jedec,
4057 }
4058 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004059 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004060 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004061 },
4062
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004063 {
4064 .vendor = "SST",
4065 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004066 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004067 .manufacture_id = SST_ID,
4068 .model_id = SST_29LE020,
4069 .total_size = 256,
4070 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004071 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00004072 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004073 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004074 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004075 .block_erasers =
4076 {
4077 {
4078 .eraseblocks = { {256 * 1024, 1} },
4079 .block_erase = erase_chip_block_jedec,
4080 }
4081 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004082 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004083 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004084 },
4085
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004086 {
4087 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00004088 .name = "SST39SF512",
4089 .bustype = CHIP_BUSTYPE_PARALLEL,
4090 .manufacture_id = SST_ID,
4091 .model_id = SST_39SF512,
4092 .total_size = 64,
4093 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004094 .feature_bits = FEATURE_EITHER_RESET,
4095 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004096 .probe = probe_jedec,
4097 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00004098 .block_erasers =
4099 {
4100 {
4101 .eraseblocks = { {4 * 1024, 16} },
4102 .block_erase = erase_sector_jedec,
4103 }, {
4104 .eraseblocks = { {64 * 1024, 1} },
4105 .block_erase = erase_chip_block_jedec,
4106 }
4107 },
Sean Nelson35727f72010-01-28 23:55:12 +00004108 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004109 .read = read_memmapped,
4110 },
4111
4112 {
4113 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004114 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004115 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004116 .manufacture_id = SST_ID,
4117 .model_id = SST_39SF010,
4118 .total_size = 128,
4119 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004120 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004121 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004122 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004123 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004124 .block_erasers =
4125 {
4126 {
4127 .eraseblocks = { {4 * 1024, 32} },
4128 .block_erase = erase_sector_jedec,
4129 }, {
4130 .eraseblocks = { {128 * 1024, 1} },
4131 .block_erase = erase_chip_block_jedec,
4132 }
4133 },
Sean Nelson35727f72010-01-28 23:55:12 +00004134 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004135 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004136 },
4137
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004138 {
4139 .vendor = "SST",
4140 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004141 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004142 .manufacture_id = SST_ID,
4143 .model_id = SST_39SF020,
4144 .total_size = 256,
4145 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004146 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004147 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004148 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004149 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004150 .block_erasers =
4151 {
4152 {
4153 .eraseblocks = { {4 * 1024, 64} },
4154 .block_erase = erase_sector_jedec,
4155 }, {
4156 .eraseblocks = { {256 * 1024, 1} },
4157 .block_erase = erase_chip_block_jedec,
4158 }
4159 },
Sean Nelson35727f72010-01-28 23:55:12 +00004160 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004161 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004162 },
4163
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004164 {
4165 .vendor = "SST",
4166 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004167 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004168 .manufacture_id = SST_ID,
4169 .model_id = SST_39SF040,
4170 .total_size = 512,
4171 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004172 .feature_bits = FEATURE_EITHER_RESET,
4173 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004174 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004175 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004176 .block_erasers =
4177 {
4178 {
4179 .eraseblocks = { {4 * 1024, 128} },
4180 .block_erase = erase_sector_jedec,
4181 }, {
4182 .eraseblocks = { {512 * 1024, 1} },
4183 .block_erase = erase_chip_block_jedec,
4184 }
4185 },
Sean Nelson35727f72010-01-28 23:55:12 +00004186 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004187 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004188 },
4189
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004190 {
4191 .vendor = "SST",
4192 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00004193 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004194 .manufacture_id = SST_ID,
4195 .model_id = SST_39VF512,
4196 .total_size = 64,
4197 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004198 .feature_bits = FEATURE_EITHER_RESET,
4199 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004200 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004201 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00004202 .block_erasers =
4203 {
4204 {
4205 .eraseblocks = { {4 * 1024, 16} },
4206 .block_erase = erase_sector_jedec,
4207 }, {
4208 .eraseblocks = { {64 * 1024, 1} },
4209 .block_erase = erase_chip_block_jedec,
4210 }
4211 },
Sean Nelson35727f72010-01-28 23:55:12 +00004212 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004213 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004214 },
4215
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004216 {
4217 .vendor = "SST",
4218 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004219 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004220 .manufacture_id = SST_ID,
4221 .model_id = SST_39VF010,
4222 .total_size = 128,
4223 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004224 .feature_bits = FEATURE_EITHER_RESET,
4225 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004226 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004227 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004228 .block_erasers =
4229 {
4230 {
4231 .eraseblocks = { {4 * 1024, 32} },
4232 .block_erase = erase_sector_jedec,
4233 }, {
4234 .eraseblocks = { {128 * 1024, 1} },
4235 .block_erase = erase_chip_block_jedec,
4236 }
4237 },
Sean Nelson35727f72010-01-28 23:55:12 +00004238 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004239 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004240 },
4241
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004242 {
4243 .vendor = "SST",
4244 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004245 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004246 .manufacture_id = SST_ID,
4247 .model_id = SST_39VF020,
4248 .total_size = 256,
4249 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004250 .feature_bits = FEATURE_EITHER_RESET,
4251 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004252 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004253 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004254 .block_erasers =
4255 {
4256 {
4257 .eraseblocks = { {4 * 1024, 64} },
4258 .block_erase = erase_sector_jedec,
4259 }, {
4260 .eraseblocks = { {256 * 1024, 1} },
4261 .block_erase = erase_chip_block_jedec,
4262 }
4263 },
Sean Nelson35727f72010-01-28 23:55:12 +00004264 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004265 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004266 },
4267
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004268 {
4269 .vendor = "SST",
4270 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004271 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004272 .manufacture_id = SST_ID,
4273 .model_id = SST_39VF040,
4274 .total_size = 512,
4275 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004276 .feature_bits = FEATURE_EITHER_RESET,
4277 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004278 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004279 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004280 .block_erasers =
4281 {
4282 {
4283 .eraseblocks = { {4 * 1024, 128} },
4284 .block_erase = erase_sector_jedec,
4285 }, {
4286 .eraseblocks = { {512 * 1024, 1} },
4287 .block_erase = erase_chip_block_jedec,
4288 }
4289 },
Sean Nelson35727f72010-01-28 23:55:12 +00004290 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004291 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004292 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004293
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004294 {
4295 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004296 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004297 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004298 .manufacture_id = SST_ID,
4299 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004300 .total_size = 1024,
4301 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004302 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004303 .tested = TEST_UNTESTED,
4304 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004305 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004306 .block_erasers =
4307 {
4308 {
4309 .eraseblocks = { {4 * 1024, 256} },
4310 .block_erase = erase_sector_jedec,
4311 }, {
4312 .eraseblocks = { {64 * 1024, 16} },
4313 .block_erase = erase_block_jedec,
4314 }, {
4315 .eraseblocks = { {1024 * 1024, 1} },
4316 .block_erase = erase_chip_block_jedec,
4317 }
4318 },
Sean Nelson35727f72010-01-28 23:55:12 +00004319 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004320 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004321 },
4322
4323 {
4324 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004325 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004326 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004327 .manufacture_id = SST_ID,
4328 .model_id = SST_49LF002A,
4329 .total_size = 256,
4330 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004331 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004332 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004333 .probe = probe_jedec,
4334 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004335 .block_erasers =
4336 {
4337 {
4338 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004339 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004340 }, {
4341 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004342 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004343 }, {
4344 .eraseblocks = { {256 * 1024, 1} },
4345 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4346 }
4347 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004348 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004349 .unlock = unlock_sst_fwhub,
4350 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004351 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004352 },
4353
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004354 {
4355 .vendor = "SST",
4356 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004357 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004358 .manufacture_id = SST_ID,
4359 .model_id = SST_49LF003A,
4360 .total_size = 384,
4361 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004362 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004363 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004364 .probe = probe_jedec,
4365 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004366 .block_erasers =
4367 {
4368 {
4369 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004370 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004371 }, {
4372 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004373 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004374 }, {
4375 .eraseblocks = { {384 * 1024, 1} },
4376 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4377 }
4378 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004379 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004380 .unlock = unlock_sst_fwhub,
4381 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004382 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004383 },
4384
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004385 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004386 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4387 * and is only honored for 64k block erase, but not 4k sector erase.
4388 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004389 .vendor = "SST",
4390 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004391 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004392 .manufacture_id = SST_ID,
4393 .model_id = SST_49LF004A,
4394 .total_size = 512,
4395 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004396 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004397 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004398 .probe = probe_jedec,
4399 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004400 .block_erasers =
4401 {
4402 {
4403 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004404 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004405 }, {
4406 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004407 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004408 }, {
4409 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004410 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004411 },
4412 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004413 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004414 .unlock = unlock_sst_fwhub,
4415 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004416 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004417 },
4418
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004419 {
4420 .vendor = "SST",
4421 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004422 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004423 .manufacture_id = SST_ID,
4424 .model_id = SST_49LF004C,
4425 .total_size = 512,
4426 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004427 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004428 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004429 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004430 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004431 .block_erasers =
4432 {
4433 {
4434 .eraseblocks = { {4 * 1024, 128} },
4435 .block_erase = erase_sector_49lfxxxc,
4436 }, {
4437 .eraseblocks = {
4438 {64 * 1024, 7},
4439 {32 * 1024, 1},
4440 {8 * 1024, 2},
4441 {16 * 1024, 1},
4442 },
Sean Nelson69e58112010-03-23 17:10:28 +00004443 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004444 }
4445 },
Sean Nelson69e58112010-03-23 17:10:28 +00004446 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004447 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004448 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004449 },
4450
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004451 {
4452 .vendor = "SST",
4453 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004454 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004455 .manufacture_id = SST_ID,
4456 .model_id = SST_49LF008A,
4457 .total_size = 1024,
4458 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004459 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004460 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004461 .probe = probe_jedec,
4462 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004463 .block_erasers =
4464 {
4465 {
4466 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004467 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004468 }, {
4469 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004470 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004471 }, {
4472 .eraseblocks = { {1024 * 1024, 1} },
4473 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4474 }
4475 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004476 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004477 .unlock = unlock_sst_fwhub,
4478 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004479 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004480 },
4481
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004482 {
4483 .vendor = "SST",
4484 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004485 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004486 .manufacture_id = SST_ID,
4487 .model_id = SST_49LF008C,
4488 .total_size = 1024,
4489 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004490 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004491 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004492 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004493 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004494 .block_erasers =
4495 {
4496 {
4497 .eraseblocks = { {4 * 1024, 256} },
4498 .block_erase = erase_sector_49lfxxxc,
4499 }, {
4500 .eraseblocks = {
4501 {64 * 1024, 15},
4502 {32 * 1024, 1},
4503 {8 * 1024, 2},
4504 {16 * 1024, 1},
4505 },
Sean Nelson69e58112010-03-23 17:10:28 +00004506 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004507 }
4508 },
Sean Nelson69e58112010-03-23 17:10:28 +00004509 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004510 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004511 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004512 },
4513
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004514 {
4515 .vendor = "SST",
4516 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004517 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004518 .manufacture_id = SST_ID,
4519 .model_id = SST_49LF016C,
4520 .total_size = 2048,
4521 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004522 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004523 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004524 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004525 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004526 .block_erasers =
4527 {
4528 {
4529 .eraseblocks = { {4 * 1024, 512} },
4530 .block_erase = erase_sector_49lfxxxc,
4531 }, {
4532 .eraseblocks = {
4533 {64 * 1024, 31},
4534 {32 * 1024, 1},
4535 {8 * 1024, 2},
4536 {16 * 1024, 1},
4537 },
Sean Nelson69e58112010-03-23 17:10:28 +00004538 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004539 }
4540 },
Sean Nelson69e58112010-03-23 17:10:28 +00004541 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004542 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004543 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004544 },
4545
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004546 {
4547 .vendor = "SST",
4548 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004549 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004550 .manufacture_id = SST_ID,
4551 .model_id = SST_49LF020,
4552 .total_size = 256,
4553 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004554 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004555 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004556 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004557 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004558 .block_erasers =
4559 {
4560 {
4561 .eraseblocks = { {4 * 1024, 64} },
4562 .block_erase = erase_sector_jedec,
4563 }, {
4564 .eraseblocks = { {16 * 1024, 16} },
4565 .block_erase = erase_block_jedec,
4566 }, {
4567 .eraseblocks = { {256 * 1024, 1} },
4568 .block_erase = NULL,
4569 }
4570 },
Sean Nelson35727f72010-01-28 23:55:12 +00004571 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004572 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004573 },
4574
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004575 {
4576 .vendor = "SST",
4577 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004578 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004579 .manufacture_id = SST_ID,
4580 .model_id = SST_49LF020A,
4581 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004582 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004583 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004584 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004585 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004586 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004587 .block_erasers =
4588 {
4589 {
4590 .eraseblocks = { {4 * 1024, 64} },
4591 .block_erase = erase_sector_jedec,
4592 }, {
4593 .eraseblocks = { {16 * 1024, 16} },
4594 .block_erase = erase_block_jedec,
4595 }, {
4596 .eraseblocks = { {256 * 1024, 1} },
4597 .block_erase = NULL,
4598 }
4599 },
Sean Nelson35727f72010-01-28 23:55:12 +00004600 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004601 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004602 },
4603
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004604 {
4605 .vendor = "SST",
4606 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004607 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004608 .manufacture_id = SST_ID,
4609 .model_id = SST_49LF040,
4610 .total_size = 512,
4611 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004612 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004613 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004614 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004615 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004616 .block_erasers =
4617 {
4618 {
4619 .eraseblocks = { {4 * 1024, 128} },
4620 .block_erase = erase_sector_jedec,
4621 }, {
4622 .eraseblocks = { {64 * 1024, 8} },
4623 .block_erase = erase_block_jedec,
4624 }, {
4625 .eraseblocks = { {512 * 1024, 1} },
4626 .block_erase = NULL,
4627 }
4628 },
Sean Nelson35727f72010-01-28 23:55:12 +00004629 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004630 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004631 },
4632
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004633 {
4634 .vendor = "SST",
4635 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004636 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004637 .manufacture_id = SST_ID,
4638 .model_id = SST_49LF040B,
4639 .total_size = 512,
4640 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004641 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004642 .tested = TEST_OK_PR,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004643 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004644 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004645 .block_erasers =
4646 {
4647 {
4648 .eraseblocks = { {4 * 1024, 128} },
4649 .block_erase = erase_sector_jedec,
4650 }, {
4651 .eraseblocks = { {64 * 1024, 8} },
4652 .block_erase = erase_block_jedec,
4653 }, {
4654 .eraseblocks = { {512 * 1024, 1} },
4655 .block_erase = NULL,
4656 }
4657 },
Sean Nelson35727f72010-01-28 23:55:12 +00004658 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004659 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004660 },
4661
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004662 {
4663 .vendor = "SST",
4664 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004665 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004666 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004667 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004668 .total_size = 1024,
4669 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004670 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004671 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004672 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004673 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004674 .block_erasers =
4675 {
4676 {
4677 .eraseblocks = { {4 * 1024, 256} },
4678 .block_erase = erase_sector_jedec,
4679 }, {
4680 .eraseblocks = { {64 * 1024, 16} },
4681 .block_erase = erase_block_jedec,
4682 }, {
4683 .eraseblocks = { {1024 * 1024, 1} },
4684 .block_erase = NULL,
4685 }
4686 },
Sean Nelson35727f72010-01-28 23:55:12 +00004687 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004688 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004689 },
4690
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004691 {
4692 .vendor = "SST",
4693 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004694 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004695 .manufacture_id = SST_ID,
4696 .model_id = SST_49LF160C,
4697 .total_size = 2048,
4698 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004699 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004700 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004701 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004702 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004703 .block_erasers =
4704 {
4705 {
4706 .eraseblocks = { {4 * 1024, 512} },
4707 .block_erase = erase_sector_49lfxxxc,
4708 }, {
4709 .eraseblocks = {
4710 {64 * 1024, 31},
4711 {32 * 1024, 1},
4712 {8 * 1024, 2},
4713 {16 * 1024, 1},
4714 },
Sean Nelson69e58112010-03-23 17:10:28 +00004715 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004716 }
4717 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004718 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004719 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004720 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004721 },
4722
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004723 {
4724 .vendor = "ST",
4725 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004726 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004727 .manufacture_id = ST_ID,
4728 .model_id = ST_M25P05A,
4729 .total_size = 64,
4730 .page_size = 256,
4731 .tested = TEST_UNTESTED,
4732 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004733 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004734 .block_erasers =
4735 {
4736 {
4737 .eraseblocks = { {32 * 1024, 2} },
4738 .block_erase = spi_block_erase_d8,
4739 }, {
4740 .eraseblocks = { {64 * 1024, 1} },
4741 .block_erase = spi_block_erase_c7,
4742 }
4743 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004744 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004745 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004746 },
4747
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004748 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4749 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004750 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004751 * only is successful if RDID does not work.
4752 */
4753 {
4754 .vendor = "ST",
4755 .name = "M25P05.RES",
4756 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004757 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004758 .model_id = ST_M25P05_RES,
4759 .total_size = 64,
4760 .page_size = 256,
4761 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004762 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004763 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004764 .block_erasers =
4765 {
4766 {
4767 .eraseblocks = { {32 * 1024, 2} },
4768 .block_erase = spi_block_erase_d8,
4769 }, {
4770 .eraseblocks = { {64 * 1024, 1} },
4771 .block_erase = spi_block_erase_c7,
4772 }
4773 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004774 .write = spi_chip_write_1, /* 128 */
4775 .read = spi_chip_read,
4776 },
4777
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004778 {
4779 .vendor = "ST",
4780 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004781 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004782 .manufacture_id = ST_ID,
4783 .model_id = ST_M25P10A,
4784 .total_size = 128,
4785 .page_size = 256,
4786 .tested = TEST_UNTESTED,
4787 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004788 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004789 .block_erasers =
4790 {
4791 {
4792 .eraseblocks = { {32 * 1024, 4} },
4793 .block_erase = spi_block_erase_d8,
4794 }, {
4795 .eraseblocks = { {128 * 1024, 1} },
4796 .block_erase = spi_block_erase_c7,
4797 }
4798 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004799 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004800 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004801 },
4802
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004803 /* The ST M25P10 has the same problem as the M25P05. */
4804 {
4805 .vendor = "ST",
4806 .name = "M25P10.RES",
4807 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004808 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004809 .model_id = ST_M25P10_RES,
4810 .total_size = 128,
4811 .page_size = 256,
4812 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004813 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004814 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004815 .block_erasers =
4816 {
4817 {
4818 .eraseblocks = { {32 * 1024, 4} },
4819 .block_erase = spi_block_erase_d8,
4820 }, {
4821 .eraseblocks = { {128 * 1024, 1} },
4822 .block_erase = spi_block_erase_c7,
4823 }
4824 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004825 .write = spi_chip_write_1, /* 128 */
4826 .read = spi_chip_read,
4827 },
4828
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004829 {
4830 .vendor = "ST",
4831 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004832 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004833 .manufacture_id = ST_ID,
4834 .model_id = ST_M25P20,
4835 .total_size = 256,
4836 .page_size = 256,
4837 .tested = TEST_UNTESTED,
4838 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004839 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004840 .block_erasers =
4841 {
4842 {
4843 .eraseblocks = { {64 * 1024, 4} },
4844 .block_erase = spi_block_erase_d8,
4845 }, {
4846 .eraseblocks = { {256 * 1024, 1} },
4847 .block_erase = spi_block_erase_c7,
4848 }
4849 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004850 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004851 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004852 },
4853
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004854 {
4855 .vendor = "ST",
4856 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004857 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004858 .manufacture_id = ST_ID,
4859 .model_id = ST_M25P40,
4860 .total_size = 512,
4861 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004862 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004863 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004864 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004865 .block_erasers =
4866 {
4867 {
4868 .eraseblocks = { {64 * 1024, 8} },
4869 .block_erase = spi_block_erase_d8,
4870 }, {
4871 .eraseblocks = { {512 * 1024, 1} },
4872 .block_erase = spi_block_erase_c7,
4873 }
4874 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004875 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004876 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004877 },
4878
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004879 {
4880 .vendor = "ST",
4881 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004882 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004883 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004884 .model_id = ST_M25P40_RES,
4885 .total_size = 512,
4886 .page_size = 256,
4887 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004888 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004889 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004890 .block_erasers =
4891 {
4892 {
4893 .eraseblocks = { {64 * 1024, 8} },
4894 .block_erase = spi_block_erase_d8,
4895 }, {
4896 .eraseblocks = { {512 * 1024, 1} },
4897 .block_erase = spi_block_erase_c7,
4898 }
4899 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004900 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004901 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004902 },
4903
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004904 {
4905 .vendor = "ST",
4906 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004907 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004908 .manufacture_id = ST_ID,
4909 .model_id = ST_M25P80,
4910 .total_size = 1024,
4911 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004912 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004913 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004914 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004915 .block_erasers =
4916 {
4917 {
4918 .eraseblocks = { {64 * 1024, 16} },
4919 .block_erase = spi_block_erase_d8,
4920 }, {
4921 .eraseblocks = { {1024 * 1024, 1} },
4922 .block_erase = spi_block_erase_c7,
4923 }
4924 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004925 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004926 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004927 },
4928
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004929 {
4930 .vendor = "ST",
4931 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004932 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004933 .manufacture_id = ST_ID,
4934 .model_id = ST_M25P16,
4935 .total_size = 2048,
4936 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004937 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004938 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004939 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004940 .block_erasers =
4941 {
4942 {
4943 .eraseblocks = { {64 * 1024, 32} },
4944 .block_erase = spi_block_erase_d8,
4945 }, {
4946 .eraseblocks = { {2 * 1024 * 1024, 1} },
4947 .block_erase = spi_block_erase_c7,
4948 }
4949 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004950 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004951 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004952 },
4953
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004954 {
4955 .vendor = "ST",
4956 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004957 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004958 .manufacture_id = ST_ID,
4959 .model_id = ST_M25P32,
4960 .total_size = 4096,
4961 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004962 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004963 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004964 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004965 .block_erasers =
4966 {
4967 {
4968 .eraseblocks = { {64 * 1024, 64} },
4969 .block_erase = spi_block_erase_d8,
4970 }, {
4971 .eraseblocks = { {4 * 1024 * 1024, 1} },
4972 .block_erase = spi_block_erase_c7,
4973 }
4974 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004975 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004976 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004977 },
4978
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004979 {
4980 .vendor = "ST",
4981 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004982 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004983 .manufacture_id = ST_ID,
4984 .model_id = ST_M25P64,
4985 .total_size = 8192,
4986 .page_size = 256,
4987 .tested = TEST_UNTESTED,
4988 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004989 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004990 .block_erasers =
4991 {
4992 {
4993 .eraseblocks = { {64 * 1024, 128} },
4994 .block_erase = spi_block_erase_d8,
4995 }, {
4996 .eraseblocks = { {8 * 1024 * 1024, 1} },
4997 .block_erase = spi_block_erase_c7,
4998 }
4999 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005000 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005001 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005002 },
5003
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005004 {
5005 .vendor = "ST",
5006 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005007 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005008 .manufacture_id = ST_ID,
5009 .model_id = ST_M25P128,
5010 .total_size = 16384,
5011 .page_size = 256,
5012 .tested = TEST_UNTESTED,
5013 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005014 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005015 .block_erasers =
5016 {
5017 {
5018 .eraseblocks = { {256 * 1024, 64} },
5019 .block_erase = spi_block_erase_d8,
5020 }, {
5021 .eraseblocks = { {16 * 1024 * 1024, 1} },
5022 .block_erase = spi_block_erase_c7,
5023 }
5024 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005025 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005026 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005027 },
5028
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005029 {
5030 .vendor = "ST",
5031 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005032 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005033 .manufacture_id = ST_ID,
5034 .model_id = ST_M29F002B,
5035 .total_size = 256,
5036 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005037 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005038 .tested = TEST_UNTESTED,
5039 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005040 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005041 .block_erasers =
5042 {
5043 {
5044 .eraseblocks = {
5045 {16 * 1024, 1},
5046 {8 * 1024, 2},
5047 {32 * 1024, 1},
5048 {64 * 1024, 3},
5049 },
5050 .block_erase = erase_sector_jedec,
5051 }, {
5052 .eraseblocks = { {256 * 1024, 1} },
5053 .block_erase = erase_chip_block_jedec,
5054 }
5055 },
Sean Nelson35727f72010-01-28 23:55:12 +00005056 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005057 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005058 },
5059
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005060 {
5061 .vendor = "ST",
5062 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005063 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005064 .manufacture_id = ST_ID,
5065 .model_id = ST_M29F002T,
5066 .total_size = 256,
5067 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005068 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
5069 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005070 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005071 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005072 .block_erasers =
5073 {
5074 {
5075 .eraseblocks = {
5076 {64 * 1024, 3},
5077 {32 * 1024, 1},
5078 {8 * 1024, 2},
5079 {16 * 1024, 1},
5080 },
5081 .block_erase = erase_sector_jedec,
5082 }, {
5083 .eraseblocks = { {256 * 1024, 1} },
5084 .block_erase = erase_chip_block_jedec,
5085 }
5086 },
Sean Nelson35727f72010-01-28 23:55:12 +00005087 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005088 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005089 },
5090
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005091 {
5092 .vendor = "ST",
5093 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005094 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005095 .manufacture_id = ST_ID,
5096 .model_id = ST_M29F040B,
5097 .total_size = 512,
5098 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005099 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5100 .tested = TEST_UNTESTED,
5101 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005102 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005103 .block_erasers =
5104 {
5105 {
5106 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00005107 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005108 }, {
5109 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005110 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005111 }
5112 },
Sean Nelson35727f72010-01-28 23:55:12 +00005113 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005114 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005115 },
5116
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005117 {
Sean Nelson35727f72010-01-28 23:55:12 +00005118 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005119 .vendor = "ST",
5120 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005121 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005122 .manufacture_id = ST_ID,
5123 .model_id = ST_M29F400BT,
5124 .total_size = 512,
5125 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005126 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005127 .tested = TEST_UNTESTED,
5128 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005129 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005130 .block_erasers =
5131 {
5132 {
5133 .eraseblocks = {
5134 {64 * 1024, 7},
5135 {32 * 1024, 1},
5136 {8 * 1024, 2},
5137 {16 * 1024, 1},
5138 },
5139 .block_erase = block_erase_m29f400bt,
5140 }, {
5141 .eraseblocks = { {512 * 1024, 1} },
5142 .block_erase = block_erase_chip_m29f400bt,
5143 }
5144 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005145 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005146 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005147 },
5148
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005149 {
5150 .vendor = "ST",
5151 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005152 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005153 .manufacture_id = ST_ID,
5154 .model_id = ST_M29W010B,
5155 .total_size = 128,
5156 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005157 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005158 .tested = TEST_UNTESTED,
5159 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005160 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005161 .block_erasers =
5162 {
5163 {
5164 .eraseblocks = { {16 * 1024, 8}, },
5165 .block_erase = erase_sector_jedec,
5166 }, {
5167 .eraseblocks = { {128 * 1024, 1} },
5168 .block_erase = erase_chip_block_jedec,
5169 }
5170 },
Sean Nelson35727f72010-01-28 23:55:12 +00005171 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005172 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005173 },
5174
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005175 {
5176 .vendor = "ST",
5177 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005178 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005179 .manufacture_id = ST_ID,
5180 .model_id = ST_M29W040B,
5181 .total_size = 512,
5182 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005183 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005184 .tested = TEST_UNTESTED,
5185 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005186 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005187 .block_erasers =
5188 {
5189 {
5190 .eraseblocks = { {64 * 1024, 8}, },
5191 .block_erase = erase_sector_jedec,
5192 }, {
5193 .eraseblocks = { {512 * 1024, 1} },
5194 .block_erase = erase_chip_block_jedec,
5195 }
5196 },
Sean Nelson35727f72010-01-28 23:55:12 +00005197 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005198 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005199 },
5200
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005201 {
5202 .vendor = "ST",
5203 .name = "M29W512B",
5204 .bustype = CHIP_BUSTYPE_PARALLEL,
5205 .manufacture_id = ST_ID,
5206 .model_id = ST_M29W512B,
5207 .total_size = 64,
5208 .page_size = 64 * 1024,
5209 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5210 .tested = TEST_OK_PREW,
5211 .probe = probe_jedec,
5212 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005213 .block_erasers =
5214 {
5215 {
5216 .eraseblocks = { {64 * 1024, 1} },
5217 .block_erase = erase_chip_block_jedec,
5218 }
5219 },
5220 .write = write_jedec_1,
5221 .read = read_memmapped,
5222 },
5223
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005224 {
5225 .vendor = "ST",
5226 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00005227 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005228 .manufacture_id = ST_ID,
5229 .model_id = ST_M50FLW040A,
5230 .total_size = 512,
5231 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005232 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005233 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005234 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005235 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005236 .block_erasers =
5237 {
5238 {
Sean Nelson329bde72010-01-19 16:39:19 +00005239 .eraseblocks = {
5240 {4 * 1024, 16}, /* sector */
5241 {64 * 1024, 5}, /* block */
5242 {4 * 1024, 16}, /* sector */
5243 {4 * 1024, 16}, /* sector */
5244 },
5245 .block_erase = NULL,
5246 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005247 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005248 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005249 }, {
5250 .eraseblocks = { {512 * 1024, 1} },
5251 .block_erase = erase_chip_stm50flw0x0x,
5252 }
5253 },
Sean Nelson28accc22010-03-19 18:47:06 +00005254 .unlock = unlock_stm50flw0x0x,
5255 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005256 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005257 },
5258
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005259 {
5260 .vendor = "ST",
5261 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005262 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005263 .manufacture_id = ST_ID,
5264 .model_id = ST_M50FLW040B,
5265 .total_size = 512,
5266 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005267 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005268 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005269 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005270 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005271 .block_erasers =
5272 {
5273 {
Sean Nelson329bde72010-01-19 16:39:19 +00005274 .eraseblocks = {
5275 {4 * 1024, 16}, /* sector */
5276 {4 * 1024, 16}, /* sector */
5277 {64 * 1024, 5}, /* block */
5278 {4 * 1024, 16}, /* sector */
5279 },
5280 .block_erase = NULL,
5281 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005282 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005283 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005284 }, {
5285 .eraseblocks = { {512 * 1024, 1} },
5286 .block_erase = erase_chip_stm50flw0x0x,
5287 }
5288 },
Sean Nelson28accc22010-03-19 18:47:06 +00005289 .unlock = unlock_stm50flw0x0x,
5290 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005291 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005292 },
5293
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005294 {
5295 .vendor = "ST",
5296 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005297 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005298 .manufacture_id = ST_ID,
5299 .model_id = ST_M50FLW080A,
5300 .total_size = 1024,
5301 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005302 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00005303 .tested = TEST_UNTESTED,
5304 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005305 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005306 .block_erasers =
5307 {
5308 {
Sean Nelson329bde72010-01-19 16:39:19 +00005309 .eraseblocks = {
5310 {4 * 1024, 16}, /* sector */
5311 {64 * 1024, 13}, /* block */
5312 {4 * 1024, 16}, /* sector */
5313 {4 * 1024, 16}, /* sector */
5314 },
5315 .block_erase = NULL,
5316 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005317 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005318 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005319 }, {
5320 .eraseblocks = { {1024 * 1024, 1} },
5321 .block_erase = erase_chip_stm50flw0x0x,
5322 }
5323 },
Sean Nelson28accc22010-03-19 18:47:06 +00005324 .unlock = unlock_stm50flw0x0x,
5325 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005326 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005327 },
5328
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005329 {
5330 .vendor = "ST",
5331 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005332 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005333 .manufacture_id = ST_ID,
5334 .model_id = ST_M50FLW080B,
5335 .total_size = 1024,
5336 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005337 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005338 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005339 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005340 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005341 .block_erasers =
5342 {
5343 {
Sean Nelson329bde72010-01-19 16:39:19 +00005344 .eraseblocks = {
5345 {4 * 1024, 16}, /* sector */
5346 {4 * 1024, 16}, /* sector */
5347 {64 * 1024, 13}, /* block */
5348 {4 * 1024, 16}, /* sector */
5349 },
5350 .block_erase = NULL,
5351 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005352 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005353 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005354 }, {
5355 .eraseblocks = { {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 = "M50FW002",
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_M50FW002,
5370 .total_size = 256,
5371 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005372 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005373 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005374 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005375 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005376 .block_erasers =
5377 {
5378 {
5379 .eraseblocks = {
5380 {64 * 1024, 3},
5381 {32 * 1024, 1},
5382 {8 * 1024, 2},
5383 {16 * 1024, 1},
5384 },
Sean Nelson28accc22010-03-19 18:47:06 +00005385 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005386 }, {
5387 .eraseblocks = { {256 * 1024, 1} },
5388 .block_erase = erase_chip_stm50flw0x0x,
5389 }
5390 },
Sean Nelson28accc22010-03-19 18:47:06 +00005391 .unlock = unlock_stm50flw0x0x,
5392 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005393 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005394 },
5395
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005396 {
5397 .vendor = "ST",
5398 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005399 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005400 .manufacture_id = ST_ID,
5401 .model_id = ST_M50FW016,
5402 .total_size = 2048,
5403 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005404 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005405 .tested = TEST_UNTESTED,
5406 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005407 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005408 .block_erasers =
5409 {
5410 {
5411 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005412 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005413 }, {
5414 .eraseblocks = { {2 * 1024 * 1024, 1} },
5415 .block_erase = erase_chip_stm50flw0x0x,
5416 }
5417 },
Sean Nelson28accc22010-03-19 18:47:06 +00005418 .unlock = unlock_stm50flw0x0x,
5419 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005420 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005421 },
5422
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005423 {
5424 .vendor = "ST",
5425 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005426 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005427 .manufacture_id = ST_ID,
5428 .model_id = ST_M50FW040,
5429 .total_size = 512,
5430 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005431 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005432 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005433 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005434 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005435 .block_erasers =
5436 {
5437 {
5438 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005439 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005440 }, {
5441 .eraseblocks = { {512 * 1024, 1} },
5442 .block_erase = erase_chip_stm50flw0x0x,
5443 }
5444 },
Sean Nelson28accc22010-03-19 18:47:06 +00005445 .unlock = unlock_stm50flw0x0x,
5446 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005447 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005448 },
5449
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005450 {
5451 .vendor = "ST",
5452 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005453 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005454 .manufacture_id = ST_ID,
5455 .model_id = ST_M50FW080,
5456 .total_size = 1024,
5457 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005458 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005459 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005460 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005461 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005462 .block_erasers =
5463 {
5464 {
5465 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005466 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005467 }, {
5468 .eraseblocks = { {1024 * 1024, 1} },
5469 .block_erase = erase_chip_stm50flw0x0x,
5470 }
5471 },
Sean Nelson28accc22010-03-19 18:47:06 +00005472 .unlock = unlock_stm50flw0x0x,
5473 .write = write_82802ab,
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 = "ST",
5479 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005480 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005481 .manufacture_id = ST_ID,
5482 .model_id = ST_M50LPW116,
5483 .total_size = 2048,
5484 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005485 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005486 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005487 .probe = probe_82802ab,
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 = {
5493 {4 * 1024, 16},
5494 {64 * 1024, 30},
5495 {32 * 1024, 1},
5496 {8 * 1024, 2},
5497 {16 * 1024, 1},
5498 },
Sean Nelson28accc22010-03-19 18:47:06 +00005499 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005500 }, {
5501 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005502 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005503 }
5504 },
Sean Nelson28accc22010-03-19 18:47:06 +00005505 .unlock = unlock_stm50flw0x0x,
5506 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005507 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005508 },
5509
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005510 {
5511 .vendor = "SyncMOS",
5512 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005513 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005514 .manufacture_id = SYNCMOS_ID,
5515 .model_id = S29C31004T,
5516 .total_size = 512,
5517 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005518 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005519 .tested = TEST_UNTESTED,
5520 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005521 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005522 .block_erasers =
5523 {
5524 {
5525 .eraseblocks = { {1 * 1024, 512} },
5526 .block_erase = erase_sector_jedec,
5527 }, {
5528 .eraseblocks = { {512 * 1024, 1} },
5529 .block_erase = erase_chip_block_jedec,
5530 },
5531 },
Sean Nelson35727f72010-01-28 23:55:12 +00005532 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005533 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005534 },
5535
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005536 {
5537 .vendor = "SyncMOS",
5538 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005539 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005540 .manufacture_id = SYNCMOS_ID,
5541 .model_id = S29C51001T,
5542 .total_size = 128,
5543 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005544 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005545 .tested = TEST_UNTESTED,
5546 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005547 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005548 .block_erasers =
5549 {
5550 {
5551 .eraseblocks = { {512, 256} },
5552 .block_erase = erase_sector_jedec,
5553 }, {
5554 .eraseblocks = { {128 * 1024, 1} },
5555 .block_erase = erase_chip_block_jedec,
5556 },
5557 },
Sean Nelson35727f72010-01-28 23:55:12 +00005558 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005559 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005560 },
5561
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005562 {
5563 .vendor = "SyncMOS",
5564 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005565 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005566 .manufacture_id = SYNCMOS_ID,
5567 .model_id = S29C51002T,
5568 .total_size = 256,
5569 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005570 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005571 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005572 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005573 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005574 .block_erasers =
5575 {
5576 {
5577 .eraseblocks = { {512, 512} },
5578 .block_erase = erase_sector_jedec,
5579 }, {
5580 .eraseblocks = { {256 * 1024, 1} },
5581 .block_erase = erase_chip_block_jedec,
5582 },
5583 },
Sean Nelson35727f72010-01-28 23:55:12 +00005584 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005585 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005586 },
5587
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005588 {
5589 .vendor = "SyncMOS",
5590 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005591 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005592 .manufacture_id = SYNCMOS_ID,
5593 .model_id = S29C51004T,
5594 .total_size = 512,
5595 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005596 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005597 .tested = TEST_UNTESTED,
5598 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005599 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005600 .block_erasers =
5601 {
5602 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005603 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005604 .block_erase = erase_sector_jedec,
5605 }, {
5606 .eraseblocks = { {512 * 1024, 1} },
5607 .block_erase = erase_chip_block_jedec,
5608 },
5609 },
Sean Nelson35727f72010-01-28 23:55:12 +00005610 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005611 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005612 },
5613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005614 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005615 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005616 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005617 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005618 .manufacture_id = TI_OLD_ID,
5619 .model_id = TI_TMS29F002RB,
5620 .total_size = 256,
5621 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005622 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005623 .tested = TEST_UNTESTED,
5624 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005625 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005626 .block_erasers =
5627 {
5628 {
5629 .eraseblocks = {
5630 {16 * 1024, 1},
5631 {8 * 1024, 2},
5632 {32 * 1024, 1},
5633 {64 * 1024, 3},
5634 },
5635 .block_erase = erase_sector_jedec,
5636 }, {
5637 .eraseblocks = { {256 * 1024, 1} },
5638 .block_erase = erase_chip_block_jedec,
5639 },
5640 },
Sean Nelson35727f72010-01-28 23:55:12 +00005641 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005642 .read = read_memmapped,
5643 },
5644
5645 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005646 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005647 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005648 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005649 .manufacture_id = TI_OLD_ID,
5650 .model_id = TI_TMS29F002RT,
5651 .total_size = 256,
5652 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005653 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005654 .tested = TEST_UNTESTED,
5655 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005656 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005657 .block_erasers =
5658 {
5659 {
5660 .eraseblocks = {
5661 {64 * 1024, 3},
5662 {32 * 1024, 1},
5663 {8 * 1024, 2},
5664 {16 * 1024, 1},
5665 },
5666 .block_erase = erase_sector_jedec,
5667 }, {
5668 .eraseblocks = { {256 * 1024, 1} },
5669 .block_erase = erase_chip_block_jedec,
5670 },
5671 },
Sean Nelson35727f72010-01-28 23:55:12 +00005672 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005673 .read = read_memmapped,
5674 },
5675
5676 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005677 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00005678 .name = "W25Q80",
5679 .bustype = CHIP_BUSTYPE_SPI,
5680 .manufacture_id = WINBOND_NEX_ID,
5681 .model_id = W_25Q80,
5682 .total_size = 1024,
5683 .page_size = 256,
5684 .tested = TEST_UNTESTED,
5685 .probe = probe_spi_rdid,
5686 .probe_timing = TIMING_ZERO,
5687 .block_erasers =
5688 {
5689 {
5690 .eraseblocks = { {4 * 1024, 256} },
5691 .block_erase = spi_block_erase_20,
5692 }, {
5693 .eraseblocks = { {32 * 1024, 32} },
5694 .block_erase = spi_block_erase_52,
5695 }, {
5696 .eraseblocks = { {64 * 1024, 16} },
5697 .block_erase = spi_block_erase_d8,
5698 }, {
5699 .eraseblocks = { {1024 * 1024, 1} },
5700 .block_erase = spi_block_erase_60,
5701 }, {
5702 .eraseblocks = { {1024 * 1024, 1} },
5703 .block_erase = spi_block_erase_c7,
5704 }
5705 },
5706 .write = spi_chip_write_256,
5707 .read = spi_chip_read,
5708 },
5709
5710 {
5711 .vendor = "Winbond",
5712 .name = "W25Q16",
5713 .bustype = CHIP_BUSTYPE_SPI,
5714 .manufacture_id = WINBOND_NEX_ID,
5715 .model_id = W_25Q16,
5716 .total_size = 2048,
5717 .page_size = 256,
5718 .tested = TEST_UNTESTED,
5719 .probe = probe_spi_rdid,
5720 .probe_timing = TIMING_ZERO,
5721 .block_erasers =
5722 {
5723 {
5724 .eraseblocks = { {4 * 1024, 512} },
5725 .block_erase = spi_block_erase_20,
5726 }, {
5727 .eraseblocks = { {32 * 1024, 64} },
5728 .block_erase = spi_block_erase_52,
5729 }, {
5730 .eraseblocks = { {64 * 1024, 32} },
5731 .block_erase = spi_block_erase_d8,
5732 }, {
5733 .eraseblocks = { {2 * 1024 * 1024, 1} },
5734 .block_erase = spi_block_erase_60,
5735 }, {
5736 .eraseblocks = { {2 * 1024 * 1024, 1} },
5737 .block_erase = spi_block_erase_c7,
5738 }
5739 },
5740 .write = spi_chip_write_256,
5741 .read = spi_chip_read,
5742 },
5743
5744 {
5745 .vendor = "Winbond",
5746 .name = "W25Q32",
5747 .bustype = CHIP_BUSTYPE_SPI,
5748 .manufacture_id = WINBOND_NEX_ID,
5749 .model_id = W_25Q32,
5750 .total_size = 4096,
5751 .page_size = 256,
5752 .tested = TEST_UNTESTED,
5753 .probe = probe_spi_rdid,
5754 .probe_timing = TIMING_ZERO,
5755 .block_erasers =
5756 {
5757 {
5758 .eraseblocks = { {4 * 1024, 1024} },
5759 .block_erase = spi_block_erase_20,
5760 }, {
5761 .eraseblocks = { {32 * 1024, 128} },
5762 .block_erase = spi_block_erase_52,
5763 }, {
5764 .eraseblocks = { {64 * 1024, 64} },
5765 .block_erase = spi_block_erase_d8,
5766 }, {
5767 .eraseblocks = { {4 * 1024 * 1024, 1} },
5768 .block_erase = spi_block_erase_60,
5769 }, {
5770 .eraseblocks = { {4 * 1024 * 1024, 1} },
5771 .block_erase = spi_block_erase_c7,
5772 }
5773 },
5774 .write = spi_chip_write_256,
5775 .read = spi_chip_read,
5776 },
5777
5778 {
5779 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005780 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005781 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005782 .manufacture_id = WINBOND_NEX_ID,
5783 .model_id = W_25X10,
5784 .total_size = 128,
5785 .page_size = 256,
5786 .tested = TEST_UNTESTED,
5787 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005788 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005789 .block_erasers =
5790 {
5791 {
5792 .eraseblocks = { {4 * 1024, 32} },
5793 .block_erase = spi_block_erase_20,
5794 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005795 .eraseblocks = { {64 * 1024, 2} },
5796 .block_erase = spi_block_erase_d8,
5797 }, {
5798 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005799 .block_erase = spi_block_erase_c7,
5800 }
5801 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005802 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005803 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005804 },
5805
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005806 {
5807 .vendor = "Winbond",
5808 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005809 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005810 .manufacture_id = WINBOND_NEX_ID,
5811 .model_id = W_25X20,
5812 .total_size = 256,
5813 .page_size = 256,
5814 .tested = TEST_UNTESTED,
5815 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005816 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005817 .block_erasers =
5818 {
5819 {
5820 .eraseblocks = { {4 * 1024, 64} },
5821 .block_erase = spi_block_erase_20,
5822 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005823 .eraseblocks = { {64 * 1024, 4} },
5824 .block_erase = spi_block_erase_d8,
5825 }, {
5826 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005827 .block_erase = spi_block_erase_c7,
5828 }
5829 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005830 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005831 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005832 },
5833
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005834 {
5835 .vendor = "Winbond",
5836 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005837 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005838 .manufacture_id = WINBOND_NEX_ID,
5839 .model_id = W_25X40,
5840 .total_size = 512,
5841 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005842 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005843 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005844 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005845 .block_erasers =
5846 {
5847 {
5848 .eraseblocks = { {4 * 1024, 128} },
5849 .block_erase = spi_block_erase_20,
5850 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005851 .eraseblocks = { {64 * 1024, 8} },
5852 .block_erase = spi_block_erase_d8,
5853 }, {
5854 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005855 .block_erase = spi_block_erase_c7,
5856 }
5857 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005858 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005859 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005860 },
5861
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005862 {
5863 .vendor = "Winbond",
5864 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005865 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005866 .manufacture_id = WINBOND_NEX_ID,
5867 .model_id = W_25X80,
5868 .total_size = 1024,
5869 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005870 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005871 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005872 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005873 .block_erasers =
5874 {
5875 {
5876 .eraseblocks = { {4 * 1024, 256} },
5877 .block_erase = spi_block_erase_20,
5878 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005879 .eraseblocks = { {64 * 1024, 16} },
5880 .block_erase = spi_block_erase_d8,
5881 }, {
5882 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005883 .block_erase = spi_block_erase_c7,
5884 }
5885 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005886 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005887 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005888 },
5889
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005890 {
5891 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005892 .name = "W25x16",
5893 .bustype = CHIP_BUSTYPE_SPI,
5894 .manufacture_id = WINBOND_NEX_ID,
5895 .model_id = W_25X16,
5896 .total_size = 2048,
5897 .page_size = 256,
5898 .tested = TEST_OK_PR,
5899 .probe = probe_spi_rdid,
5900 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005901 .block_erasers =
5902 {
5903 {
5904 .eraseblocks = { {4 * 1024, 512} },
5905 .block_erase = spi_block_erase_20,
5906 }, {
5907 .eraseblocks = { {32 * 1024, 64} },
5908 .block_erase = spi_block_erase_52,
5909 }, {
5910 .eraseblocks = { {64 * 1024, 32} },
5911 .block_erase = spi_block_erase_d8,
5912 }, {
5913 .eraseblocks = { {2 * 1024 * 1024, 1} },
5914 .block_erase = spi_block_erase_60,
5915 }, {
5916 .eraseblocks = { {2 * 1024 * 1024, 1} },
5917 .block_erase = spi_block_erase_c7,
5918 }
5919 },
Hector Martina721ae22009-07-11 19:39:11 +00005920 .write = spi_chip_write_256,
5921 .read = spi_chip_read,
5922 },
5923
5924 {
5925 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005926 .name = "W25x32",
5927 .bustype = CHIP_BUSTYPE_SPI,
5928 .manufacture_id = WINBOND_NEX_ID,
5929 .model_id = W_25X32,
5930 .total_size = 4096,
5931 .page_size = 256,
5932 .tested = TEST_OK_PROBE,
5933 .probe = probe_spi_rdid,
5934 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005935 .block_erasers =
5936 {
5937 {
5938 .eraseblocks = { {4 * 1024, 1024} },
5939 .block_erase = spi_block_erase_20,
5940 }, {
5941 .eraseblocks = { {32 * 1024, 128} },
5942 .block_erase = spi_block_erase_52,
5943 }, {
5944 .eraseblocks = { {64 * 1024, 64} },
5945 .block_erase = spi_block_erase_d8,
5946 }, {
5947 .eraseblocks = { {4 * 1024 * 1024, 1} },
5948 .block_erase = spi_block_erase_60,
5949 }, {
5950 .eraseblocks = { {4 * 1024 * 1024, 1} },
5951 .block_erase = spi_block_erase_c7,
5952 }
5953 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005954 .write = spi_chip_write_256,
5955 .read = spi_chip_read,
5956 },
5957
5958 {
5959 .vendor = "Winbond",
5960 .name = "W25x64",
5961 .bustype = CHIP_BUSTYPE_SPI,
5962 .manufacture_id = WINBOND_NEX_ID,
5963 .model_id = W_25X64,
5964 .total_size = 8192,
5965 .page_size = 256,
5966 .tested = TEST_UNTESTED,
5967 .probe = probe_spi_rdid,
5968 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005969 .block_erasers =
5970 {
5971 {
5972 .eraseblocks = { {4 * 1024, 2048} },
5973 .block_erase = spi_block_erase_20,
5974 }, {
5975 .eraseblocks = { {32 * 1024, 256} },
5976 .block_erase = spi_block_erase_52,
5977 }, {
5978 .eraseblocks = { {64 * 1024, 128} },
5979 .block_erase = spi_block_erase_d8,
5980 }, {
5981 .eraseblocks = { {8 * 1024 * 1024, 1} },
5982 .block_erase = spi_block_erase_60,
5983 }, {
5984 .eraseblocks = { {8 * 1024 * 1024, 1} },
5985 .block_erase = spi_block_erase_c7,
5986 }
5987 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005988 .write = spi_chip_write_256,
5989 .read = spi_chip_read,
5990 },
5991
5992 {
5993 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005994 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005995 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005996 .manufacture_id = WINBOND_ID,
5997 .model_id = W_29C011,
5998 .total_size = 128,
5999 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006000 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006001 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006002 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006003 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006004 .block_erasers =
6005 {
6006 {
6007 .eraseblocks = { {128 * 1024, 1} },
6008 .block_erase = erase_chip_block_jedec,
6009 }
6010 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006011 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006012 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006013 },
6014
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006015 {
6016 .vendor = "Winbond",
6017 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00006018 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006019 .manufacture_id = WINBOND_ID,
6020 .model_id = W_29C020C,
6021 .total_size = 256,
6022 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006023 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006024 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006025 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006026 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006027 .block_erasers =
6028 {
6029 {
6030 .eraseblocks = { {256 * 1024, 1} },
6031 .block_erase = erase_chip_block_jedec,
6032 }
6033 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006034 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006035 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006036 },
6037
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006038 {
6039 .vendor = "Winbond",
6040 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00006041 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006042 .manufacture_id = WINBOND_ID,
6043 .model_id = W_29C040P,
6044 .total_size = 512,
6045 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00006046 .feature_bits = FEATURE_LONG_RESET,
6047 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006048 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006049 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006050 .block_erasers =
6051 {
6052 {
6053 .eraseblocks = { {512 * 1024, 1} },
6054 .block_erase = erase_chip_block_jedec,
6055 }
6056 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006057 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006058 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006059 },
6060
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006061 {
6062 .vendor = "Winbond",
6063 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006064 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006065 .manufacture_id = WINBOND_ID,
6066 .model_id = W_29C011,
6067 .total_size = 128,
6068 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006069 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006070 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006071 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006072 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006073 .block_erasers =
6074 {
6075 {
6076 .eraseblocks = { {128 * 1024, 1} },
6077 .block_erase = erase_chip_block_jedec,
6078 }
6079 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006080 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006081 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006082 },
6083
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006084 {
6085 .vendor = "Winbond",
6086 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006087 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006088 .manufacture_id = WINBOND_ID,
6089 .model_id = W_39V040A,
6090 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006091 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006092 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00006093 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006094 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006095 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006096 .block_erasers =
6097 {
6098 {
6099 .eraseblocks = { {64 * 1024, 8} },
6100 .block_erase = erase_sector_jedec,
6101 }, {
6102 .eraseblocks = { {512 * 1024, 1} },
6103 .block_erase = erase_chip_block_jedec,
6104 }
6105 },
Sean Nelson35727f72010-01-28 23:55:12 +00006106 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006107 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006108 },
6109
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006110 {
6111 .vendor = "Winbond",
6112 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006113 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006114 .manufacture_id = WINBOND_ID,
6115 .model_id = W_39V040B,
6116 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006117 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006118 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00006119 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006120 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006121 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006122 .block_erasers =
6123 {
6124 {
6125 .eraseblocks = { {64 * 1024, 8} },
6126 .block_erase = erase_sector_jedec,
6127 }, {
6128 .eraseblocks = { {512 * 1024, 1} },
6129 .block_erase = erase_chip_block_jedec,
6130 }
6131 },
Sean Nelson35727f72010-01-28 23:55:12 +00006132 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006133 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006134 },
6135
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006136 {
6137 .vendor = "Winbond",
6138 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006139 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006140 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006141 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006142 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006143 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006144 .feature_bits = FEATURE_EITHER_RESET,
6145 .tested = TEST_UNTESTED,
6146 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006147 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006148 .block_erasers =
6149 {
6150 {
6151 .eraseblocks = { {64 * 1024, 8} },
6152 .block_erase = erase_sector_jedec,
6153 }, {
6154 .eraseblocks = { {512 * 1024, 1} },
6155 .block_erase = erase_chip_block_jedec,
6156 }
6157 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006158 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00006159 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006160 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006161 },
6162
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006163 {
6164 .vendor = "Winbond",
6165 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006166 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006167 .manufacture_id = WINBOND_ID,
6168 .model_id = W_39V040FA,
6169 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006170 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00006171 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00006172 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006173 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006174 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006175 .block_erasers =
6176 {
6177 {
6178 .eraseblocks = { {4 * 1024, 128} },
6179 .block_erase = erase_block_jedec,
6180 }, {
6181 .eraseblocks = { {64 * 1024, 8} },
6182 .block_erase = erase_sector_jedec,
6183 }, {
6184 .eraseblocks = { {512 * 1024, 1} },
6185 .block_erase = erase_chip_block_jedec,
6186 }
6187 },
Michael Karcherc9b63412010-05-30 16:55:18 +00006188 .printlock = printlock_sst_fwhub,
6189 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006190 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006191 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006192 },
6193
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006194 {
6195 .vendor = "Winbond",
6196 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006197 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006198 .manufacture_id = WINBOND_ID,
6199 .model_id = W_39V080A,
6200 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006201 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006202 .feature_bits = FEATURE_EITHER_RESET,
6203 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006204 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006205 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006206 .block_erasers =
6207 {
6208 {
6209 .eraseblocks = { {64 * 1024, 16} },
6210 .block_erase = erase_sector_jedec,
6211 }, {
6212 .eraseblocks = { {1024 * 1024, 1} },
6213 .block_erase = erase_chip_block_jedec,
6214 }
6215 },
Sean Nelson35727f72010-01-28 23:55:12 +00006216 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006217 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006218 },
6219
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006220 {
6221 .vendor = "Winbond",
6222 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00006223 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006224 .manufacture_id = WINBOND_ID,
6225 .model_id = W_49F002U,
6226 .total_size = 256,
6227 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006228 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006229 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006230 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006231 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006232 .block_erasers =
6233 {
6234 {
6235 .eraseblocks = {
6236 {128 * 1024, 1},
6237 {96 * 1024, 1},
6238 {8 * 1024, 2},
6239 {16 * 1024, 1},
6240 },
6241 .block_erase = erase_sector_jedec,
6242 }, {
6243 .eraseblocks = { {256 * 1024, 1} },
6244 .block_erase = erase_chip_block_jedec,
6245 }
6246 },
Sean Nelson35727f72010-01-28 23:55:12 +00006247 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006248 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006249 },
6250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006251 {
6252 .vendor = "Winbond",
6253 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006254 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006255 .manufacture_id = WINBOND_ID,
6256 .model_id = W_49V002A,
6257 .total_size = 256,
6258 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006259 .feature_bits = FEATURE_EITHER_RESET,
6260 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006261 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006262 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006263 .block_erasers =
6264 {
6265 {
6266 .eraseblocks = {
6267 {64 * 1024, 3},
6268 {32 * 1024, 1},
6269 {8 * 1024, 2},
6270 {16 * 1024, 1},
6271 },
6272 .block_erase = erase_sector_jedec,
6273 }, {
6274 .eraseblocks = { {256 * 1024, 1} },
6275 .block_erase = erase_chip_block_jedec,
6276 }
6277 },
Sean Nelson35727f72010-01-28 23:55:12 +00006278 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006279 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006280 },
6281
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006282 {
6283 .vendor = "Winbond",
6284 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006285 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006286 .manufacture_id = WINBOND_ID,
6287 .model_id = W_49V002FA,
6288 .total_size = 256,
6289 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006290 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00006291 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006292 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006293 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006294 .block_erasers =
6295 {
6296 {
6297 .eraseblocks = {
6298 {64 * 1024, 3},
6299 {32 * 1024, 1},
6300 {8 * 1024, 2},
6301 {16 * 1024, 1},
6302 },
6303 .block_erase = erase_sector_jedec,
6304 }, {
6305 .eraseblocks = { {256 * 1024, 1} },
6306 .block_erase = erase_chip_block_jedec,
6307 }
6308 },
Sean Nelson35727f72010-01-28 23:55:12 +00006309 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006310 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006311 },
6312
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006313 {
6314 .vendor = "Winbond",
6315 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006316 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006317 .manufacture_id = WINBOND_ID,
6318 .model_id = W_39V080FA,
6319 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006320 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006321 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006322 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006323 .probe = probe_jedec,
6324 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006325 .block_erasers =
6326 {
6327 {
6328 .eraseblocks = { {64 * 1024, 16}, },
6329 .block_erase = erase_sector_jedec,
6330 }, {
6331 .eraseblocks = { {1024 * 1024, 1} },
6332 .block_erase = erase_chip_block_jedec,
6333 }
6334 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006335 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006336 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006337 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006338 },
6339
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006340 {
6341 .vendor = "Winbond",
6342 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006343 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006344 .manufacture_id = WINBOND_ID,
6345 .model_id = W_39V080FA_DM,
6346 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006347 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006348 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006349 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006350 .probe = probe_jedec,
6351 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006352 .block_erasers =
6353 {
6354 {
6355 .eraseblocks = { {64 * 1024, 8}, },
6356 .block_erase = erase_sector_jedec,
6357 }, {
6358 .eraseblocks = { {512 * 1024, 1} },
6359 .block_erase = erase_chip_block_jedec,
6360 }
6361 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006362 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006363 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006364 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006365 },
6366
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006367 {
6368 .vendor = "Atmel",
6369 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006370 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006371 .manufacture_id = ATMEL_ID,
6372 .model_id = GENERIC_DEVICE_ID,
6373 .total_size = 0,
6374 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006375 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006376 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006377 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006378 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006379 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006380 },
6381
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006382 {
6383 .vendor = "EON",
6384 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006385 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006386 .manufacture_id = EON_ID_NOPREFIX,
6387 .model_id = GENERIC_DEVICE_ID,
6388 .total_size = 0,
6389 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006390 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006391 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006392 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006393 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006394 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006395 },
6396
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006397 {
6398 .vendor = "Macronix",
6399 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006400 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006401 .manufacture_id = MX_ID,
6402 .model_id = GENERIC_DEVICE_ID,
6403 .total_size = 0,
6404 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006405 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006406 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006407 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006408 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006409 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006410 },
6411
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006412 {
6413 .vendor = "PMC",
6414 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006415 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006416 .manufacture_id = PMC_ID,
6417 .model_id = GENERIC_DEVICE_ID,
6418 .total_size = 0,
6419 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006420 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006421 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006422 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006423 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006424 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006425 },
6426
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006427 {
6428 .vendor = "SST",
6429 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006430 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006431 .manufacture_id = SST_ID,
6432 .model_id = GENERIC_DEVICE_ID,
6433 .total_size = 0,
6434 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006435 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006436 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006437 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006438 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006439 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006440 },
6441
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006442 {
6443 .vendor = "ST",
6444 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006445 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006446 .manufacture_id = ST_ID,
6447 .model_id = GENERIC_DEVICE_ID,
6448 .total_size = 0,
6449 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006450 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006451 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006452 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006453 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006454 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006455 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006456
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006457 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006458 .vendor = "Sanyo",
6459 .name = "unknown Sanyo SPI chip",
6460 .bustype = CHIP_BUSTYPE_SPI,
6461 .manufacture_id = SANYO_ID,
6462 .model_id = GENERIC_DEVICE_ID,
6463 .total_size = 0,
6464 .page_size = 256,
6465 .tested = TEST_BAD_PREW,
6466 .probe = probe_spi_rdid,
6467 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006468 .write = NULL,
6469 .read = NULL,
6470 },
6471
6472 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006473 .vendor = "Generic",
6474 .name = "unknown SPI chip (RDID)",
6475 .bustype = CHIP_BUSTYPE_SPI,
6476 .manufacture_id = GENERIC_MANUF_ID,
6477 .model_id = GENERIC_DEVICE_ID,
6478 .total_size = 0,
6479 .page_size = 256,
6480 .tested = TEST_BAD_PREW,
6481 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006482 .write = NULL,
6483 },
6484 {
6485 .vendor = "Generic",
6486 .name = "unknown SPI chip (REMS)",
6487 .bustype = CHIP_BUSTYPE_SPI,
6488 .manufacture_id = GENERIC_MANUF_ID,
6489 .model_id = GENERIC_DEVICE_ID,
6490 .total_size = 0,
6491 .page_size = 256,
6492 .tested = TEST_BAD_PREW,
6493 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006494 .write = NULL,
6495 },
6496
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006497 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006498};