blob: 4f9cea75697afff4f28224d3688edf10a497be9e [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",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001075 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001076 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001077 .manufacture_id = ATMEL_ID,
1078 .model_id = AT_49F002N,
1079 .total_size = 256,
1080 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001081 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001082 .tested = TEST_UNTESTED,
1083 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001084 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001085 .block_erasers =
1086 {
1087 {
1088 .eraseblocks = {
1089 {16 * 1024, 1},
1090 {8 * 1024, 2},
1091 {96 * 1024, 1},
1092 {128 * 1024, 1},
1093 },
1094 .block_erase = erase_sector_jedec,
1095 }, {
1096 .eraseblocks = { {256 * 1024, 1} },
1097 .block_erase = erase_chip_block_jedec,
1098 }
1099 },
Sean Nelson35727f72010-01-28 23:55:12 +00001100 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001101 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001102 },
1103
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001104 {
1105 .vendor = "Atmel",
1106 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001107 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001108 .manufacture_id = ATMEL_ID,
1109 .model_id = AT_49F002NT,
1110 .total_size = 256,
1111 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001112 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001113 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001114 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001115 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001116 .block_erasers =
1117 {
1118 {
1119 .eraseblocks = {
1120 {128 * 1024, 1},
1121 {96 * 1024, 1},
1122 {8 * 1024, 2},
1123 {16 * 1024, 1},
1124 },
1125 .block_erase = erase_sector_jedec,
1126 }, {
1127 .eraseblocks = { {256 * 1024, 1} },
1128 .block_erase = erase_chip_block_jedec,
1129 }
1130 },
Sean Nelson35727f72010-01-28 23:55:12 +00001131 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001132 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001133 },
1134
Sean Nelson54596372010-01-09 05:30:14 +00001135 /* The next two chip definitions have top/bottom boot blocks, but has no
Uwe Hermann4e3d0b32010-03-25 23:18:41 +00001136 device differentiation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001137 {
1138 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001139 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001140 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001141 .manufacture_id = AMIC_ID,
1142 .model_id = AMIC_A25L40P,
1143 .total_size = 512,
1144 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001145 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001146 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001147 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001148 .block_erasers =
1149 {
1150 {
1151 .eraseblocks = {
1152 {64 * 1024, 7},
1153 {32 * 1024, 1},
1154 {16 * 1024, 1},
1155 {8 * 1024, 1},
1156 {4 * 1024, 2},
1157 },
1158 .block_erase = spi_block_erase_d8,
1159 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001160 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001161 .block_erase = spi_block_erase_c7,
1162 }
1163 },
1164 .write = spi_chip_write_256,
1165 .read = spi_chip_read,
1166 },
1167
1168 {
1169 .vendor = "AMIC",
1170 .name = "A25L40PU",
1171 .bustype = CHIP_BUSTYPE_SPI,
1172 .manufacture_id = AMIC_ID,
1173 .model_id = AMIC_A25L40P,
1174 .total_size = 512,
1175 .page_size = 256,
1176 .tested = TEST_OK_PRW,
1177 .probe = probe_spi_rdid4,
1178 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001179 .block_erasers =
1180 {
1181 {
1182 .eraseblocks = {
1183 {4 * 1024, 2},
1184 {8 * 1024, 1},
1185 {16 * 1024, 1},
1186 {32 * 1024, 1},
1187 {64 * 1024, 7},
1188 },
1189 .block_erase = spi_block_erase_d8,
1190 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001192 .block_erase = spi_block_erase_c7,
1193 }
1194 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001195 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001196 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001197 },
1198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001199 {
1200 .vendor = "AMIC",
1201 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001202 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001203 .manufacture_id = AMIC_ID_NOPREFIX,
1204 .model_id = AMIC_A29002B,
1205 .total_size = 256,
1206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001208 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001209 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001210 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001211 .block_erasers =
1212 {
1213 {
1214 .eraseblocks = {
1215 {16 * 1024, 1},
1216 {8 * 1024, 2},
1217 {32 * 1024, 1},
1218 {64 * 1024, 3},
1219 },
Sean Nelson35727f72010-01-28 23:55:12 +00001220 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001221 }, {
1222 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001223 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001224 },
1225 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001226 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001227 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001228 },
1229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001230 {
1231 .vendor = "AMIC",
1232 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001233 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001234 .manufacture_id = AMIC_ID_NOPREFIX,
1235 .model_id = AMIC_A29002T,
1236 .total_size = 256,
1237 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001238 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001239 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00001240 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001241 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001242 .block_erasers =
1243 {
1244 {
1245 .eraseblocks = {
1246 {64 * 1024, 3},
1247 {32 * 1024, 1},
1248 {8 * 1024, 2},
1249 {16 * 1024, 1},
1250 },
Sean Nelson35727f72010-01-28 23:55:12 +00001251 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001252 }, {
1253 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001254 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001255 },
1256 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001257 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001258 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001259 },
1260
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001261 {
1262 .vendor = "AMIC",
1263 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001264 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001265 .manufacture_id = AMIC_ID_NOPREFIX,
1266 .model_id = AMIC_A29040B,
1267 .total_size = 512,
1268 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001269 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1270 .tested = TEST_UNTESTED,
1271 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001272 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001273 .block_erasers =
1274 {
1275 {
1276 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001277 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001278 }, {
1279 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001280 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001281 },
1282 },
Sean Nelson35727f72010-01-28 23:55:12 +00001283 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001284 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001285 },
1286
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001287 {
1288 .vendor = "AMIC",
1289 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001290 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001291 .manufacture_id = AMIC_ID_NOPREFIX,
1292 .model_id = AMIC_A49LF040A,
1293 .total_size = 512,
1294 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001295 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
1296 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001297 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001298 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001299 .block_erasers =
1300 {
1301 {
1302 .eraseblocks = { {64 * 1024, 8} },
1303 .block_erase = erase_block_jedec,
1304 }, {
1305 .eraseblocks = { {512 * 1024, 1} },
1306 .block_erase = erase_chip_block_jedec,
1307 }
1308 },
Sean Nelson36172342010-02-27 18:01:15 +00001309 .unlock = unlock_49fl00x,
1310 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001311 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001312 },
1313
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001314 {
1315 .vendor = "EMST",
1316 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001317 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001318 .manufacture_id = EMST_ID,
1319 .model_id = EMST_F49B002UA,
1320 .total_size = 256,
1321 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001322 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001323 .tested = TEST_UNTESTED,
1324 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001325 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001326 .block_erasers =
1327 {
1328 {
1329 .eraseblocks = {
1330 {128 * 1024, 1},
1331 {96 * 1024, 1},
1332 {8 * 1024, 2},
1333 {16 * 1024, 1},
1334 },
1335 .block_erase = erase_sector_jedec,
1336 }, {
1337 .eraseblocks = { {256 * 1024, 1} },
1338 .block_erase = erase_chip_block_jedec,
1339 }
1340 },
Sean Nelson35727f72010-01-28 23:55:12 +00001341 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001342 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001343 },
1344
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001345 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001346 .vendor = "Eon",
1347 .name = "EN25B05",
1348 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001349 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001350 .model_id = EN_25B05,
1351 .total_size = 64,
1352 .page_size = 256,
1353 .tested = TEST_UNTESTED,
1354 .probe = probe_spi_rdid,
1355 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001356 .block_erasers =
1357 {
1358 {
1359 .eraseblocks = {
1360 {4 * 1024, 2},
1361 {8 * 1024, 1},
1362 {16 * 1024, 1},
1363 {32 * 1024, 1},
1364 },
1365 .block_erase = spi_block_erase_d8,
1366 }, {
1367 .eraseblocks = { {64 * 1024, 1} },
1368 .block_erase = spi_block_erase_c7,
1369 }
1370 },
1371 .write = spi_chip_write_256,
1372 .read = spi_chip_read,
1373 },
1374
1375 {
1376 .vendor = "Eon",
1377 .name = "EN25B05T",
1378 .bustype = CHIP_BUSTYPE_SPI,
1379 .manufacture_id = EON_ID_NOPREFIX,
1380 .model_id = EN_25B05,
1381 .total_size = 64,
1382 .page_size = 256,
1383 .tested = TEST_UNTESTED,
1384 .probe = probe_spi_rdid,
1385 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001386 .block_erasers =
1387 {
1388 {
1389 .eraseblocks = {
1390 {32 * 1024, 1},
1391 {16 * 1024, 1},
1392 {8 * 1024, 1},
1393 {4 * 1024, 2},
1394 },
1395 .block_erase = spi_block_erase_d8,
1396 }, {
1397 .eraseblocks = { {64 * 1024, 1} },
1398 .block_erase = spi_block_erase_c7,
1399 }
1400 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001401 .write = spi_chip_write_256,
1402 .read = spi_chip_read,
1403 },
1404
1405 {
1406 .vendor = "Eon",
1407 .name = "EN25B10",
1408 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001409 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001410 .model_id = EN_25B10,
1411 .total_size = 128,
1412 .page_size = 256,
1413 .tested = TEST_UNTESTED,
1414 .probe = probe_spi_rdid,
1415 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001416 .block_erasers =
1417 {
1418 {
1419 .eraseblocks = {
1420 {4 * 1024, 2},
1421 {8 * 1024, 1},
1422 {16 * 1024, 1},
1423 {32 * 1024, 3},
1424 },
1425 .block_erase = spi_block_erase_d8,
1426 }, {
1427 .eraseblocks = { {128 * 1024, 1} },
1428 .block_erase = spi_block_erase_c7,
1429 }
1430 },
1431 .write = spi_chip_write_256,
1432 .read = spi_chip_read,
1433 },
1434
1435 {
1436 .vendor = "Eon",
1437 .name = "EN25B10T",
1438 .bustype = CHIP_BUSTYPE_SPI,
1439 .manufacture_id = EON_ID_NOPREFIX,
1440 .model_id = EN_25B10,
1441 .total_size = 128,
1442 .page_size = 256,
1443 .tested = TEST_UNTESTED,
1444 .probe = probe_spi_rdid,
1445 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001446 .block_erasers =
1447 {
1448 {
1449 .eraseblocks = {
1450 {32 * 1024, 3},
1451 {16 * 1024, 1},
1452 {8 * 1024, 1},
1453 {4 * 1024, 2},
1454 },
1455 .block_erase = spi_block_erase_d8,
1456 }, {
1457 .eraseblocks = { {128 * 1024, 1} },
1458 .block_erase = spi_block_erase_c7,
1459 }
1460 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001461 .write = spi_chip_write_256,
1462 .read = spi_chip_read,
1463 },
1464
1465 {
1466 .vendor = "Eon",
1467 .name = "EN25B20",
1468 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001469 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001470 .model_id = EN_25B20,
1471 .total_size = 256,
1472 .page_size = 256,
1473 .tested = TEST_UNTESTED,
1474 .probe = probe_spi_rdid,
1475 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001476 .block_erasers =
1477 {
1478 {
1479 .eraseblocks = {
1480 {4 * 1024, 2},
1481 {8 * 1024, 1},
1482 {16 * 1024, 1},
1483 {32 * 1024, 1},
1484 {64 * 1024, 3}
1485 },
1486 .block_erase = spi_block_erase_d8,
1487 }, {
1488 .eraseblocks = { {256 * 1024, 1} },
1489 .block_erase = spi_block_erase_c7,
1490 }
1491 },
1492 .write = spi_chip_write_256,
1493 .read = spi_chip_read,
1494 },
1495
1496 {
1497 .vendor = "Eon",
1498 .name = "EN25B20T",
1499 .bustype = CHIP_BUSTYPE_SPI,
1500 .manufacture_id = EON_ID_NOPREFIX,
1501 .model_id = EN_25B20,
1502 .total_size = 256,
1503 .page_size = 256,
1504 .tested = TEST_UNTESTED,
1505 .probe = probe_spi_rdid,
1506 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001507 .block_erasers =
1508 {
1509 {
1510 .eraseblocks = {
1511 {64 * 1024, 3},
1512 {32 * 1024, 1},
1513 {16 * 1024, 1},
1514 {8 * 1024, 1},
1515 {4 * 1024, 2},
1516 },
1517 .block_erase = spi_block_erase_d8,
1518 }, {
1519 .eraseblocks = { {256 * 1024, 1} },
1520 .block_erase = spi_block_erase_c7,
1521 }
1522 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001523 .write = spi_chip_write_256,
1524 .read = spi_chip_read,
1525 },
1526
1527 {
1528 .vendor = "Eon",
1529 .name = "EN25B40",
1530 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001531 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001532 .model_id = EN_25B40,
1533 .total_size = 512,
1534 .page_size = 256,
1535 .tested = TEST_UNTESTED,
1536 .probe = probe_spi_rdid,
1537 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001538 .block_erasers =
1539 {
1540 {
1541 .eraseblocks = {
1542 {4 * 1024, 2},
1543 {8 * 1024, 1},
1544 {16 * 1024, 1},
1545 {32 * 1024, 1},
1546 {64 * 1024, 7}
1547 },
1548 .block_erase = spi_block_erase_d8,
1549 }, {
1550 .eraseblocks = { {512 * 1024, 1} },
1551 .block_erase = spi_block_erase_c7,
1552 }
1553 },
1554 .write = spi_chip_write_256,
1555 .read = spi_chip_read,
1556 },
1557
1558 {
1559 .vendor = "Eon",
1560 .name = "EN25B40T",
1561 .bustype = CHIP_BUSTYPE_SPI,
1562 .manufacture_id = EON_ID_NOPREFIX,
1563 .model_id = EN_25B40,
1564 .total_size = 512,
1565 .page_size = 256,
1566 .tested = TEST_UNTESTED,
1567 .probe = probe_spi_rdid,
1568 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001569 .block_erasers =
1570 {
1571 {
1572 .eraseblocks = {
1573 {64 * 1024, 7},
1574 {32 * 1024, 1},
1575 {16 * 1024, 1},
1576 {8 * 1024, 1},
1577 {4 * 1024, 2},
1578 },
1579 .block_erase = spi_block_erase_d8,
1580 }, {
1581 .eraseblocks = { {512 * 1024, 1} },
1582 .block_erase = spi_block_erase_c7,
1583 }
1584 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001585 .write = spi_chip_write_256,
1586 .read = spi_chip_read,
1587 },
1588
1589 {
1590 .vendor = "Eon",
1591 .name = "EN25B80",
1592 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001593 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001594 .model_id = EN_25B80,
1595 .total_size = 1024,
1596 .page_size = 256,
1597 .tested = TEST_UNTESTED,
1598 .probe = probe_spi_rdid,
1599 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001600 .block_erasers =
1601 {
1602 {
1603 .eraseblocks = {
1604 {4 * 1024, 2},
1605 {8 * 1024, 1},
1606 {16 * 1024, 1},
1607 {32 * 1024, 1},
1608 {64 * 1024, 15}
1609 },
1610 .block_erase = spi_block_erase_d8,
1611 }, {
1612 .eraseblocks = { {1024 * 1024, 1} },
1613 .block_erase = spi_block_erase_c7,
1614 }
1615 },
1616 .write = spi_chip_write_256,
1617 .read = spi_chip_read,
1618 },
1619
1620 {
1621 .vendor = "Eon",
1622 .name = "EN25B80T",
1623 .bustype = CHIP_BUSTYPE_SPI,
1624 .manufacture_id = EON_ID_NOPREFIX,
1625 .model_id = EN_25B80,
1626 .total_size = 1024,
1627 .page_size = 256,
1628 .tested = TEST_UNTESTED,
1629 .probe = probe_spi_rdid,
1630 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001631 .block_erasers =
1632 {
1633 {
1634 .eraseblocks = {
1635 {64 * 1024, 15},
1636 {32 * 1024, 1},
1637 {16 * 1024, 1},
1638 {8 * 1024, 1},
1639 {4 * 1024, 2},
1640 },
1641 .block_erase = spi_block_erase_d8,
1642 }, {
1643 .eraseblocks = { {1024 * 1024, 1} },
1644 .block_erase = spi_block_erase_c7,
1645 }
1646 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001647 .write = spi_chip_write_256,
1648 .read = spi_chip_read,
1649 },
1650
1651 {
1652 .vendor = "Eon",
1653 .name = "EN25B16",
1654 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001655 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001656 .model_id = EN_25B16,
1657 .total_size = 2048,
1658 .page_size = 256,
1659 .tested = TEST_UNTESTED,
1660 .probe = probe_spi_rdid,
1661 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001662 .block_erasers =
1663 {
1664 {
1665 .eraseblocks = {
1666 {4 * 1024, 2},
1667 {8 * 1024, 1},
1668 {16 * 1024, 1},
1669 {32 * 1024, 1},
1670 {64 * 1024, 31},
1671 },
1672 .block_erase = spi_block_erase_d8,
1673 }, {
1674 .eraseblocks = { {2 * 1024 * 1024, 1} },
1675 .block_erase = spi_block_erase_c7,
1676 }
1677 },
1678 .write = spi_chip_write_256,
1679 .read = spi_chip_read,
1680 },
1681
1682 {
1683 .vendor = "Eon",
1684 .name = "EN25B16T",
1685 .bustype = CHIP_BUSTYPE_SPI,
1686 .manufacture_id = EON_ID_NOPREFIX,
1687 .model_id = EN_25B16,
1688 .total_size = 2048,
1689 .page_size = 256,
1690 .tested = TEST_UNTESTED,
1691 .probe = probe_spi_rdid,
1692 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001693 .block_erasers =
1694 {
1695 {
1696 .eraseblocks = {
1697 {64 * 1024, 31},
1698 {32 * 1024, 1},
1699 {16 * 1024, 1},
1700 {8 * 1024, 1},
1701 {4 * 1024, 2},
1702 },
1703 .block_erase = spi_block_erase_d8,
1704 }, {
1705 .eraseblocks = { {2 * 1024 * 1024, 1} },
1706 .block_erase = spi_block_erase_c7,
1707 }
1708 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001709 .write = spi_chip_write_256,
1710 .read = spi_chip_read,
1711 },
1712
1713 {
1714 .vendor = "Eon",
1715 .name = "EN25B32",
1716 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001717 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001718 .model_id = EN_25B32,
1719 .total_size = 4096,
1720 .page_size = 256,
1721 .tested = TEST_UNTESTED,
1722 .probe = probe_spi_rdid,
1723 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001724 .block_erasers =
1725 {
1726 {
1727 .eraseblocks = {
1728 {4 * 1024, 2},
1729 {8 * 1024, 1},
1730 {16 * 1024, 1},
1731 {32 * 1024, 1},
1732 {64 * 1024, 63},
1733 },
1734 .block_erase = spi_block_erase_d8,
1735 }, {
1736 .eraseblocks = { {4 * 1024 * 1024, 1} },
1737 .block_erase = spi_block_erase_c7,
1738 }
1739 },
1740 .write = spi_chip_write_256,
1741 .read = spi_chip_read,
1742 },
1743
1744 {
1745 .vendor = "Eon",
1746 .name = "EN25B32T",
1747 .bustype = CHIP_BUSTYPE_SPI,
1748 .manufacture_id = EON_ID_NOPREFIX,
1749 .model_id = EN_25B32,
1750 .total_size = 4096,
1751 .page_size = 256,
1752 .tested = TEST_UNTESTED,
1753 .probe = probe_spi_rdid,
1754 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001755 .block_erasers =
1756 {
1757 {
1758 .eraseblocks = {
1759 {64 * 1024, 63},
1760 {32 * 1024, 1},
1761 {16 * 1024, 1},
1762 {8 * 1024, 1},
1763 {4 * 1024, 2},
1764 },
1765 .block_erase = spi_block_erase_d8,
1766 }, {
1767 .eraseblocks = { {4 * 1024 * 1024, 1} },
1768 .block_erase = spi_block_erase_c7,
1769 }
1770 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001771 .write = spi_chip_write_256,
1772 .read = spi_chip_read,
1773 },
1774
1775 {
1776 .vendor = "Eon",
1777 .name = "EN25B64",
1778 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001779 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001780 .model_id = EN_25B64,
1781 .total_size = 8192,
1782 .page_size = 256,
1783 .tested = TEST_UNTESTED,
1784 .probe = probe_spi_rdid,
1785 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001786 .block_erasers =
1787 {
1788 {
1789 .eraseblocks = {
1790 {4 * 1024, 2},
1791 {8 * 1024, 1},
1792 {16 * 1024, 1},
1793 {32 * 1024, 1},
1794 {64 * 1024, 127},
1795 },
1796 .block_erase = spi_block_erase_d8,
1797 }, {
1798 .eraseblocks = { {8 * 1024 * 1024, 1} },
1799 .block_erase = spi_block_erase_c7,
1800 }
1801 },
1802 .write = spi_chip_write_256,
1803 .read = spi_chip_read,
1804 },
1805
1806 {
1807 .vendor = "Eon",
1808 .name = "EN25B64T",
1809 .bustype = CHIP_BUSTYPE_SPI,
1810 .manufacture_id = EON_ID_NOPREFIX,
1811 .model_id = EN_25B64,
1812 .total_size = 8192,
1813 .page_size = 256,
1814 .tested = TEST_UNTESTED,
1815 .probe = probe_spi_rdid,
1816 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001817 .block_erasers =
1818 {
1819 {
1820 .eraseblocks = {
1821 {64 * 1024, 127},
1822 {32 * 1024, 1},
1823 {16 * 1024, 1},
1824 {8 * 1024, 1},
1825 {4 * 1024, 2},
1826 },
1827 .block_erase = spi_block_erase_d8,
1828 }, {
1829 .eraseblocks = { {8 * 1024 * 1024, 1} },
1830 .block_erase = spi_block_erase_c7,
1831 }
1832 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001833 .write = spi_chip_write_256,
1834 .read = spi_chip_read,
1835 },
1836
1837 {
1838 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001839 .name = "EN25D16",
1840 .bustype = CHIP_BUSTYPE_SPI,
1841 .manufacture_id = EON_ID_NOPREFIX,
1842 .model_id = EN_25D16,
1843 .total_size = 2048,
1844 .page_size = 256,
1845 .tested = TEST_UNTESTED,
1846 .probe = probe_spi_rdid,
1847 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001848 .block_erasers =
1849 {
1850 {
1851 .eraseblocks = { {4 * 1024, 512} },
1852 .block_erase = spi_block_erase_20,
1853 }, {
1854 .eraseblocks = { {64 * 1024, 32} },
1855 .block_erase = spi_block_erase_d8,
1856 }, {
1857 .eraseblocks = { {64 * 1024, 32} },
1858 .block_erase = spi_block_erase_52,
1859 }, {
1860 .eraseblocks = { {2 * 1024 * 1024, 1} },
1861 .block_erase = spi_block_erase_60,
1862 }, {
1863 .eraseblocks = { {2 * 1024 * 1024, 1} },
1864 .block_erase = spi_block_erase_c7,
1865 }
1866 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001867 .write = spi_chip_write_256,
1868 .read = spi_chip_read,
1869 },
1870
1871 {
1872 .vendor = "Eon",
1873 .name = "EN25F05",
1874 .bustype = CHIP_BUSTYPE_SPI,
1875 .manufacture_id = EON_ID_NOPREFIX,
1876 .model_id = EN_25F05,
1877 .total_size = 64,
1878 .page_size = 256,
1879 .tested = TEST_UNTESTED,
1880 .probe = probe_spi_rdid,
1881 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001882 .block_erasers =
1883 {
1884 {
1885 .eraseblocks = { {4 * 1024, 16} },
1886 .block_erase = spi_block_erase_20,
1887 }, {
1888 .eraseblocks = { {32 * 1024, 2} },
1889 .block_erase = spi_block_erase_d8,
1890 }, {
1891 .eraseblocks = { {32 * 1024, 2} },
1892 .block_erase = spi_block_erase_52,
1893 }, {
1894 .eraseblocks = { {64 * 1024, 1} },
1895 .block_erase = spi_block_erase_60,
1896 }, {
1897 .eraseblocks = { {64 * 1024, 1} },
1898 .block_erase = spi_block_erase_c7,
1899 }
1900 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001901 .write = spi_chip_write_256,
1902 .read = spi_chip_read,
1903 },
1904
1905 {
1906 .vendor = "Eon",
1907 .name = "EN25F10",
1908 .bustype = CHIP_BUSTYPE_SPI,
1909 .manufacture_id = EON_ID_NOPREFIX,
1910 .model_id = EN_25F10,
1911 .total_size = 128,
1912 .page_size = 256,
1913 .tested = TEST_UNTESTED,
1914 .probe = probe_spi_rdid,
1915 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001916 .block_erasers =
1917 {
1918 {
1919 .eraseblocks = { {4 * 1024, 32} },
1920 .block_erase = spi_block_erase_20,
1921 }, {
1922 .eraseblocks = { {32 * 1024, 4} },
1923 .block_erase = spi_block_erase_d8,
1924 }, {
1925 .eraseblocks = { {32 * 1024, 4} },
1926 .block_erase = spi_block_erase_52,
1927 }, {
1928 .eraseblocks = { {128 * 1024, 1} },
1929 .block_erase = spi_block_erase_60,
1930 }, {
1931 .eraseblocks = { {128 * 1024, 1} },
1932 .block_erase = spi_block_erase_c7,
1933 }
1934 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001935 .write = spi_chip_write_256,
1936 .read = spi_chip_read,
1937 },
1938
1939 {
1940 .vendor = "Eon",
1941 .name = "EN25F20",
1942 .bustype = CHIP_BUSTYPE_SPI,
1943 .manufacture_id = EON_ID_NOPREFIX,
1944 .model_id = EN_25F20,
1945 .total_size = 256,
1946 .page_size = 256,
1947 .tested = TEST_UNTESTED,
1948 .probe = probe_spi_rdid,
1949 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001950 .block_erasers =
1951 {
1952 {
1953 .eraseblocks = { {4 * 1024, 64} },
1954 .block_erase = spi_block_erase_20,
1955 }, {
1956 .eraseblocks = { {64 * 1024, 4} },
1957 .block_erase = spi_block_erase_d8,
1958 }, {
1959 .eraseblocks = { {64 * 1024, 4} },
1960 .block_erase = spi_block_erase_52,
1961 }, {
1962 .eraseblocks = { {256 * 1024, 1} },
1963 .block_erase = spi_block_erase_60,
1964 }, {
1965 .eraseblocks = { {256 * 1024, 1} },
1966 .block_erase = spi_block_erase_c7,
1967 }
1968 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001969 .write = spi_chip_write_256,
1970 .read = spi_chip_read,
1971 },
1972
1973 {
1974 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001975 .name = "EN25F40",
1976 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001977 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001978 .model_id = EN_25F40,
1979 .total_size = 512,
1980 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001981 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001982 .probe = probe_spi_rdid,
1983 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001984 .block_erasers =
1985 {
1986 {
Sean Nelson54596372010-01-09 05:30:14 +00001987 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001988 .block_erase = spi_block_erase_20,
1989 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001990 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001991 .block_erase = spi_block_erase_d8,
1992 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001993 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001994 .block_erase = spi_block_erase_60,
1995 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001996 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001997 .block_erase = spi_block_erase_c7,
1998 },
1999 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002000 .write = spi_chip_write_256,
2001 .read = spi_chip_read,
2002 },
2003
2004 {
2005 .vendor = "Eon",
2006 .name = "EN25F80",
2007 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002008 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002009 .model_id = EN_25F80,
2010 .total_size = 1024,
2011 .page_size = 256,
2012 .tested = TEST_UNTESTED,
2013 .probe = probe_spi_rdid,
2014 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002015 .block_erasers =
2016 {
2017 {
2018 .eraseblocks = { {4 * 1024, 256} },
2019 .block_erase = spi_block_erase_20,
2020 }, {
2021 .eraseblocks = { {64 * 1024, 16} },
2022 .block_erase = spi_block_erase_d8,
2023 }, {
2024 .eraseblocks = { {1024 * 1024, 1} },
2025 .block_erase = spi_block_erase_60,
2026 }, {
2027 .eraseblocks = { {1024 * 1024, 1} },
2028 .block_erase = spi_block_erase_c7,
2029 }
2030 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002031 .write = spi_chip_write_256,
2032 .read = spi_chip_read,
2033 },
2034
2035 {
2036 .vendor = "Eon",
2037 .name = "EN25F16",
2038 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002039 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002040 .model_id = EN_25F16,
2041 .total_size = 2048,
2042 .page_size = 256,
2043 .tested = TEST_UNTESTED,
2044 .probe = probe_spi_rdid,
2045 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002046 .block_erasers =
2047 {
2048 {
2049 .eraseblocks = { {4 * 1024, 512} },
2050 .block_erase = spi_block_erase_20,
2051 }, {
2052 .eraseblocks = { {64 * 1024, 32} },
2053 .block_erase = spi_block_erase_d8,
2054 }, {
2055 .eraseblocks = { {2 * 1024 * 1024, 1} },
2056 .block_erase = spi_block_erase_60,
2057 }, {
2058 .eraseblocks = { {2 * 1024 * 1024, 1} },
2059 .block_erase = spi_block_erase_c7,
2060 }
2061 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002062 .write = spi_chip_write_256,
2063 .read = spi_chip_read,
2064 },
2065
2066 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002067 .vendor = "Eon",
2068 .name = "EN25F32",
2069 .bustype = CHIP_BUSTYPE_SPI,
2070 .manufacture_id = EON_ID_NOPREFIX,
2071 .model_id = EN_25F32,
2072 .total_size = 4096,
2073 .page_size = 256,
2074 .tested = TEST_UNTESTED,
2075 .probe = probe_spi_rdid,
2076 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002077 .block_erasers =
2078 {
2079 {
2080 .eraseblocks = { {4 * 1024, 1024} },
2081 .block_erase = spi_block_erase_20,
2082 }, {
2083 .eraseblocks = { {64 * 1024, 64} },
2084 .block_erase = spi_block_erase_d8,
2085 }, {
2086 .eraseblocks = { {4 * 1024 * 1024, 1} },
2087 .block_erase = spi_block_erase_60,
2088 }, {
2089 .eraseblocks = { {4 * 1024 * 1024, 1} },
2090 .block_erase = spi_block_erase_c7,
2091 }
2092 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002093 .write = spi_chip_write_256,
2094 .read = spi_chip_read,
2095 },
2096
2097 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002098 .vendor = "Eon",
2099 .name = "EN29F010",
2100 .bustype = CHIP_BUSTYPE_PARALLEL,
2101 .manufacture_id = EON_ID,
2102 .model_id = EN_29F010,
2103 .total_size = 128,
2104 .page_size = 128,
2105 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2106 .tested = TEST_OK_PREW,
2107 .probe = probe_jedec,
2108 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2109 .block_erasers =
2110 {
2111 {
2112 .eraseblocks = { {16 * 1024, 8} },
2113 .block_erase = erase_sector_jedec,
2114 },
2115 {
2116 .eraseblocks = { {128 * 1024, 1} },
2117 .block_erase = erase_chip_block_jedec,
2118 },
2119 },
2120 .write = write_jedec_1,
2121 .read = read_memmapped,
2122 },
2123
2124 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002125 .vendor = "EON",
2126 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002127 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002128 .manufacture_id = EON_ID,
2129 .model_id = EN_29F002B,
2130 .total_size = 256,
2131 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002132 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00002133 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002134 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002135 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002136 .block_erasers =
2137 {
2138 {
2139 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002140 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002141 {8 * 1024, 2},
2142 {32 * 1024, 1},
2143 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002144 },
2145 .block_erase = erase_sector_jedec,
2146 }, {
2147 .eraseblocks = { {256 * 1024, 1} },
2148 .block_erase = erase_chip_block_jedec,
2149 },
2150 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002151 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002152 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002153 },
2154
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002155 {
2156 .vendor = "EON",
2157 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002158 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002159 .manufacture_id = EON_ID,
2160 .model_id = EN_29F002T,
2161 .total_size = 256,
2162 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002163 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002164 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002165 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002166 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002167 .block_erasers =
2168 {
2169 {
2170 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002171 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002172 {32 * 1024, 1},
2173 {8 * 1024, 2},
2174 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002175 },
2176 .block_erase = erase_sector_jedec,
2177 }, {
2178 .eraseblocks = { {256 * 1024, 1} },
2179 .block_erase = erase_chip_block_jedec,
2180 },
2181 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002182 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002183 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002184 },
2185
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002186 {
2187 .vendor = "Fujitsu",
2188 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002189 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002190 .manufacture_id = FUJITSU_ID,
2191 .model_id = MBM29F004BC,
2192 .total_size = 512,
2193 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002194 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002195 .tested = TEST_UNTESTED,
2196 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002197 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002198 .block_erasers =
2199 {
2200 {
2201 .eraseblocks = {
2202 {16 * 1024, 1},
2203 {8 * 1024, 2},
2204 {32 * 1024, 1},
2205 {64 * 1024, 7},
2206 },
Sean Nelson35727f72010-01-28 23:55:12 +00002207 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002208 }, {
2209 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002210 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002211 },
2212 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002214 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002215 },
2216
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002217 {
2218 .vendor = "Fujitsu",
2219 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002220 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002221 .manufacture_id = FUJITSU_ID,
2222 .model_id = MBM29F004TC,
2223 .total_size = 512,
2224 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002225 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002226 .tested = TEST_UNTESTED,
2227 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002228 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002229 .block_erasers =
2230 {
2231 {
2232 .eraseblocks = {
2233 {64 * 1024, 7},
2234 {32 * 1024, 1},
2235 {8 * 1024, 2},
2236 {16 * 1024, 1},
2237 },
Sean Nelson35727f72010-01-28 23:55:12 +00002238 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002239 }, {
2240 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002241 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002242 },
2243 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002244 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002245 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002246 },
2247
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002248 {
Sean Nelson35727f72010-01-28 23:55:12 +00002249 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002250 .vendor = "Fujitsu",
2251 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002252 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002253 .manufacture_id = FUJITSU_ID,
2254 .model_id = MBM29F400BC,
2255 .total_size = 512,
2256 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002257 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002258 .tested = TEST_UNTESTED,
2259 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002260 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002261 .block_erasers =
2262 {
2263 {
2264 .eraseblocks = {
2265 {16 * 1024, 1},
2266 {8 * 1024, 2},
2267 {32 * 1024, 1},
2268 {64 * 1024, 7},
2269 },
2270 .block_erase = block_erase_m29f400bt,
2271 }, {
2272 .eraseblocks = { {512 * 1024, 1} },
2273 .block_erase = block_erase_chip_m29f400bt,
2274 },
2275 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002276 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002277 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002278 },
2279
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002280 {
2281 .vendor = "Fujitsu",
2282 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002283 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002284 .manufacture_id = FUJITSU_ID,
2285 .model_id = MBM29F400TC,
2286 .total_size = 512,
2287 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002288 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002289 .tested = TEST_UNTESTED,
2290 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002291 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002292 .block_erasers =
2293 {
2294 {
2295 .eraseblocks = {
2296 {64 * 1024, 7},
2297 {32 * 1024, 1},
2298 {8 * 1024, 2},
2299 {16 * 1024, 1},
2300 },
2301 .block_erase = block_erase_m29f400bt,
2302 }, {
2303 .eraseblocks = { {512 * 1024, 1} },
2304 .block_erase = block_erase_chip_m29f400bt,
2305 },
2306 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002307 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002308 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002309 },
2310
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002311 {
2312 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002313 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002314 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002315 .manufacture_id = INTEL_ID,
2316 .model_id = P28F001BXB,
2317 .total_size = 128,
2318 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002319 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002320 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002321 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002322 .block_erasers =
2323 {
2324 {
2325 .eraseblocks = {
2326 {8 * 1024, 1},
2327 {4 * 1024, 2},
2328 {112 * 1024, 1},
2329 },
Sean Nelson28accc22010-03-19 18:47:06 +00002330 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002331 },
2332 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002333 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002334 .read = read_memmapped,
2335 },
2336
2337 {
2338 .vendor = "Intel",
2339 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002340 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002341 .manufacture_id = INTEL_ID,
2342 .model_id = P28F001BXT,
2343 .total_size = 128,
2344 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002345 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002346 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002347 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002348 .block_erasers =
2349 {
2350 {
2351 .eraseblocks = {
2352 {112 * 1024, 1},
2353 {4 * 1024, 2},
2354 {8 * 1024, 1},
2355 },
Sean Nelson28accc22010-03-19 18:47:06 +00002356 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002357 },
2358 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002359 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002360 .read = read_memmapped,
2361 },
2362
2363 {
2364 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002365 .name = "28F004S5",
2366 .bustype = CHIP_BUSTYPE_PARALLEL,
2367 .manufacture_id = INTEL_ID,
2368 .model_id = E_28F004S5,
2369 .total_size = 512,
2370 .page_size = 256,
2371 .tested = TEST_UNTESTED,
2372 .probe = probe_82802ab,
2373 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002374 .block_erasers =
2375 {
2376 {
2377 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002378 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002379 },
2380 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002381 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002382 .write = write_82802ab,
2383 .read = read_memmapped,
2384 },
2385
2386 {
2387 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002388 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002389 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002390 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002391 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002392 .total_size = 512,
2393 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002394 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002395 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002396 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002397 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002398 .block_erasers =
2399 {
2400 {
2401 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002402 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002403 },
2404 },
Sean Nelson28accc22010-03-19 18:47:06 +00002405 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002406 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002407 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002408 },
2409
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002410 {
2411 .vendor = "Intel",
2412 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002413 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002414 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002415 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002416 .total_size = 1024,
2417 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002418 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002419 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002420 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002421 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002422 .block_erasers =
2423 {
2424 {
2425 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00002426 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002427 },
2428 },
Sean Nelson28accc22010-03-19 18:47:06 +00002429 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002430 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002431 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002432 },
2433
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002434 {
2435 .vendor = "Macronix",
2436 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002437 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002438 .manufacture_id = MX_ID,
2439 .model_id = MX_25L512,
2440 .total_size = 64,
2441 .page_size = 256,
2442 .tested = TEST_UNTESTED,
2443 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002444 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002445 .block_erasers =
2446 {
2447 {
2448 .eraseblocks = { {4 * 1024, 16} },
2449 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002450 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002451 .eraseblocks = { {64 * 1024, 1} },
2452 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002453 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002454 .eraseblocks = { {64 * 1024, 1} },
2455 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002456 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002457 .eraseblocks = { {64 * 1024, 1} },
2458 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002459 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002460 .eraseblocks = { {64 * 1024, 1} },
2461 .block_erase = spi_block_erase_c7,
2462 },
2463 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002464 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002465 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002466 },
2467
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002468 {
2469 .vendor = "Macronix",
2470 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002471 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002472 .manufacture_id = MX_ID,
2473 .model_id = MX_25L1005,
2474 .total_size = 128,
2475 .page_size = 256,
2476 .tested = TEST_UNTESTED,
2477 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002478 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002479 .block_erasers =
2480 {
2481 {
2482 .eraseblocks = { {4 * 1024, 32} },
2483 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002484 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002485 .eraseblocks = { {64 * 1024, 2} },
2486 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002487 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002488 .eraseblocks = { {128 * 1024, 1} },
2489 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002490 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002491 .eraseblocks = { {128 * 1024, 1} },
2492 .block_erase = spi_block_erase_c7,
2493 },
2494 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002495 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002496 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002497 },
2498
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002499 {
2500 .vendor = "Macronix",
2501 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002502 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002503 .manufacture_id = MX_ID,
2504 .model_id = MX_25L2005,
2505 .total_size = 256,
2506 .page_size = 256,
2507 .tested = TEST_UNTESTED,
2508 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002509 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002510 .block_erasers =
2511 {
2512 {
2513 .eraseblocks = { {4 * 1024, 64} },
2514 .block_erase = spi_block_erase_20,
2515 }, {
2516 .eraseblocks = { {64 * 1024, 4} },
2517 .block_erase = spi_block_erase_52,
2518 }, {
2519 .eraseblocks = { {64 * 1024, 4} },
2520 .block_erase = spi_block_erase_d8,
2521 }, {
2522 .eraseblocks = { {256 * 1024, 1} },
2523 .block_erase = spi_block_erase_60,
2524 }, {
2525 .eraseblocks = { {256 * 1024, 1} },
2526 .block_erase = spi_block_erase_c7,
2527 },
2528 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002529 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002530 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002531 },
2532
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002533 {
2534 .vendor = "Macronix",
2535 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002536 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002537 .manufacture_id = MX_ID,
2538 .model_id = MX_25L4005,
2539 .total_size = 512,
2540 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002541 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002542 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002543 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002544 .block_erasers =
2545 {
2546 {
2547 .eraseblocks = { {4 * 1024, 128} },
2548 .block_erase = spi_block_erase_20,
2549 }, {
2550 .eraseblocks = { {64 * 1024, 8} },
2551 .block_erase = spi_block_erase_52,
2552 }, {
2553 .eraseblocks = { {64 * 1024, 8} },
2554 .block_erase = spi_block_erase_d8,
2555 }, {
2556 .eraseblocks = { {512 * 1024, 1} },
2557 .block_erase = spi_block_erase_60,
2558 }, {
2559 .eraseblocks = { {512 * 1024, 1} },
2560 .block_erase = spi_block_erase_c7,
2561 },
2562 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002563 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002564 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002565 },
2566
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002567 {
2568 .vendor = "Macronix",
2569 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002570 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002571 .manufacture_id = MX_ID,
2572 .model_id = MX_25L8005,
2573 .total_size = 1024,
2574 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002575 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002576 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002577 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002578 .block_erasers =
2579 {
2580 {
2581 .eraseblocks = { {4 * 1024, 256} },
2582 .block_erase = spi_block_erase_20,
2583 }, {
2584 .eraseblocks = { {64 * 1024, 16} },
2585 .block_erase = spi_block_erase_52,
2586 }, {
2587 .eraseblocks = { {64 * 1024, 16} },
2588 .block_erase = spi_block_erase_d8,
2589 }, {
2590 .eraseblocks = { {1024 * 1024, 1} },
2591 .block_erase = spi_block_erase_60,
2592 }, {
2593 .eraseblocks = { {1024 * 1024, 1} },
2594 .block_erase = spi_block_erase_c7,
2595 },
2596 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002597 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002598 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002599 },
2600
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002601 {
2602 .vendor = "Macronix",
2603 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002604 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002605 .manufacture_id = MX_ID,
2606 .model_id = MX_25L1605,
2607 .total_size = 2048,
2608 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002609 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002610 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002611 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002612 .block_erasers =
2613 {
2614 {
2615 .eraseblocks = { {4 * 1024, 512} },
2616 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2617 }, {
2618 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2619 .block_erase = spi_block_erase_52,
2620 }, {
2621 .eraseblocks = { {64 * 1024, 32} },
2622 .block_erase = spi_block_erase_d8,
2623 }, {
2624 .eraseblocks = { {2 * 1024 * 1024, 1} },
2625 .block_erase = spi_block_erase_60,
2626 }, {
2627 .eraseblocks = { {2 * 1024 * 1024, 1} },
2628 .block_erase = spi_block_erase_c7,
2629 },
2630 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002631 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002632 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002633 },
2634
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002635 {
2636 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002637 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002638 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002639 .manufacture_id = MX_ID,
2640 .model_id = MX_25L1635D,
2641 .total_size = 2048,
2642 .page_size = 256,
2643 .tested = TEST_UNTESTED,
2644 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002645 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002646 .block_erasers =
2647 {
2648 {
2649 .eraseblocks = { {4 * 1024, 512} },
2650 .block_erase = spi_block_erase_20,
2651 }, {
2652 .eraseblocks = { {64 * 1024, 32} },
2653 .block_erase = spi_block_erase_d8,
2654 }, {
2655 .eraseblocks = { {2 * 1024 * 1024, 1} },
2656 .block_erase = spi_block_erase_60,
2657 }, {
2658 .eraseblocks = { {2 * 1024 * 1024, 1} },
2659 .block_erase = spi_block_erase_c7,
2660 }
2661 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002662 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002663 .read = spi_chip_read,
2664 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002665
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002666 {
2667 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002668 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002669 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002670 .manufacture_id = MX_ID,
2671 .model_id = MX_25L3205,
2672 .total_size = 4096,
2673 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002674 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002675 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002676 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002677 .block_erasers =
2678 {
2679 {
2680 .eraseblocks = { {4 * 1024, 1024} },
2681 .block_erase = spi_block_erase_20,
2682 }, {
2683 .eraseblocks = { {4 * 1024, 1024} },
2684 .block_erase = spi_block_erase_d8,
2685 }, {
2686 .eraseblocks = { {4 * 1024 * 1024, 1} },
2687 .block_erase = spi_block_erase_60,
2688 }, {
2689 .eraseblocks = { {4 * 1024 * 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",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002699 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002700 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002701 .manufacture_id = MX_ID,
2702 .model_id = MX_25L3235D,
2703 .total_size = 4096,
2704 .page_size = 256,
2705 .tested = TEST_UNTESTED,
2706 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002707 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002708 .block_erasers =
2709 {
2710 {
2711 .eraseblocks = { {4 * 1024, 1024} },
2712 .block_erase = spi_block_erase_20,
2713 }, {
2714 .eraseblocks = { {64 * 1024, 64} },
2715 .block_erase = spi_block_erase_d8,
2716 }, {
2717 .eraseblocks = { {4 * 1024 * 1024, 1} },
2718 .block_erase = spi_block_erase_60,
2719 }, {
2720 .eraseblocks = { {4 * 1024 * 1024, 1} },
2721 .block_erase = spi_block_erase_c7,
2722 }
2723 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002724 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002725 .read = spi_chip_read,
2726 },
2727
2728 {
2729 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002730 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002731 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002732 .manufacture_id = MX_ID,
2733 .model_id = MX_25L6405,
2734 .total_size = 8192,
2735 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002736 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002737 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002738 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002739 .block_erasers =
2740 {
2741 {
2742 .eraseblocks = { {64 * 1024, 128} },
2743 .block_erase = spi_block_erase_20,
2744 }, {
2745 .eraseblocks = { {64 * 1024, 128} },
2746 .block_erase = spi_block_erase_d8,
2747 }, {
2748 .eraseblocks = { {8 * 1024 * 1024, 1} },
2749 .block_erase = spi_block_erase_60,
2750 }, {
2751 .eraseblocks = { {8 * 1024 * 1024, 1} },
2752 .block_erase = spi_block_erase_c7,
2753 }
2754 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002755 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002756 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002757 },
2758
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002759 {
2760 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002761 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002762 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002763 .manufacture_id = MX_ID,
2764 .model_id = MX_25L12805,
2765 .total_size = 16384,
2766 .page_size = 256,
2767 .tested = TEST_UNTESTED,
2768 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002769 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002770 .block_erasers =
2771 {
2772 {
2773 .eraseblocks = { {4 * 1024, 4096} },
2774 .block_erase = spi_block_erase_20,
2775 }, {
2776 .eraseblocks = { {64 * 1024, 256} },
2777 .block_erase = spi_block_erase_d8,
2778 }, {
2779 .eraseblocks = { {16 * 1024 * 1024, 1} },
2780 .block_erase = spi_block_erase_60,
2781 }, {
2782 .eraseblocks = { {16 * 1024 * 1024, 1} },
2783 .block_erase = spi_block_erase_c7,
2784 }
2785 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002786 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002787 .read = spi_chip_read,
2788 },
2789
2790 {
2791 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002792 .name = "MX29F001B",
2793 .bustype = CHIP_BUSTYPE_PARALLEL,
2794 .manufacture_id = MX_ID,
2795 .model_id = MX_29F001B,
2796 .total_size = 128,
2797 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002798 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2799 .tested = TEST_UNTESTED,
2800 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002801 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002802 .block_erasers =
2803 {
2804 {
2805 .eraseblocks = {
2806 {8 * 1024, 1},
2807 {4 * 1024, 2},
2808 {8 * 1024, 2},
2809 {32 * 1024, 1},
2810 {64 * 1024, 1},
2811 },
Sean Nelson35727f72010-01-28 23:55:12 +00002812 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002813 }, {
2814 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002815 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002816 }
2817 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002818 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002819 .read = read_memmapped,
2820 },
2821
2822 {
2823 .vendor = "Macronix",
2824 .name = "MX29F001T",
2825 .bustype = CHIP_BUSTYPE_PARALLEL,
2826 .manufacture_id = MX_ID,
2827 .model_id = MX_29F001T,
2828 .total_size = 128,
2829 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002830 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2831 .tested = TEST_UNTESTED,
2832 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002833 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002834 .block_erasers =
2835 {
2836 {
2837 .eraseblocks = {
2838 {64 * 1024, 1},
2839 {32 * 1024, 1},
2840 {8 * 1024, 2},
2841 {4 * 1024, 2},
2842 {8 * 1024, 1},
2843 },
Sean Nelson35727f72010-01-28 23:55:12 +00002844 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002845 }, {
2846 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002847 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002848 }
2849 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002850 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002851 .read = read_memmapped,
2852 },
2853
2854 {
2855 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002856 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002857 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002858 .manufacture_id = MX_ID,
2859 .model_id = MX_29F002B,
2860 .total_size = 256,
2861 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002862 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002863 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002864 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002865 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002866 .block_erasers =
2867 {
2868 {
2869 .eraseblocks = {
2870 {16 * 1024, 1},
2871 {8 * 1024, 2},
2872 {32 * 1024, 1},
2873 {64 * 1024, 3},
2874 },
Sean Nelson35727f72010-01-28 23:55:12 +00002875 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002876 }, {
2877 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002878 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002879 },
2880 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002881 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002882 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002883 },
2884
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002885 {
2886 .vendor = "Macronix",
2887 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002888 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002889 .manufacture_id = MX_ID,
2890 .model_id = MX_29F002T,
2891 .total_size = 256,
2892 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002893 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002894 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00002895 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002896 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002897 .block_erasers =
2898 {
2899 {
2900 .eraseblocks = {
2901 {64 * 1024, 3},
2902 {32 * 1024, 1},
2903 {8 * 1024, 2},
2904 {16 * 1024, 1},
2905 },
Sean Nelson35727f72010-01-28 23:55:12 +00002906 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002907 }, {
2908 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002909 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002910 },
2911 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002912 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002913 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002914 },
2915
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002916 {
2917 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002918 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002919 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002920 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002921 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002922 .total_size = 512,
2923 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002924 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2925 .tested = TEST_UNTESTED,
2926 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002927 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002928 .block_erasers =
2929 {
2930 {
2931 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00002932 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002933 }, {
2934 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002935 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002936 },
2937 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002938 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002939 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002940 },
2941
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002942 {
2943 .vendor = "Numonyx",
2944 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002945 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002946 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002947 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002948 .total_size = 128,
2949 .page_size = 256,
2950 .tested = TEST_UNTESTED,
2951 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002952 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002953 .block_erasers =
2954 {
2955 {
2956 .eraseblocks = { {4 * 1024, 32} },
2957 .block_erase = spi_block_erase_20,
2958 }, {
2959 .eraseblocks = { {64 * 1024, 2} },
2960 .block_erase = spi_block_erase_d8,
2961 }, {
2962 .eraseblocks = { {128 * 1024, 1} },
2963 .block_erase = spi_block_erase_c7,
2964 }
2965 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002966 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002967 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002968 },
2969
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002970 {
2971 .vendor = "Numonyx",
2972 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002973 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002974 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002975 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002976 .total_size = 256,
2977 .page_size = 256,
2978 .tested = TEST_UNTESTED,
2979 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002980 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002981 .block_erasers =
2982 {
2983 {
2984 .eraseblocks = { {4 * 1024, 64} },
2985 .block_erase = spi_block_erase_20,
2986 }, {
2987 .eraseblocks = { {64 * 1024, 4} },
2988 .block_erase = spi_block_erase_d8,
2989 }, {
2990 .eraseblocks = { {256 * 1024, 1} },
2991 .block_erase = spi_block_erase_c7,
2992 }
2993 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002994 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002995 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002996 },
2997
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002998 {
2999 .vendor = "Numonyx",
3000 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003001 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003002 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003003 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003004 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003005 .page_size = 256,
3006 .tested = TEST_UNTESTED,
3007 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003008 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003009 .block_erasers =
3010 {
3011 {
3012 .eraseblocks = { {4 * 1024, 128} },
3013 .block_erase = spi_block_erase_20,
3014 }, {
3015 .eraseblocks = { {64 * 1024, 8} },
3016 .block_erase = spi_block_erase_d8,
3017 }, {
3018 .eraseblocks = { {512 * 1024, 1} },
3019 .block_erase = spi_block_erase_c7,
3020 }
3021 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003022 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003023 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003024 },
3025
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003026 {
3027 .vendor = "Numonyx",
3028 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003029 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003030 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003031 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003032 .total_size = 1024,
3033 .page_size = 256,
3034 .tested = TEST_OK_PREW,
3035 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003036 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003037 .block_erasers =
3038 {
3039 {
3040 .eraseblocks = { {4 * 1024, 256} },
3041 .block_erase = spi_block_erase_20,
3042 }, {
3043 .eraseblocks = { {64 * 1024, 16} },
3044 .block_erase = spi_block_erase_d8,
3045 }, {
3046 .eraseblocks = { {1024 * 1024, 1} },
3047 .block_erase = spi_block_erase_c7,
3048 }
3049 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003050 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003051 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003052 },
3053
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003054 {
3055 .vendor = "Numonyx",
3056 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003057 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003058 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003059 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003060 .total_size = 2048,
3061 .page_size = 256,
3062 .tested = TEST_UNTESTED,
3063 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003064 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003065 .block_erasers =
3066 {
3067 {
3068 .eraseblocks = { {4 * 1024, 512} },
3069 .block_erase = spi_block_erase_20,
3070 }, {
3071 .eraseblocks = { {64 * 1024, 32} },
3072 .block_erase = spi_block_erase_d8,
3073 }, {
3074 .eraseblocks = { {2 * 1024 * 1024, 1} },
3075 .block_erase = spi_block_erase_c7,
3076 }
3077 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003078 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003079 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003080 },
3081
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003082 {
3083 .vendor = "PMC",
3084 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003085 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003086 .manufacture_id = PMC_ID,
3087 .model_id = PMC_25LV010,
3088 .total_size = 128,
3089 .page_size = 256,
3090 .tested = TEST_UNTESTED,
3091 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003092 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003093 .block_erasers =
3094 {
3095 {
3096 .eraseblocks = { {4 * 1024, 32} },
3097 .block_erase = spi_block_erase_d7,
3098 }, {
3099 .eraseblocks = { {32 * 1024, 4} },
3100 .block_erase = spi_block_erase_d8,
3101 }, {
3102 .eraseblocks = { {128 * 1024, 1} },
3103 .block_erase = spi_block_erase_c7,
3104 }
3105 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003106 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003107 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003108 },
3109
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003110 {
3111 .vendor = "PMC",
3112 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003113 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003114 .manufacture_id = PMC_ID,
3115 .model_id = PMC_25LV016B,
3116 .total_size = 2048,
3117 .page_size = 256,
3118 .tested = TEST_UNTESTED,
3119 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003120 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003121 .block_erasers =
3122 {
3123 {
3124 .eraseblocks = { {4 * 1024, 512} },
3125 .block_erase = spi_block_erase_d7,
3126 }, {
3127 .eraseblocks = { {4 * 1024, 512} },
3128 .block_erase = spi_block_erase_20,
3129 }, {
3130 .eraseblocks = { {64 * 1024, 32} },
3131 .block_erase = spi_block_erase_d8,
3132 }, {
3133 .eraseblocks = { {2 * 1024 * 1024, 1} },
3134 .block_erase = spi_block_erase_60,
3135 }, {
3136 .eraseblocks = { {2 * 1024 * 1024, 1} },
3137 .block_erase = spi_block_erase_c7,
3138 }
3139 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003140 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003141 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003142 },
3143
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003144 {
3145 .vendor = "PMC",
3146 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003147 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003148 .manufacture_id = PMC_ID,
3149 .model_id = PMC_25LV020,
3150 .total_size = 256,
3151 .page_size = 256,
3152 .tested = TEST_UNTESTED,
3153 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003154 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003155 .block_erasers =
3156 {
3157 {
3158 .eraseblocks = { {4 * 1024, 64} },
3159 .block_erase = spi_block_erase_d7,
3160 }, {
3161 .eraseblocks = { {64 * 1024, 4} },
3162 .block_erase = spi_block_erase_d8,
3163 }, {
3164 .eraseblocks = { {256 * 1024, 1} },
3165 .block_erase = spi_block_erase_c7,
3166 }
3167 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003168 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003169 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003170 },
3171
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003172 {
3173 .vendor = "PMC",
3174 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003175 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003176 .manufacture_id = PMC_ID,
3177 .model_id = PMC_25LV040,
3178 .total_size = 512,
3179 .page_size = 256,
3180 .tested = TEST_UNTESTED,
3181 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003182 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003183 .block_erasers =
3184 {
3185 {
3186 .eraseblocks = { {4 * 1024, 128} },
3187 .block_erase = spi_block_erase_d7,
3188 }, {
3189 .eraseblocks = { {64 * 1024, 8} },
3190 .block_erase = spi_block_erase_d8,
3191 }, {
3192 .eraseblocks = { {512 * 1024, 1} },
3193 .block_erase = spi_block_erase_c7,
3194 }
3195 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003196 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003197 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003198 },
3199
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003200 {
3201 .vendor = "PMC",
3202 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003203 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003204 .manufacture_id = PMC_ID,
3205 .model_id = PMC_25LV080B,
3206 .total_size = 1024,
3207 .page_size = 256,
3208 .tested = TEST_UNTESTED,
3209 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003210 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003211 .block_erasers =
3212 {
3213 {
3214 .eraseblocks = { {4 * 1024, 256} },
3215 .block_erase = spi_block_erase_d7,
3216 }, {
3217 .eraseblocks = { {4 * 1024, 256} },
3218 .block_erase = spi_block_erase_20,
3219 }, {
3220 .eraseblocks = { {64 * 1024, 16} },
3221 .block_erase = spi_block_erase_d8,
3222 }, {
3223 .eraseblocks = { {1024 * 1024, 1} },
3224 .block_erase = spi_block_erase_60,
3225 }, {
3226 .eraseblocks = { {1024 * 1024, 1} },
3227 .block_erase = spi_block_erase_c7,
3228 }
3229 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003230 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003231 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003232 },
3233
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003234 {
3235 .vendor = "PMC",
3236 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003237 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003238 .manufacture_id = PMC_ID,
3239 .model_id = PMC_25LV512,
3240 .total_size = 64,
3241 .page_size = 256,
3242 .tested = TEST_UNTESTED,
3243 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003244 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003245 .block_erasers =
3246 {
3247 {
3248 .eraseblocks = { {4 * 1024, 16} },
3249 .block_erase = spi_block_erase_d7,
3250 }, {
3251 .eraseblocks = { {32 * 1024, 2} },
3252 .block_erase = spi_block_erase_d8,
3253 }, {
3254 .eraseblocks = { {64 * 1024, 1} },
3255 .block_erase = spi_block_erase_c7,
3256 }
3257 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003258 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003259 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003260 },
3261
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003262 {
3263 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003264 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003265 .bustype = CHIP_BUSTYPE_PARALLEL,
3266 .manufacture_id = PMC_ID_NOPREFIX,
3267 .model_id = PMC_29F002T,
3268 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003269 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003270 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3271 .tested = TEST_UNTESTED,
3272 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003273 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003274 .block_erasers =
3275 {
3276 {
3277 .eraseblocks = {
3278 {128 * 1024, 1},
3279 {96 * 1024, 1},
3280 {8 * 1024, 2},
3281 {16 * 1024, 1},
3282 },
Sean Nelson35727f72010-01-28 23:55:12 +00003283 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003284 }, {
3285 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003286 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003287 },
3288 },
Sean Nelson35727f72010-01-28 23:55:12 +00003289 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003290 .read = read_memmapped,
3291 },
3292
3293 {
3294 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003295 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003296 .bustype = CHIP_BUSTYPE_PARALLEL,
3297 .manufacture_id = PMC_ID_NOPREFIX,
3298 .model_id = PMC_29F002B,
3299 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003300 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003301 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003302 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003303 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003304 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003305 .block_erasers =
3306 {
3307 {
3308 .eraseblocks = {
3309 {16 * 1024, 1},
3310 {8 * 1024, 2},
3311 {96 * 1024, 1},
3312 {128 * 1024, 1},
3313 },
Sean Nelson35727f72010-01-28 23:55:12 +00003314 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003315 }, {
3316 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003317 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003318 },
3319 },
Sean Nelson35727f72010-01-28 23:55:12 +00003320 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003321 .read = read_memmapped,
3322 },
3323
3324 {
3325 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003326 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003327 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003328 .manufacture_id = PMC_ID_NOPREFIX,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003329 .model_id = PMC_39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003330 .total_size = 128,
3331 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003332 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Michael Karcherd4e53592010-03-25 09:23:46 +00003333 .tested = TEST_OK_PRW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003334 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003335 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003336 .block_erasers =
3337 {
3338 {
3339 .eraseblocks = { {4 * 1024, 32} },
3340 .block_erase = erase_sector_jedec,
3341 }, {
3342 .eraseblocks = { {64 * 1024, 2} },
3343 .block_erase = erase_block_jedec,
3344 }, {
3345 .eraseblocks = { {128 * 1024, 1} },
3346 .block_erase = erase_chip_block_jedec,
3347 }
3348 },
Sean Nelson35727f72010-01-28 23:55:12 +00003349 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003350 .read = read_memmapped,
3351 },
3352
3353 {
3354 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003355 .name = "Pm39LV020",
3356 .bustype = CHIP_BUSTYPE_PARALLEL,
3357 .manufacture_id = PMC_ID_NOPREFIX,
3358 .model_id = PMC_39LV020,
3359 .total_size = 256,
3360 .page_size = 4096,
3361 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3362 .tested = TEST_UNTESTED,
3363 .probe = probe_jedec,
3364 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3365 .block_erasers =
3366 {
3367 {
3368 .eraseblocks = { {4 * 1024, 64} },
3369 .block_erase = erase_sector_jedec,
3370 }, {
3371 .eraseblocks = { {64 * 1024, 4} },
3372 .block_erase = erase_block_jedec,
3373 }, {
3374 .eraseblocks = { {256 * 1024, 1} },
3375 .block_erase = erase_chip_block_jedec,
3376 }
3377 },
3378 .write = write_jedec_1,
3379 .read = read_memmapped,
3380 },
3381
3382 {
3383 .vendor = "PMC",
3384 .name = "Pm39LV040",
3385 .bustype = CHIP_BUSTYPE_PARALLEL,
3386 .manufacture_id = PMC_ID_NOPREFIX,
3387 .model_id = PMC_39LV040,
3388 .total_size = 512,
3389 .page_size = 4096,
3390 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3391 .tested = TEST_UNTESTED,
3392 .probe = probe_jedec,
3393 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3394 .block_erasers =
3395 {
3396 {
3397 .eraseblocks = { {4 * 1024, 128} },
3398 .block_erase = erase_sector_jedec,
3399 }, {
3400 .eraseblocks = { {64 * 1024, 8} },
3401 .block_erase = erase_block_jedec,
3402 }, {
3403 .eraseblocks = { {512 * 1024, 1} },
3404 .block_erase = erase_chip_block_jedec,
3405 }
3406 },
3407 .write = write_jedec_1,
3408 .read = read_memmapped,
3409 },
3410
3411 {
3412 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003413 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003414 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003415 .manufacture_id = PMC_ID_NOPREFIX,
3416 .model_id = PMC_49FL002,
3417 .total_size = 256,
3418 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003419 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00003420 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003421 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003422 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003423 .block_erasers =
3424 {
3425 {
3426 .eraseblocks = { {4 * 1024, 64} },
3427 .block_erase = erase_sector_jedec,
3428 }, {
3429 .eraseblocks = { {16 * 1024, 16} },
3430 .block_erase = erase_block_jedec,
3431 }, {
3432 .eraseblocks = { {256 * 1024, 1} },
3433 .block_erase = erase_chip_block_jedec,
3434 }
3435 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003436 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003437 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003438 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003439 },
3440
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003441 {
3442 .vendor = "PMC",
3443 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003444 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003445 .manufacture_id = PMC_ID_NOPREFIX,
3446 .model_id = PMC_49FL004,
3447 .total_size = 512,
3448 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003449 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3450 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003451 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003452 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003453 .block_erasers =
3454 {
3455 {
3456 .eraseblocks = { {4 * 1024, 128} },
3457 .block_erase = erase_sector_jedec,
3458 }, {
3459 .eraseblocks = { {64 * 1024, 8} },
3460 .block_erase = erase_block_jedec,
3461 }, {
3462 .eraseblocks = { {512 * 1024, 1} },
3463 .block_erase = erase_chip_block_jedec,
3464 }
3465 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003466 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003467 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003468 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003469 },
3470
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003471 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003472 .vendor = "Sanyo",
3473 .name = "LF25FW203A",
3474 .bustype = CHIP_BUSTYPE_SPI,
3475 .manufacture_id = SANYO_ID,
3476 .model_id = SANYO_LE25FW203A,
3477 .total_size = 2048,
3478 .page_size = 256,
3479 .tested = TEST_UNTESTED,
3480 .probe = probe_spi_rdid,
3481 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003482 .block_erasers =
3483 {
3484 {
3485 .eraseblocks = { {64 * 1024, 32} },
3486 .block_erase = spi_block_erase_d8,
3487 }, {
3488 .eraseblocks = { {2 * 1024 * 1024, 1} },
3489 .block_erase = spi_block_erase_c7,
3490 }
3491 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003492 .write = spi_chip_write_256,
3493 .read = spi_chip_read,
3494 },
3495
3496 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003497 .vendor = "Sharp",
3498 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003499 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003500 .manufacture_id = SHARP_ID,
3501 .model_id = SHARP_LHF00L04,
3502 .total_size = 1024,
3503 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003504 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003505 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003506 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003507 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003508 .block_erasers =
3509 {
3510 {
3511 .eraseblocks = {
3512 {64 * 1024, 15},
3513 {8 * 1024, 8}
3514 },
Sean Nelson28accc22010-03-19 18:47:06 +00003515 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003516 }, {
3517 .eraseblocks = {
3518 {1024 * 1024, 1}
3519 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003520 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003521 },
3522 },
Sean Nelson28accc22010-03-19 18:47:06 +00003523 .unlock = unlock_82802ab,
3524 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003525 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003526 },
3527
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003528 {
3529 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003530 .name = "S25FL008A",
3531 .bustype = CHIP_BUSTYPE_SPI,
3532 .manufacture_id = SPANSION_ID,
3533 .model_id = SPANSION_S25FL008A,
3534 .total_size = 1024,
3535 .page_size = 256,
3536 .tested = TEST_OK_PREW,
3537 .probe = probe_spi_rdid,
3538 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003539 .block_erasers =
3540 {
3541 {
3542 .eraseblocks = { {64 * 1024, 16} },
3543 .block_erase = spi_block_erase_d8,
3544 }, {
3545 .eraseblocks = { {1024 * 1024, 1} },
3546 .block_erase = spi_block_erase_c7,
3547 }
3548 },
3549 .write = spi_chip_write_256,
3550 .read = spi_chip_read,
3551 },
3552
3553 {
3554 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003555 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003556 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003557 .manufacture_id = SPANSION_ID,
3558 .model_id = SPANSION_S25FL016A,
3559 .total_size = 2048,
3560 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003561 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003562 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003563 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003564 .block_erasers =
3565 {
3566 {
3567 .eraseblocks = { {64 * 1024, 32} },
3568 .block_erase = spi_block_erase_d8,
3569 }, {
3570 .eraseblocks = { {2 * 1024 * 1024, 1} },
3571 .block_erase = spi_block_erase_c7,
3572 }
3573 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003574 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003575 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003576 },
3577
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003578 {
3579 .vendor = "SST",
3580 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003581 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003582 .manufacture_id = SST_ID,
3583 .model_id = SST_25VF016B,
3584 .total_size = 2048,
3585 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003586 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003587 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003588 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003589 .block_erasers =
3590 {
3591 {
3592 .eraseblocks = { {4 * 1024, 512} },
3593 .block_erase = spi_block_erase_20,
3594 }, {
3595 .eraseblocks = { {32 * 1024, 64} },
3596 .block_erase = spi_block_erase_52,
3597 }, {
3598 .eraseblocks = { {64 * 1024, 32} },
3599 .block_erase = spi_block_erase_d8,
3600 }, {
3601 .eraseblocks = { {2 * 1024 * 1024, 1} },
3602 .block_erase = spi_block_erase_60,
3603 }, {
3604 .eraseblocks = { {2 * 1024 * 1024, 1} },
3605 .block_erase = spi_block_erase_c7,
3606 },
3607 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003608 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003609 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003610 },
3611
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003612 {
3613 .vendor = "SST",
3614 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003615 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003616 .manufacture_id = SST_ID,
3617 .model_id = SST_25VF032B,
3618 .total_size = 4096,
3619 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003620 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003621 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003622 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003623 .block_erasers =
3624 {
3625 {
3626 .eraseblocks = { {4 * 1024, 1024} },
3627 .block_erase = spi_block_erase_20,
3628 }, {
3629 .eraseblocks = { {32 * 1024, 128} },
3630 .block_erase = spi_block_erase_52,
3631 }, {
3632 .eraseblocks = { {64 * 1024, 64} },
3633 .block_erase = spi_block_erase_d8,
3634 }, {
3635 .eraseblocks = { {4 * 1024 * 1024, 1} },
3636 .block_erase = spi_block_erase_60,
3637 }, {
3638 .eraseblocks = { {4 * 1024 * 1024, 1} },
3639 .block_erase = spi_block_erase_c7,
3640 },
3641 },
3642 .write = spi_chip_write_1,
3643 .read = spi_chip_read,
3644 },
3645
3646 {
3647 .vendor = "SST",
3648 .name = "SST25VF040.REMS",
3649 .bustype = CHIP_BUSTYPE_SPI,
3650 .manufacture_id = SST_ID,
3651 .model_id = SST_25VF040_REMS,
3652 .total_size = 512,
3653 .page_size = 256,
3654 .tested = TEST_OK_PR,
3655 .probe = probe_spi_rems,
3656 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003657 .block_erasers =
3658 {
3659 {
3660 .eraseblocks = { {4 * 1024, 128} },
3661 .block_erase = spi_block_erase_20,
3662 }, {
3663 .eraseblocks = { {32 * 1024, 16} },
3664 .block_erase = spi_block_erase_52,
3665 }, {
3666 .eraseblocks = { {512 * 1024, 1} },
3667 .block_erase = spi_block_erase_60,
3668 },
3669 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003670 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003671 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003672 },
3673
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003674 {
3675 .vendor = "SST",
3676 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003677 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003678 .manufacture_id = SST_ID,
3679 .model_id = SST_25VF040B,
3680 .total_size = 512,
3681 .page_size = 256,
3682 .tested = TEST_UNTESTED,
3683 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003684 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003685 .block_erasers =
3686 {
3687 {
3688 .eraseblocks = { {4 * 1024, 128} },
3689 .block_erase = spi_block_erase_20,
3690 }, {
3691 .eraseblocks = { {32 * 1024, 16} },
3692 .block_erase = spi_block_erase_52,
3693 }, {
3694 .eraseblocks = { {64 * 1024, 8} },
3695 .block_erase = spi_block_erase_d8,
3696 }, {
3697 .eraseblocks = { {512 * 1024, 1} },
3698 .block_erase = spi_block_erase_60,
3699 }, {
3700 .eraseblocks = { {512 * 1024, 1} },
3701 .block_erase = spi_block_erase_c7,
3702 },
3703 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003704 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003705 .read = spi_chip_read,
3706 },
3707
3708 {
3709 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003710 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003711 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003712 .manufacture_id = SST_ID,
3713 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003714 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003715 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003716 .tested = TEST_OK_PR,
3717 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003718 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003719 .block_erasers =
3720 {
3721 {
3722 .eraseblocks = { {4 * 1024, 128} },
3723 .block_erase = spi_block_erase_20,
3724 }, {
3725 .eraseblocks = { {32 * 1024, 16} },
3726 .block_erase = spi_block_erase_52,
3727 }, {
3728 .eraseblocks = { {64 * 1024, 8} },
3729 .block_erase = spi_block_erase_d8,
3730 }, {
3731 .eraseblocks = { {512 * 1024, 1} },
3732 .block_erase = spi_block_erase_60,
3733 }, {
3734 .eraseblocks = { {512 * 1024, 1} },
3735 .block_erase = spi_block_erase_c7,
3736 },
3737 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003738 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003739 .read = spi_chip_read,
3740 },
3741
3742 {
3743 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003744 .name = "SST25VF080B",
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_25VF080B,
3748 .total_size = 1024,
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, 256} },
3757 .block_erase = spi_block_erase_20,
3758 }, {
3759 .eraseblocks = { {32 * 1024, 32} },
3760 .block_erase = spi_block_erase_52,
3761 }, {
3762 .eraseblocks = { {64 * 1024, 16} },
3763 .block_erase = spi_block_erase_d8,
3764 }, {
3765 .eraseblocks = { {1024 * 1024, 1} },
3766 .block_erase = spi_block_erase_60,
3767 }, {
3768 .eraseblocks = { {1024 * 1024, 1} },
3769 .block_erase = spi_block_erase_c7,
3770 },
3771 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +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 = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003779 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003780 .manufacture_id = SST_ID,
3781 .model_id = SST_28SF040,
3782 .total_size = 512,
3783 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003784 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003785 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003786 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003787 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003788 .block_erasers =
3789 {
3790 {
3791 .eraseblocks = { {128, 4096} },
3792 .block_erase = erase_sector_28sf040,
3793 }, {
3794 .eraseblocks = { {512 * 1024, 1} },
3795 .block_erase = erase_chip_28sf040,
3796 }
3797 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003798 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003799 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003800 },
3801
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003802 {
3803 .vendor = "SST",
3804 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003805 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003806 .manufacture_id = SST_ID,
3807 .model_id = SST_29EE010,
3808 .total_size = 128,
3809 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003810 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003811 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003812 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003813 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003814 .block_erasers =
3815 {
3816 {
3817 .eraseblocks = { {128 * 1024, 1} },
3818 .block_erase = erase_chip_block_jedec,
3819 }
3820 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003821 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003822 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003823 },
3824
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003825 {
3826 .vendor = "SST",
3827 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003828 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003829 .manufacture_id = SST_ID,
3830 .model_id = SST_29LE010,
3831 .total_size = 128,
3832 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003833 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003834 .tested = TEST_UNTESTED,
3835 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003836 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003837 .block_erasers =
3838 {
3839 {
3840 .eraseblocks = { {128 * 1024, 1} },
3841 .block_erase = erase_chip_block_jedec,
3842 }
3843 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003844 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003845 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003846 },
3847
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003848 {
3849 .vendor = "SST",
3850 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003851 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003852 .manufacture_id = SST_ID,
3853 .model_id = SST_29EE020A,
3854 .total_size = 256,
3855 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003856 .feature_bits = FEATURE_LONG_RESET,
Michael Karchere2343e02010-03-24 22:55:50 +00003857 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003858 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003859 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003860 .block_erasers =
3861 {
3862 {
3863 .eraseblocks = { {256 * 1024, 1} },
3864 .block_erase = erase_chip_block_jedec,
3865 }
3866 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003867 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003868 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003869 },
3870
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003871 {
3872 .vendor = "SST",
3873 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003874 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003875 .manufacture_id = SST_ID,
3876 .model_id = SST_29LE020,
3877 .total_size = 256,
3878 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003879 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00003880 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003881 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003882 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003883 .block_erasers =
3884 {
3885 {
3886 .eraseblocks = { {256 * 1024, 1} },
3887 .block_erase = erase_chip_block_jedec,
3888 }
3889 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003890 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003891 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003892 },
3893
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003894 {
3895 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00003896 .name = "SST39SF512",
3897 .bustype = CHIP_BUSTYPE_PARALLEL,
3898 .manufacture_id = SST_ID,
3899 .model_id = SST_39SF512,
3900 .total_size = 64,
3901 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003902 .feature_bits = FEATURE_EITHER_RESET,
3903 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003904 .probe = probe_jedec,
3905 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00003906 .block_erasers =
3907 {
3908 {
3909 .eraseblocks = { {4 * 1024, 16} },
3910 .block_erase = erase_sector_jedec,
3911 }, {
3912 .eraseblocks = { {64 * 1024, 1} },
3913 .block_erase = erase_chip_block_jedec,
3914 }
3915 },
Sean Nelson35727f72010-01-28 23:55:12 +00003916 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003917 .read = read_memmapped,
3918 },
3919
3920 {
3921 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003922 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003923 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003924 .manufacture_id = SST_ID,
3925 .model_id = SST_39SF010,
3926 .total_size = 128,
3927 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003928 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003929 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003930 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003931 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003932 .block_erasers =
3933 {
3934 {
3935 .eraseblocks = { {4 * 1024, 32} },
3936 .block_erase = erase_sector_jedec,
3937 }, {
3938 .eraseblocks = { {128 * 1024, 1} },
3939 .block_erase = erase_chip_block_jedec,
3940 }
3941 },
Sean Nelson35727f72010-01-28 23:55:12 +00003942 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003943 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003944 },
3945
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003946 {
3947 .vendor = "SST",
3948 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003949 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003950 .manufacture_id = SST_ID,
3951 .model_id = SST_39SF020,
3952 .total_size = 256,
3953 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003954 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003955 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003956 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003957 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003958 .block_erasers =
3959 {
3960 {
3961 .eraseblocks = { {4 * 1024, 64} },
3962 .block_erase = erase_sector_jedec,
3963 }, {
3964 .eraseblocks = { {256 * 1024, 1} },
3965 .block_erase = erase_chip_block_jedec,
3966 }
3967 },
Sean Nelson35727f72010-01-28 23:55:12 +00003968 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003969 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003970 },
3971
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003972 {
3973 .vendor = "SST",
3974 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003975 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003976 .manufacture_id = SST_ID,
3977 .model_id = SST_39SF040,
3978 .total_size = 512,
3979 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003980 .feature_bits = FEATURE_EITHER_RESET,
3981 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003982 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003983 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003984 .block_erasers =
3985 {
3986 {
3987 .eraseblocks = { {4 * 1024, 128} },
3988 .block_erase = erase_sector_jedec,
3989 }, {
3990 .eraseblocks = { {512 * 1024, 1} },
3991 .block_erase = erase_chip_block_jedec,
3992 }
3993 },
Sean Nelson35727f72010-01-28 23:55:12 +00003994 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003995 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003996 },
3997
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003998 {
3999 .vendor = "SST",
4000 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00004001 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004002 .manufacture_id = SST_ID,
4003 .model_id = SST_39VF512,
4004 .total_size = 64,
4005 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004006 .feature_bits = FEATURE_EITHER_RESET,
4007 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004008 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004009 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00004010 .block_erasers =
4011 {
4012 {
4013 .eraseblocks = { {4 * 1024, 16} },
4014 .block_erase = erase_sector_jedec,
4015 }, {
4016 .eraseblocks = { {64 * 1024, 1} },
4017 .block_erase = erase_chip_block_jedec,
4018 }
4019 },
Sean Nelson35727f72010-01-28 23:55:12 +00004020 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004021 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004022 },
4023
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004024 {
4025 .vendor = "SST",
4026 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004027 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004028 .manufacture_id = SST_ID,
4029 .model_id = SST_39VF010,
4030 .total_size = 128,
4031 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004032 .feature_bits = FEATURE_EITHER_RESET,
4033 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004034 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004035 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004036 .block_erasers =
4037 {
4038 {
4039 .eraseblocks = { {4 * 1024, 32} },
4040 .block_erase = erase_sector_jedec,
4041 }, {
4042 .eraseblocks = { {128 * 1024, 1} },
4043 .block_erase = erase_chip_block_jedec,
4044 }
4045 },
Sean Nelson35727f72010-01-28 23:55:12 +00004046 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004047 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004048 },
4049
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004050 {
4051 .vendor = "SST",
4052 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004053 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004054 .manufacture_id = SST_ID,
4055 .model_id = SST_39VF020,
4056 .total_size = 256,
4057 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004058 .feature_bits = FEATURE_EITHER_RESET,
4059 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004060 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004061 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004062 .block_erasers =
4063 {
4064 {
4065 .eraseblocks = { {4 * 1024, 64} },
4066 .block_erase = erase_sector_jedec,
4067 }, {
4068 .eraseblocks = { {256 * 1024, 1} },
4069 .block_erase = erase_chip_block_jedec,
4070 }
4071 },
Sean Nelson35727f72010-01-28 23:55:12 +00004072 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004073 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004074 },
4075
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004076 {
4077 .vendor = "SST",
4078 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004079 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004080 .manufacture_id = SST_ID,
4081 .model_id = SST_39VF040,
4082 .total_size = 512,
4083 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004084 .feature_bits = FEATURE_EITHER_RESET,
4085 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004086 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004087 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004088 .block_erasers =
4089 {
4090 {
4091 .eraseblocks = { {4 * 1024, 128} },
4092 .block_erase = erase_sector_jedec,
4093 }, {
4094 .eraseblocks = { {512 * 1024, 1} },
4095 .block_erase = erase_chip_block_jedec,
4096 }
4097 },
Sean Nelson35727f72010-01-28 23:55:12 +00004098 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004099 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004100 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004101
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004102 {
4103 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004104 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004105 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004106 .manufacture_id = SST_ID,
4107 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004108 .total_size = 1024,
4109 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004110 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004111 .tested = TEST_UNTESTED,
4112 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004113 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004114 .block_erasers =
4115 {
4116 {
4117 .eraseblocks = { {4 * 1024, 256} },
4118 .block_erase = erase_sector_jedec,
4119 }, {
4120 .eraseblocks = { {64 * 1024, 16} },
4121 .block_erase = erase_block_jedec,
4122 }, {
4123 .eraseblocks = { {1024 * 1024, 1} },
4124 .block_erase = erase_chip_block_jedec,
4125 }
4126 },
Sean Nelson35727f72010-01-28 23:55:12 +00004127 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004128 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004129 },
4130
4131 {
4132 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004133 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004134 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004135 .manufacture_id = SST_ID,
4136 .model_id = SST_49LF002A,
4137 .total_size = 256,
4138 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004139 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004140 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004141 .probe = probe_jedec,
4142 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004143 .block_erasers =
4144 {
4145 {
4146 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004147 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004148 }, {
4149 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004150 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004151 }, {
4152 .eraseblocks = { {256 * 1024, 1} },
4153 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4154 }
4155 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004156 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004157 .unlock = unlock_sst_fwhub,
4158 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004159 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004160 },
4161
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004162 {
4163 .vendor = "SST",
4164 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004165 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004166 .manufacture_id = SST_ID,
4167 .model_id = SST_49LF003A,
4168 .total_size = 384,
4169 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004170 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004171 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004172 .probe = probe_jedec,
4173 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004174 .block_erasers =
4175 {
4176 {
4177 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004178 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004179 }, {
4180 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004181 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004182 }, {
4183 .eraseblocks = { {384 * 1024, 1} },
4184 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4185 }
4186 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004187 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004188 .unlock = unlock_sst_fwhub,
4189 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004190 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004191 },
4192
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004193 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004194 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4195 * and is only honored for 64k block erase, but not 4k sector erase.
4196 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004197 .vendor = "SST",
4198 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004199 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004200 .manufacture_id = SST_ID,
4201 .model_id = SST_49LF004A,
4202 .total_size = 512,
4203 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004204 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004205 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004206 .probe = probe_jedec,
4207 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004208 .block_erasers =
4209 {
4210 {
4211 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004212 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004213 }, {
4214 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004215 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004216 }, {
4217 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004218 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004219 },
4220 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004221 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004222 .unlock = unlock_sst_fwhub,
4223 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004224 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004225 },
4226
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004227 {
4228 .vendor = "SST",
4229 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004230 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004231 .manufacture_id = SST_ID,
4232 .model_id = SST_49LF004C,
4233 .total_size = 512,
4234 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004235 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004236 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004237 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004238 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004239 .block_erasers =
4240 {
4241 {
4242 .eraseblocks = { {4 * 1024, 128} },
4243 .block_erase = erase_sector_49lfxxxc,
4244 }, {
4245 .eraseblocks = {
4246 {64 * 1024, 7},
4247 {32 * 1024, 1},
4248 {8 * 1024, 2},
4249 {16 * 1024, 1},
4250 },
Sean Nelson69e58112010-03-23 17:10:28 +00004251 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004252 }
4253 },
Sean Nelson69e58112010-03-23 17:10:28 +00004254 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004255 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004256 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004257 },
4258
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004259 {
4260 .vendor = "SST",
4261 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004262 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004263 .manufacture_id = SST_ID,
4264 .model_id = SST_49LF008A,
4265 .total_size = 1024,
4266 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004267 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004268 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004269 .probe = probe_jedec,
4270 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004271 .block_erasers =
4272 {
4273 {
4274 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004275 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004276 }, {
4277 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004278 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004279 }, {
4280 .eraseblocks = { {1024 * 1024, 1} },
4281 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4282 }
4283 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004284 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004285 .unlock = unlock_sst_fwhub,
4286 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004287 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004288 },
4289
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004290 {
4291 .vendor = "SST",
4292 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004293 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004294 .manufacture_id = SST_ID,
4295 .model_id = SST_49LF008C,
4296 .total_size = 1024,
4297 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004298 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004299 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004300 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004301 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004302 .block_erasers =
4303 {
4304 {
4305 .eraseblocks = { {4 * 1024, 256} },
4306 .block_erase = erase_sector_49lfxxxc,
4307 }, {
4308 .eraseblocks = {
4309 {64 * 1024, 15},
4310 {32 * 1024, 1},
4311 {8 * 1024, 2},
4312 {16 * 1024, 1},
4313 },
Sean Nelson69e58112010-03-23 17:10:28 +00004314 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004315 }
4316 },
Sean Nelson69e58112010-03-23 17:10:28 +00004317 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004318 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004319 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004320 },
4321
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004322 {
4323 .vendor = "SST",
4324 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004325 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004326 .manufacture_id = SST_ID,
4327 .model_id = SST_49LF016C,
4328 .total_size = 2048,
4329 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004330 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004331 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004332 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004333 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004334 .block_erasers =
4335 {
4336 {
4337 .eraseblocks = { {4 * 1024, 512} },
4338 .block_erase = erase_sector_49lfxxxc,
4339 }, {
4340 .eraseblocks = {
4341 {64 * 1024, 31},
4342 {32 * 1024, 1},
4343 {8 * 1024, 2},
4344 {16 * 1024, 1},
4345 },
Sean Nelson69e58112010-03-23 17:10:28 +00004346 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004347 }
4348 },
Sean Nelson69e58112010-03-23 17:10:28 +00004349 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004350 .write = write_49lfxxxc,
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 = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004357 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004358 .manufacture_id = SST_ID,
4359 .model_id = SST_49LF020,
4360 .total_size = 256,
4361 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004362 .feature_bits = FEATURE_EITHER_RESET,
4363 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004364 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004365 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004366 .block_erasers =
4367 {
4368 {
4369 .eraseblocks = { {4 * 1024, 64} },
4370 .block_erase = erase_sector_jedec,
4371 }, {
4372 .eraseblocks = { {16 * 1024, 16} },
4373 .block_erase = erase_block_jedec,
4374 }, {
4375 .eraseblocks = { {256 * 1024, 1} },
4376 .block_erase = NULL,
4377 }
4378 },
Sean Nelson35727f72010-01-28 23:55:12 +00004379 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004380 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004381 },
4382
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004383 {
4384 .vendor = "SST",
4385 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004386 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004387 .manufacture_id = SST_ID,
4388 .model_id = SST_49LF020A,
4389 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004390 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004391 .feature_bits = FEATURE_EITHER_RESET,
4392 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004393 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004394 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004395 .block_erasers =
4396 {
4397 {
4398 .eraseblocks = { {4 * 1024, 64} },
4399 .block_erase = erase_sector_jedec,
4400 }, {
4401 .eraseblocks = { {16 * 1024, 16} },
4402 .block_erase = erase_block_jedec,
4403 }, {
4404 .eraseblocks = { {256 * 1024, 1} },
4405 .block_erase = NULL,
4406 }
4407 },
Sean Nelson35727f72010-01-28 23:55:12 +00004408 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004409 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004410 },
4411
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004412 {
4413 .vendor = "SST",
4414 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004415 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004416 .manufacture_id = SST_ID,
4417 .model_id = SST_49LF040,
4418 .total_size = 512,
4419 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004420 .feature_bits = FEATURE_EITHER_RESET,
4421 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004422 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004423 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004424 .block_erasers =
4425 {
4426 {
4427 .eraseblocks = { {4 * 1024, 128} },
4428 .block_erase = erase_sector_jedec,
4429 }, {
4430 .eraseblocks = { {64 * 1024, 8} },
4431 .block_erase = erase_block_jedec,
4432 }, {
4433 .eraseblocks = { {512 * 1024, 1} },
4434 .block_erase = NULL,
4435 }
4436 },
Sean Nelson35727f72010-01-28 23:55:12 +00004437 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004438 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004439 },
4440
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004441 {
4442 .vendor = "SST",
4443 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004444 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004445 .manufacture_id = SST_ID,
4446 .model_id = SST_49LF040B,
4447 .total_size = 512,
4448 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004449 .feature_bits = FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004450 .tested = TEST_UNTESTED,
4451 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004452 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004453 .block_erasers =
4454 {
4455 {
4456 .eraseblocks = { {4 * 1024, 128} },
4457 .block_erase = erase_sector_jedec,
4458 }, {
4459 .eraseblocks = { {64 * 1024, 8} },
4460 .block_erase = erase_block_jedec,
4461 }, {
4462 .eraseblocks = { {512 * 1024, 1} },
4463 .block_erase = NULL,
4464 }
4465 },
Sean Nelson35727f72010-01-28 23:55:12 +00004466 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004467 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004468 },
4469
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004470 {
4471 .vendor = "SST",
4472 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004473 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004474 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004475 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004476 .total_size = 1024,
4477 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004478 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherd4e53592010-03-25 09:23:46 +00004479 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004480 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004481 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004482 .block_erasers =
4483 {
4484 {
4485 .eraseblocks = { {4 * 1024, 256} },
4486 .block_erase = erase_sector_jedec,
4487 }, {
4488 .eraseblocks = { {64 * 1024, 16} },
4489 .block_erase = erase_block_jedec,
4490 }, {
4491 .eraseblocks = { {1024 * 1024, 1} },
4492 .block_erase = NULL,
4493 }
4494 },
Sean Nelson35727f72010-01-28 23:55:12 +00004495 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004496 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004497 },
4498
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004499 {
4500 .vendor = "SST",
4501 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004502 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004503 .manufacture_id = SST_ID,
4504 .model_id = SST_49LF160C,
4505 .total_size = 2048,
4506 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004507 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004508 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004509 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004510 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004511 .block_erasers =
4512 {
4513 {
4514 .eraseblocks = { {4 * 1024, 512} },
4515 .block_erase = erase_sector_49lfxxxc,
4516 }, {
4517 .eraseblocks = {
4518 {64 * 1024, 31},
4519 {32 * 1024, 1},
4520 {8 * 1024, 2},
4521 {16 * 1024, 1},
4522 },
Sean Nelson69e58112010-03-23 17:10:28 +00004523 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004524 }
4525 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004526 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004527 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004528 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004529 },
4530
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004531 {
4532 .vendor = "ST",
4533 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004534 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004535 .manufacture_id = ST_ID,
4536 .model_id = ST_M25P05A,
4537 .total_size = 64,
4538 .page_size = 256,
4539 .tested = TEST_UNTESTED,
4540 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004541 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004542 .block_erasers =
4543 {
4544 {
4545 .eraseblocks = { {32 * 1024, 2} },
4546 .block_erase = spi_block_erase_d8,
4547 }, {
4548 .eraseblocks = { {64 * 1024, 1} },
4549 .block_erase = spi_block_erase_c7,
4550 }
4551 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004552 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004553 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004554 },
4555
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004556 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4557 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
4558 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
4559 * only is successful if RDID does not work.
4560 */
4561 {
4562 .vendor = "ST",
4563 .name = "M25P05.RES",
4564 .bustype = CHIP_BUSTYPE_SPI,
4565 .manufacture_id = ST_ID,
4566 .model_id = ST_M25P05_RES,
4567 .total_size = 64,
4568 .page_size = 256,
4569 .tested = TEST_UNTESTED,
4570 .probe = probe_spi_res,
4571 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004572 .block_erasers =
4573 {
4574 {
4575 .eraseblocks = { {32 * 1024, 2} },
4576 .block_erase = spi_block_erase_d8,
4577 }, {
4578 .eraseblocks = { {64 * 1024, 1} },
4579 .block_erase = spi_block_erase_c7,
4580 }
4581 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004582 .write = spi_chip_write_1, /* 128 */
4583 .read = spi_chip_read,
4584 },
4585
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004586 {
4587 .vendor = "ST",
4588 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004589 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004590 .manufacture_id = ST_ID,
4591 .model_id = ST_M25P10A,
4592 .total_size = 128,
4593 .page_size = 256,
4594 .tested = TEST_UNTESTED,
4595 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004596 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004597 .block_erasers =
4598 {
4599 {
4600 .eraseblocks = { {32 * 1024, 4} },
4601 .block_erase = spi_block_erase_d8,
4602 }, {
4603 .eraseblocks = { {128 * 1024, 1} },
4604 .block_erase = spi_block_erase_c7,
4605 }
4606 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004607 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004608 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004609 },
4610
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004611 /* The ST M25P10 has the same problem as the M25P05. */
4612 {
4613 .vendor = "ST",
4614 .name = "M25P10.RES",
4615 .bustype = CHIP_BUSTYPE_SPI,
4616 .manufacture_id = ST_ID,
4617 .model_id = ST_M25P10_RES,
4618 .total_size = 128,
4619 .page_size = 256,
4620 .tested = TEST_UNTESTED,
4621 .probe = probe_spi_res,
4622 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004623 .block_erasers =
4624 {
4625 {
4626 .eraseblocks = { {32 * 1024, 4} },
4627 .block_erase = spi_block_erase_d8,
4628 }, {
4629 .eraseblocks = { {128 * 1024, 1} },
4630 .block_erase = spi_block_erase_c7,
4631 }
4632 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004633 .write = spi_chip_write_1, /* 128 */
4634 .read = spi_chip_read,
4635 },
4636
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004637 {
4638 .vendor = "ST",
4639 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004640 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004641 .manufacture_id = ST_ID,
4642 .model_id = ST_M25P20,
4643 .total_size = 256,
4644 .page_size = 256,
4645 .tested = TEST_UNTESTED,
4646 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004647 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004648 .block_erasers =
4649 {
4650 {
4651 .eraseblocks = { {64 * 1024, 4} },
4652 .block_erase = spi_block_erase_d8,
4653 }, {
4654 .eraseblocks = { {256 * 1024, 1} },
4655 .block_erase = spi_block_erase_c7,
4656 }
4657 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004658 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004659 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004660 },
4661
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004662 {
4663 .vendor = "ST",
4664 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004665 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004666 .manufacture_id = ST_ID,
4667 .model_id = ST_M25P40,
4668 .total_size = 512,
4669 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004670 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004671 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004672 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004673 .block_erasers =
4674 {
4675 {
4676 .eraseblocks = { {64 * 1024, 8} },
4677 .block_erase = spi_block_erase_d8,
4678 }, {
4679 .eraseblocks = { {512 * 1024, 1} },
4680 .block_erase = spi_block_erase_c7,
4681 }
4682 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004683 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004684 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004685 },
4686
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004687 {
4688 .vendor = "ST",
4689 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004690 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004691 .manufacture_id = ST_ID,
4692 .model_id = ST_M25P40_RES,
4693 .total_size = 512,
4694 .page_size = 256,
4695 .tested = TEST_UNTESTED,
4696 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004697 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004698 .block_erasers =
4699 {
4700 {
4701 .eraseblocks = { {64 * 1024, 8} },
4702 .block_erase = spi_block_erase_d8,
4703 }, {
4704 .eraseblocks = { {512 * 1024, 1} },
4705 .block_erase = spi_block_erase_c7,
4706 }
4707 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004708 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004709 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004710 },
4711
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004712 {
4713 .vendor = "ST",
4714 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004715 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004716 .manufacture_id = ST_ID,
4717 .model_id = ST_M25P80,
4718 .total_size = 1024,
4719 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004720 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004721 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004722 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004723 .block_erasers =
4724 {
4725 {
4726 .eraseblocks = { {64 * 1024, 16} },
4727 .block_erase = spi_block_erase_d8,
4728 }, {
4729 .eraseblocks = { {1024 * 1024, 1} },
4730 .block_erase = spi_block_erase_c7,
4731 }
4732 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004733 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004734 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004735 },
4736
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004737 {
4738 .vendor = "ST",
4739 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004740 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004741 .manufacture_id = ST_ID,
4742 .model_id = ST_M25P16,
4743 .total_size = 2048,
4744 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004745 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004746 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004747 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004748 .block_erasers =
4749 {
4750 {
4751 .eraseblocks = { {64 * 1024, 32} },
4752 .block_erase = spi_block_erase_d8,
4753 }, {
4754 .eraseblocks = { {2 * 1024 * 1024, 1} },
4755 .block_erase = spi_block_erase_c7,
4756 }
4757 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004758 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004759 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004760 },
4761
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004762 {
4763 .vendor = "ST",
4764 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004765 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004766 .manufacture_id = ST_ID,
4767 .model_id = ST_M25P32,
4768 .total_size = 4096,
4769 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004770 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004771 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004772 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004773 .block_erasers =
4774 {
4775 {
4776 .eraseblocks = { {64 * 1024, 64} },
4777 .block_erase = spi_block_erase_d8,
4778 }, {
4779 .eraseblocks = { {4 * 1024 * 1024, 1} },
4780 .block_erase = spi_block_erase_c7,
4781 }
4782 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004783 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004784 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004785 },
4786
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004787 {
4788 .vendor = "ST",
4789 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004790 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004791 .manufacture_id = ST_ID,
4792 .model_id = ST_M25P64,
4793 .total_size = 8192,
4794 .page_size = 256,
4795 .tested = TEST_UNTESTED,
4796 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004797 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004798 .block_erasers =
4799 {
4800 {
4801 .eraseblocks = { {64 * 1024, 128} },
4802 .block_erase = spi_block_erase_d8,
4803 }, {
4804 .eraseblocks = { {8 * 1024 * 1024, 1} },
4805 .block_erase = spi_block_erase_c7,
4806 }
4807 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004808 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004809 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004810 },
4811
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004812 {
4813 .vendor = "ST",
4814 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004815 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004816 .manufacture_id = ST_ID,
4817 .model_id = ST_M25P128,
4818 .total_size = 16384,
4819 .page_size = 256,
4820 .tested = TEST_UNTESTED,
4821 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004822 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004823 .block_erasers =
4824 {
4825 {
4826 .eraseblocks = { {256 * 1024, 64} },
4827 .block_erase = spi_block_erase_d8,
4828 }, {
4829 .eraseblocks = { {16 * 1024 * 1024, 1} },
4830 .block_erase = spi_block_erase_c7,
4831 }
4832 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004833 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004834 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004835 },
4836
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004837 {
4838 .vendor = "ST",
4839 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004840 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004841 .manufacture_id = ST_ID,
4842 .model_id = ST_M29F002B,
4843 .total_size = 256,
4844 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004845 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004846 .tested = TEST_UNTESTED,
4847 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004848 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004849 .block_erasers =
4850 {
4851 {
4852 .eraseblocks = {
4853 {16 * 1024, 1},
4854 {8 * 1024, 2},
4855 {32 * 1024, 1},
4856 {64 * 1024, 3},
4857 },
4858 .block_erase = erase_sector_jedec,
4859 }, {
4860 .eraseblocks = { {256 * 1024, 1} },
4861 .block_erase = erase_chip_block_jedec,
4862 }
4863 },
Sean Nelson35727f72010-01-28 23:55:12 +00004864 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004865 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004866 },
4867
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004868 {
4869 .vendor = "ST",
4870 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004871 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004872 .manufacture_id = ST_ID,
4873 .model_id = ST_M29F002T,
4874 .total_size = 256,
4875 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004876 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
4877 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004878 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004879 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004880 .block_erasers =
4881 {
4882 {
4883 .eraseblocks = {
4884 {64 * 1024, 3},
4885 {32 * 1024, 1},
4886 {8 * 1024, 2},
4887 {16 * 1024, 1},
4888 },
4889 .block_erase = erase_sector_jedec,
4890 }, {
4891 .eraseblocks = { {256 * 1024, 1} },
4892 .block_erase = erase_chip_block_jedec,
4893 }
4894 },
Sean Nelson35727f72010-01-28 23:55:12 +00004895 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004896 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004897 },
4898
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004899 {
4900 .vendor = "ST",
4901 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004902 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004903 .manufacture_id = ST_ID,
4904 .model_id = ST_M29F040B,
4905 .total_size = 512,
4906 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004907 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4908 .tested = TEST_UNTESTED,
4909 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004910 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004911 .block_erasers =
4912 {
4913 {
4914 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004915 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004916 }, {
4917 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004918 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004919 }
4920 },
Sean Nelson35727f72010-01-28 23:55:12 +00004921 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004922 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004923 },
4924
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004925 {
Sean Nelson35727f72010-01-28 23:55:12 +00004926 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004927 .vendor = "ST",
4928 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004929 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004930 .manufacture_id = ST_ID,
4931 .model_id = ST_M29F400BT,
4932 .total_size = 512,
4933 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004934 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004935 .tested = TEST_UNTESTED,
4936 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004937 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004938 .block_erasers =
4939 {
4940 {
4941 .eraseblocks = {
4942 {64 * 1024, 7},
4943 {32 * 1024, 1},
4944 {8 * 1024, 2},
4945 {16 * 1024, 1},
4946 },
4947 .block_erase = block_erase_m29f400bt,
4948 }, {
4949 .eraseblocks = { {512 * 1024, 1} },
4950 .block_erase = block_erase_chip_m29f400bt,
4951 }
4952 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004953 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004954 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004955 },
4956
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004957 {
4958 .vendor = "ST",
4959 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004960 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004961 .manufacture_id = ST_ID,
4962 .model_id = ST_M29W010B,
4963 .total_size = 128,
4964 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004965 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004966 .tested = TEST_UNTESTED,
4967 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004968 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004969 .block_erasers =
4970 {
4971 {
4972 .eraseblocks = { {16 * 1024, 8}, },
4973 .block_erase = erase_sector_jedec,
4974 }, {
4975 .eraseblocks = { {128 * 1024, 1} },
4976 .block_erase = erase_chip_block_jedec,
4977 }
4978 },
Sean Nelson35727f72010-01-28 23:55:12 +00004979 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004980 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004981 },
4982
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004983 {
4984 .vendor = "ST",
4985 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004986 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004987 .manufacture_id = ST_ID,
4988 .model_id = ST_M29W040B,
4989 .total_size = 512,
4990 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004991 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004992 .tested = TEST_UNTESTED,
4993 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004994 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004995 .block_erasers =
4996 {
4997 {
4998 .eraseblocks = { {64 * 1024, 8}, },
4999 .block_erase = erase_sector_jedec,
5000 }, {
5001 .eraseblocks = { {512 * 1024, 1} },
5002 .block_erase = erase_chip_block_jedec,
5003 }
5004 },
Sean Nelson35727f72010-01-28 23:55:12 +00005005 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005006 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005007 },
5008
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005009 {
5010 .vendor = "ST",
5011 .name = "M29W512B",
5012 .bustype = CHIP_BUSTYPE_PARALLEL,
5013 .manufacture_id = ST_ID,
5014 .model_id = ST_M29W512B,
5015 .total_size = 64,
5016 .page_size = 64 * 1024,
5017 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5018 .tested = TEST_OK_PREW,
5019 .probe = probe_jedec,
5020 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005021 .block_erasers =
5022 {
5023 {
5024 .eraseblocks = { {64 * 1024, 1} },
5025 .block_erase = erase_chip_block_jedec,
5026 }
5027 },
5028 .write = write_jedec_1,
5029 .read = read_memmapped,
5030 },
5031
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005032 {
5033 .vendor = "ST",
5034 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00005035 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005036 .manufacture_id = ST_ID,
5037 .model_id = ST_M50FLW040A,
5038 .total_size = 512,
5039 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005040 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005041 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005042 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005043 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005044 .block_erasers =
5045 {
5046 {
Sean Nelson329bde72010-01-19 16:39:19 +00005047 .eraseblocks = {
5048 {4 * 1024, 16}, /* sector */
5049 {64 * 1024, 5}, /* block */
5050 {4 * 1024, 16}, /* sector */
5051 {4 * 1024, 16}, /* sector */
5052 },
5053 .block_erase = NULL,
5054 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005055 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005056 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005057 }, {
5058 .eraseblocks = { {512 * 1024, 1} },
5059 .block_erase = erase_chip_stm50flw0x0x,
5060 }
5061 },
Sean Nelson28accc22010-03-19 18:47:06 +00005062 .unlock = unlock_stm50flw0x0x,
5063 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005064 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005065 },
5066
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005067 {
5068 .vendor = "ST",
5069 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005070 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005071 .manufacture_id = ST_ID,
5072 .model_id = ST_M50FLW040B,
5073 .total_size = 512,
5074 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005075 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005076 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005077 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005078 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005079 .block_erasers =
5080 {
5081 {
Sean Nelson329bde72010-01-19 16:39:19 +00005082 .eraseblocks = {
5083 {4 * 1024, 16}, /* sector */
5084 {4 * 1024, 16}, /* sector */
5085 {64 * 1024, 5}, /* block */
5086 {4 * 1024, 16}, /* sector */
5087 },
5088 .block_erase = NULL,
5089 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005090 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005091 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005092 }, {
5093 .eraseblocks = { {512 * 1024, 1} },
5094 .block_erase = erase_chip_stm50flw0x0x,
5095 }
5096 },
Sean Nelson28accc22010-03-19 18:47:06 +00005097 .unlock = unlock_stm50flw0x0x,
5098 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005099 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005100 },
5101
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005102 {
5103 .vendor = "ST",
5104 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005105 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005106 .manufacture_id = ST_ID,
5107 .model_id = ST_M50FLW080A,
5108 .total_size = 1024,
5109 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005110 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00005111 .tested = TEST_UNTESTED,
5112 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005113 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005114 .block_erasers =
5115 {
5116 {
Sean Nelson329bde72010-01-19 16:39:19 +00005117 .eraseblocks = {
5118 {4 * 1024, 16}, /* sector */
5119 {64 * 1024, 13}, /* block */
5120 {4 * 1024, 16}, /* sector */
5121 {4 * 1024, 16}, /* sector */
5122 },
5123 .block_erase = NULL,
5124 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005125 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005126 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005127 }, {
5128 .eraseblocks = { {1024 * 1024, 1} },
5129 .block_erase = erase_chip_stm50flw0x0x,
5130 }
5131 },
Sean Nelson28accc22010-03-19 18:47:06 +00005132 .unlock = unlock_stm50flw0x0x,
5133 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005134 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005135 },
5136
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005137 {
5138 .vendor = "ST",
5139 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005140 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005141 .manufacture_id = ST_ID,
5142 .model_id = ST_M50FLW080B,
5143 .total_size = 1024,
5144 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005145 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005146 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005147 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005148 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005149 .block_erasers =
5150 {
5151 {
Sean Nelson329bde72010-01-19 16:39:19 +00005152 .eraseblocks = {
5153 {4 * 1024, 16}, /* sector */
5154 {4 * 1024, 16}, /* sector */
5155 {64 * 1024, 13}, /* block */
5156 {4 * 1024, 16}, /* sector */
5157 },
5158 .block_erase = NULL,
5159 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005160 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005161 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005162 }, {
5163 .eraseblocks = { {1024 * 1024, 1} },
5164 .block_erase = erase_chip_stm50flw0x0x,
5165 }
5166 },
Sean Nelson28accc22010-03-19 18:47:06 +00005167 .unlock = unlock_stm50flw0x0x,
5168 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005169 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005170 },
5171
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005172 {
5173 .vendor = "ST",
5174 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005175 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005176 .manufacture_id = ST_ID,
5177 .model_id = ST_M50FW002,
5178 .total_size = 256,
5179 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005180 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005181 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005182 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005183 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005184 .block_erasers =
5185 {
5186 {
5187 .eraseblocks = {
5188 {64 * 1024, 3},
5189 {32 * 1024, 1},
5190 {8 * 1024, 2},
5191 {16 * 1024, 1},
5192 },
Sean Nelson28accc22010-03-19 18:47:06 +00005193 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005194 }, {
5195 .eraseblocks = { {256 * 1024, 1} },
5196 .block_erase = erase_chip_stm50flw0x0x,
5197 }
5198 },
Sean Nelson28accc22010-03-19 18:47:06 +00005199 .unlock = unlock_stm50flw0x0x,
5200 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005201 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005202 },
5203
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005204 {
5205 .vendor = "ST",
5206 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005207 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005208 .manufacture_id = ST_ID,
5209 .model_id = ST_M50FW016,
5210 .total_size = 2048,
5211 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005212 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005213 .tested = TEST_UNTESTED,
5214 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005215 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005216 .block_erasers =
5217 {
5218 {
5219 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005220 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005221 }, {
5222 .eraseblocks = { {2 * 1024 * 1024, 1} },
5223 .block_erase = erase_chip_stm50flw0x0x,
5224 }
5225 },
Sean Nelson28accc22010-03-19 18:47:06 +00005226 .unlock = unlock_stm50flw0x0x,
5227 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005228 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005229 },
5230
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005231 {
5232 .vendor = "ST",
5233 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005234 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005235 .manufacture_id = ST_ID,
5236 .model_id = ST_M50FW040,
5237 .total_size = 512,
5238 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005239 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005240 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005241 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005242 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005243 .block_erasers =
5244 {
5245 {
5246 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005247 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005248 }, {
5249 .eraseblocks = { {512 * 1024, 1} },
5250 .block_erase = erase_chip_stm50flw0x0x,
5251 }
5252 },
Sean Nelson28accc22010-03-19 18:47:06 +00005253 .unlock = unlock_stm50flw0x0x,
5254 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005255 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005256 },
5257
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005258 {
5259 .vendor = "ST",
5260 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005261 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005262 .manufacture_id = ST_ID,
5263 .model_id = ST_M50FW080,
5264 .total_size = 1024,
5265 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005266 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005267 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005268 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005269 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005270 .block_erasers =
5271 {
5272 {
5273 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005274 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005275 }, {
5276 .eraseblocks = { {1024 * 1024, 1} },
5277 .block_erase = erase_chip_stm50flw0x0x,
5278 }
5279 },
Sean Nelson28accc22010-03-19 18:47:06 +00005280 .unlock = unlock_stm50flw0x0x,
5281 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005282 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005283 },
5284
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005285 {
5286 .vendor = "ST",
5287 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005288 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005289 .manufacture_id = ST_ID,
5290 .model_id = ST_M50LPW116,
5291 .total_size = 2048,
5292 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005293 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005294 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005295 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005296 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005297 .block_erasers =
5298 {
5299 {
5300 .eraseblocks = {
5301 {4 * 1024, 16},
5302 {64 * 1024, 30},
5303 {32 * 1024, 1},
5304 {8 * 1024, 2},
5305 {16 * 1024, 1},
5306 },
Sean Nelson28accc22010-03-19 18:47:06 +00005307 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005308 }, {
5309 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005310 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005311 }
5312 },
Sean Nelson28accc22010-03-19 18:47:06 +00005313 .unlock = unlock_stm50flw0x0x,
5314 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005315 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005316 },
5317
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005318 {
5319 .vendor = "SyncMOS",
5320 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005321 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005322 .manufacture_id = SYNCMOS_ID,
5323 .model_id = S29C31004T,
5324 .total_size = 512,
5325 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005326 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005327 .tested = TEST_UNTESTED,
5328 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005329 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005330 .block_erasers =
5331 {
5332 {
5333 .eraseblocks = { {1 * 1024, 512} },
5334 .block_erase = erase_sector_jedec,
5335 }, {
5336 .eraseblocks = { {512 * 1024, 1} },
5337 .block_erase = erase_chip_block_jedec,
5338 },
5339 },
Sean Nelson35727f72010-01-28 23:55:12 +00005340 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005341 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005342 },
5343
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005344 {
5345 .vendor = "SyncMOS",
5346 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005347 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005348 .manufacture_id = SYNCMOS_ID,
5349 .model_id = S29C51001T,
5350 .total_size = 128,
5351 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005352 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005353 .tested = TEST_UNTESTED,
5354 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005355 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005356 .block_erasers =
5357 {
5358 {
5359 .eraseblocks = { {512, 256} },
5360 .block_erase = erase_sector_jedec,
5361 }, {
5362 .eraseblocks = { {128 * 1024, 1} },
5363 .block_erase = erase_chip_block_jedec,
5364 },
5365 },
Sean Nelson35727f72010-01-28 23:55:12 +00005366 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005367 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005368 },
5369
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005370 {
5371 .vendor = "SyncMOS",
5372 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005373 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005374 .manufacture_id = SYNCMOS_ID,
5375 .model_id = S29C51002T,
5376 .total_size = 256,
5377 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005378 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005379 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005380 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005381 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005382 .block_erasers =
5383 {
5384 {
5385 .eraseblocks = { {512, 512} },
5386 .block_erase = erase_sector_jedec,
5387 }, {
5388 .eraseblocks = { {256 * 1024, 1} },
5389 .block_erase = erase_chip_block_jedec,
5390 },
5391 },
Sean Nelson35727f72010-01-28 23:55:12 +00005392 .write = write_jedec_1,
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 = "SyncMOS",
5398 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005399 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005400 .manufacture_id = SYNCMOS_ID,
5401 .model_id = S29C51004T,
5402 .total_size = 512,
5403 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005404 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005405 .tested = TEST_UNTESTED,
5406 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005407 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005408 .block_erasers =
5409 {
5410 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005411 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005412 .block_erase = erase_sector_jedec,
5413 }, {
5414 .eraseblocks = { {512 * 1024, 1} },
5415 .block_erase = erase_chip_block_jedec,
5416 },
5417 },
Sean Nelson35727f72010-01-28 23:55:12 +00005418 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005419 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005420 },
5421
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005422 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005423 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005424 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005425 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005426 .manufacture_id = TI_OLD_ID,
5427 .model_id = TI_TMS29F002RB,
5428 .total_size = 256,
5429 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005430 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005431 .tested = TEST_UNTESTED,
5432 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005433 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005434 .block_erasers =
5435 {
5436 {
5437 .eraseblocks = {
5438 {16 * 1024, 1},
5439 {8 * 1024, 2},
5440 {32 * 1024, 1},
5441 {64 * 1024, 3},
5442 },
5443 .block_erase = erase_sector_jedec,
5444 }, {
5445 .eraseblocks = { {256 * 1024, 1} },
5446 .block_erase = erase_chip_block_jedec,
5447 },
5448 },
Sean Nelson35727f72010-01-28 23:55:12 +00005449 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005450 .read = read_memmapped,
5451 },
5452
5453 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005454 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005455 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005456 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005457 .manufacture_id = TI_OLD_ID,
5458 .model_id = TI_TMS29F002RT,
5459 .total_size = 256,
5460 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005461 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005462 .tested = TEST_UNTESTED,
5463 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005464 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005465 .block_erasers =
5466 {
5467 {
5468 .eraseblocks = {
5469 {64 * 1024, 3},
5470 {32 * 1024, 1},
5471 {8 * 1024, 2},
5472 {16 * 1024, 1},
5473 },
5474 .block_erase = erase_sector_jedec,
5475 }, {
5476 .eraseblocks = { {256 * 1024, 1} },
5477 .block_erase = erase_chip_block_jedec,
5478 },
5479 },
Sean Nelson35727f72010-01-28 23:55:12 +00005480 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005481 .read = read_memmapped,
5482 },
5483
5484 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005485 .vendor = "Winbond",
5486 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005487 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005488 .manufacture_id = WINBOND_NEX_ID,
5489 .model_id = W_25X10,
5490 .total_size = 128,
5491 .page_size = 256,
5492 .tested = TEST_UNTESTED,
5493 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005494 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005495 .block_erasers =
5496 {
5497 {
5498 .eraseblocks = { {4 * 1024, 32} },
5499 .block_erase = spi_block_erase_20,
5500 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005501 .eraseblocks = { {64 * 1024, 2} },
5502 .block_erase = spi_block_erase_d8,
5503 }, {
5504 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005505 .block_erase = spi_block_erase_c7,
5506 }
5507 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005508 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005509 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005510 },
5511
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005512 {
5513 .vendor = "Winbond",
5514 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005515 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005516 .manufacture_id = WINBOND_NEX_ID,
5517 .model_id = W_25X20,
5518 .total_size = 256,
5519 .page_size = 256,
5520 .tested = TEST_UNTESTED,
5521 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005522 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005523 .block_erasers =
5524 {
5525 {
5526 .eraseblocks = { {4 * 1024, 64} },
5527 .block_erase = spi_block_erase_20,
5528 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005529 .eraseblocks = { {64 * 1024, 4} },
5530 .block_erase = spi_block_erase_d8,
5531 }, {
5532 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005533 .block_erase = spi_block_erase_c7,
5534 }
5535 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005536 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005537 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005538 },
5539
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005540 {
5541 .vendor = "Winbond",
5542 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005543 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005544 .manufacture_id = WINBOND_NEX_ID,
5545 .model_id = W_25X40,
5546 .total_size = 512,
5547 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005548 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005549 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005550 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005551 .block_erasers =
5552 {
5553 {
5554 .eraseblocks = { {4 * 1024, 128} },
5555 .block_erase = spi_block_erase_20,
5556 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005557 .eraseblocks = { {64 * 1024, 8} },
5558 .block_erase = spi_block_erase_d8,
5559 }, {
5560 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005561 .block_erase = spi_block_erase_c7,
5562 }
5563 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005564 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005565 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005566 },
5567
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005568 {
5569 .vendor = "Winbond",
5570 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005571 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005572 .manufacture_id = WINBOND_NEX_ID,
5573 .model_id = W_25X80,
5574 .total_size = 1024,
5575 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005576 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005577 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005578 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005579 .block_erasers =
5580 {
5581 {
5582 .eraseblocks = { {4 * 1024, 256} },
5583 .block_erase = spi_block_erase_20,
5584 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005585 .eraseblocks = { {64 * 1024, 16} },
5586 .block_erase = spi_block_erase_d8,
5587 }, {
5588 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005589 .block_erase = spi_block_erase_c7,
5590 }
5591 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005592 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005593 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005594 },
5595
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005596 {
5597 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005598 .name = "W25x16",
5599 .bustype = CHIP_BUSTYPE_SPI,
5600 .manufacture_id = WINBOND_NEX_ID,
5601 .model_id = W_25X16,
5602 .total_size = 2048,
5603 .page_size = 256,
5604 .tested = TEST_OK_PR,
5605 .probe = probe_spi_rdid,
5606 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005607 .block_erasers =
5608 {
5609 {
5610 .eraseblocks = { {4 * 1024, 512} },
5611 .block_erase = spi_block_erase_20,
5612 }, {
5613 .eraseblocks = { {32 * 1024, 64} },
5614 .block_erase = spi_block_erase_52,
5615 }, {
5616 .eraseblocks = { {64 * 1024, 32} },
5617 .block_erase = spi_block_erase_d8,
5618 }, {
5619 .eraseblocks = { {2 * 1024 * 1024, 1} },
5620 .block_erase = spi_block_erase_60,
5621 }, {
5622 .eraseblocks = { {2 * 1024 * 1024, 1} },
5623 .block_erase = spi_block_erase_c7,
5624 }
5625 },
Hector Martina721ae22009-07-11 19:39:11 +00005626 .write = spi_chip_write_256,
5627 .read = spi_chip_read,
5628 },
5629
5630 {
5631 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005632 .name = "W25x32",
5633 .bustype = CHIP_BUSTYPE_SPI,
5634 .manufacture_id = WINBOND_NEX_ID,
5635 .model_id = W_25X32,
5636 .total_size = 4096,
5637 .page_size = 256,
5638 .tested = TEST_OK_PROBE,
5639 .probe = probe_spi_rdid,
5640 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005641 .block_erasers =
5642 {
5643 {
5644 .eraseblocks = { {4 * 1024, 1024} },
5645 .block_erase = spi_block_erase_20,
5646 }, {
5647 .eraseblocks = { {32 * 1024, 128} },
5648 .block_erase = spi_block_erase_52,
5649 }, {
5650 .eraseblocks = { {64 * 1024, 64} },
5651 .block_erase = spi_block_erase_d8,
5652 }, {
5653 .eraseblocks = { {4 * 1024 * 1024, 1} },
5654 .block_erase = spi_block_erase_60,
5655 }, {
5656 .eraseblocks = { {4 * 1024 * 1024, 1} },
5657 .block_erase = spi_block_erase_c7,
5658 }
5659 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005660 .write = spi_chip_write_256,
5661 .read = spi_chip_read,
5662 },
5663
5664 {
5665 .vendor = "Winbond",
5666 .name = "W25x64",
5667 .bustype = CHIP_BUSTYPE_SPI,
5668 .manufacture_id = WINBOND_NEX_ID,
5669 .model_id = W_25X64,
5670 .total_size = 8192,
5671 .page_size = 256,
5672 .tested = TEST_UNTESTED,
5673 .probe = probe_spi_rdid,
5674 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005675 .block_erasers =
5676 {
5677 {
5678 .eraseblocks = { {4 * 1024, 2048} },
5679 .block_erase = spi_block_erase_20,
5680 }, {
5681 .eraseblocks = { {32 * 1024, 256} },
5682 .block_erase = spi_block_erase_52,
5683 }, {
5684 .eraseblocks = { {64 * 1024, 128} },
5685 .block_erase = spi_block_erase_d8,
5686 }, {
5687 .eraseblocks = { {8 * 1024 * 1024, 1} },
5688 .block_erase = spi_block_erase_60,
5689 }, {
5690 .eraseblocks = { {8 * 1024 * 1024, 1} },
5691 .block_erase = spi_block_erase_c7,
5692 }
5693 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005694 .write = spi_chip_write_256,
5695 .read = spi_chip_read,
5696 },
5697
5698 {
5699 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005700 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005701 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005702 .manufacture_id = WINBOND_ID,
5703 .model_id = W_29C011,
5704 .total_size = 128,
5705 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005706 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005707 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005708 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005709 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005710 .block_erasers =
5711 {
5712 {
5713 .eraseblocks = { {128 * 1024, 1} },
5714 .block_erase = erase_chip_block_jedec,
5715 }
5716 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005717 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005718 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005719 },
5720
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005721 {
5722 .vendor = "Winbond",
5723 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005724 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005725 .manufacture_id = WINBOND_ID,
5726 .model_id = W_29C020C,
5727 .total_size = 256,
5728 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005729 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005730 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005731 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005732 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005733 .block_erasers =
5734 {
5735 {
5736 .eraseblocks = { {256 * 1024, 1} },
5737 .block_erase = erase_chip_block_jedec,
5738 }
5739 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005740 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005741 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005742 },
5743
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005744 {
5745 .vendor = "Winbond",
5746 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005747 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005748 .manufacture_id = WINBOND_ID,
5749 .model_id = W_29C040P,
5750 .total_size = 512,
5751 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005752 .feature_bits = FEATURE_LONG_RESET,
5753 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005754 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005755 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005756 .block_erasers =
5757 {
5758 {
5759 .eraseblocks = { {512 * 1024, 1} },
5760 .block_erase = erase_chip_block_jedec,
5761 }
5762 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005763 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005764 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005765 },
5766
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005767 {
5768 .vendor = "Winbond",
5769 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005770 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005771 .manufacture_id = WINBOND_ID,
5772 .model_id = W_29C011,
5773 .total_size = 128,
5774 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005775 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005776 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005777 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005778 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005779 .block_erasers =
5780 {
5781 {
5782 .eraseblocks = { {128 * 1024, 1} },
5783 .block_erase = erase_chip_block_jedec,
5784 }
5785 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005786 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005787 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005788 },
5789
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005790 {
5791 .vendor = "Winbond",
5792 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005793 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005794 .manufacture_id = WINBOND_ID,
5795 .model_id = W_39V040A,
5796 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005797 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005798 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00005799 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005800 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005801 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005802 .block_erasers =
5803 {
5804 {
5805 .eraseblocks = { {64 * 1024, 8} },
5806 .block_erase = erase_sector_jedec,
5807 }, {
5808 .eraseblocks = { {512 * 1024, 1} },
5809 .block_erase = erase_chip_block_jedec,
5810 }
5811 },
Sean Nelson35727f72010-01-28 23:55:12 +00005812 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005813 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005814 },
5815
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005816 {
5817 .vendor = "Winbond",
5818 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005819 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005820 .manufacture_id = WINBOND_ID,
5821 .model_id = W_39V040B,
5822 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005823 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005824 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherd4e53592010-03-25 09:23:46 +00005825 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005826 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005827 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005828 .block_erasers =
5829 {
5830 {
5831 .eraseblocks = { {64 * 1024, 8} },
5832 .block_erase = erase_sector_jedec,
5833 }, {
5834 .eraseblocks = { {512 * 1024, 1} },
5835 .block_erase = erase_chip_block_jedec,
5836 }
5837 },
Sean Nelson35727f72010-01-28 23:55:12 +00005838 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005839 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005840 },
5841
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005842 {
5843 .vendor = "Winbond",
5844 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005845 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005846 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005847 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005848 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005849 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005850 .feature_bits = FEATURE_EITHER_RESET,
5851 .tested = TEST_UNTESTED,
5852 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005853 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005854 .block_erasers =
5855 {
5856 {
5857 .eraseblocks = { {64 * 1024, 8} },
5858 .block_erase = erase_sector_jedec,
5859 }, {
5860 .eraseblocks = { {512 * 1024, 1} },
5861 .block_erase = erase_chip_block_jedec,
5862 }
5863 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005864 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00005865 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005866 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005867 },
5868
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005869 {
5870 .vendor = "Winbond",
5871 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005872 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005873 .manufacture_id = WINBOND_ID,
5874 .model_id = W_39V040FA,
5875 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005876 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005877 .feature_bits = FEATURE_EITHER_RESET,
5878 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005879 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005880 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005881 .block_erasers =
5882 {
5883 {
5884 .eraseblocks = { {4 * 1024, 128} },
5885 .block_erase = erase_block_jedec,
5886 }, {
5887 .eraseblocks = { {64 * 1024, 8} },
5888 .block_erase = erase_sector_jedec,
5889 }, {
5890 .eraseblocks = { {512 * 1024, 1} },
5891 .block_erase = erase_chip_block_jedec,
5892 }
5893 },
Sean Nelson35727f72010-01-28 23:55:12 +00005894 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005895 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005896 },
5897
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005898 {
5899 .vendor = "Winbond",
5900 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005901 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005902 .manufacture_id = WINBOND_ID,
5903 .model_id = W_39V080A,
5904 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005905 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005906 .feature_bits = FEATURE_EITHER_RESET,
5907 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005908 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005909 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005910 .block_erasers =
5911 {
5912 {
5913 .eraseblocks = { {64 * 1024, 16} },
5914 .block_erase = erase_sector_jedec,
5915 }, {
5916 .eraseblocks = { {1024 * 1024, 1} },
5917 .block_erase = erase_chip_block_jedec,
5918 }
5919 },
Sean Nelson35727f72010-01-28 23:55:12 +00005920 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005921 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005922 },
5923
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005924 {
5925 .vendor = "Winbond",
5926 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00005927 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005928 .manufacture_id = WINBOND_ID,
5929 .model_id = W_49F002U,
5930 .total_size = 256,
5931 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005932 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005933 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005934 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005935 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005936 .block_erasers =
5937 {
5938 {
5939 .eraseblocks = {
5940 {128 * 1024, 1},
5941 {96 * 1024, 1},
5942 {8 * 1024, 2},
5943 {16 * 1024, 1},
5944 },
5945 .block_erase = erase_sector_jedec,
5946 }, {
5947 .eraseblocks = { {256 * 1024, 1} },
5948 .block_erase = erase_chip_block_jedec,
5949 }
5950 },
Sean Nelson35727f72010-01-28 23:55:12 +00005951 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005952 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005953 },
5954
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005955 {
5956 .vendor = "Winbond",
5957 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005958 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005959 .manufacture_id = WINBOND_ID,
5960 .model_id = W_49V002A,
5961 .total_size = 256,
5962 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005963 .feature_bits = FEATURE_EITHER_RESET,
5964 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005965 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005966 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005967 .block_erasers =
5968 {
5969 {
5970 .eraseblocks = {
5971 {64 * 1024, 3},
5972 {32 * 1024, 1},
5973 {8 * 1024, 2},
5974 {16 * 1024, 1},
5975 },
5976 .block_erase = erase_sector_jedec,
5977 }, {
5978 .eraseblocks = { {256 * 1024, 1} },
5979 .block_erase = erase_chip_block_jedec,
5980 }
5981 },
Sean Nelson35727f72010-01-28 23:55:12 +00005982 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005983 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005984 },
5985
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005986 {
5987 .vendor = "Winbond",
5988 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005989 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005990 .manufacture_id = WINBOND_ID,
5991 .model_id = W_49V002FA,
5992 .total_size = 256,
5993 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005994 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00005995 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005996 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005997 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005998 .block_erasers =
5999 {
6000 {
6001 .eraseblocks = {
6002 {64 * 1024, 3},
6003 {32 * 1024, 1},
6004 {8 * 1024, 2},
6005 {16 * 1024, 1},
6006 },
6007 .block_erase = erase_sector_jedec,
6008 }, {
6009 .eraseblocks = { {256 * 1024, 1} },
6010 .block_erase = erase_chip_block_jedec,
6011 }
6012 },
Sean Nelson35727f72010-01-28 23:55:12 +00006013 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006014 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006015 },
6016
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006017 {
6018 .vendor = "Winbond",
6019 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006020 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006021 .manufacture_id = WINBOND_ID,
6022 .model_id = W_39V080FA,
6023 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006024 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006025 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
6026 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006027 .probe = probe_jedec,
6028 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006029 .block_erasers =
6030 {
6031 {
6032 .eraseblocks = { {64 * 1024, 16}, },
6033 .block_erase = erase_sector_jedec,
6034 }, {
6035 .eraseblocks = { {1024 * 1024, 1} },
6036 .block_erase = erase_chip_block_jedec,
6037 }
6038 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006039 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006040 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006041 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006042 },
6043
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006044 {
6045 .vendor = "Winbond",
6046 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006047 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006048 .manufacture_id = WINBOND_ID,
6049 .model_id = W_39V080FA_DM,
6050 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006051 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006052 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006053 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006054 .probe = probe_jedec,
6055 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006056 .block_erasers =
6057 {
6058 {
6059 .eraseblocks = { {64 * 1024, 8}, },
6060 .block_erase = erase_sector_jedec,
6061 }, {
6062 .eraseblocks = { {512 * 1024, 1} },
6063 .block_erase = erase_chip_block_jedec,
6064 }
6065 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006066 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006067 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006068 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006069 },
6070
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006071 {
6072 .vendor = "Atmel",
6073 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006074 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006075 .manufacture_id = ATMEL_ID,
6076 .model_id = GENERIC_DEVICE_ID,
6077 .total_size = 0,
6078 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006079 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006080 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006081 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006082 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006083 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006084 },
6085
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006086 {
6087 .vendor = "EON",
6088 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006089 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006090 .manufacture_id = EON_ID_NOPREFIX,
6091 .model_id = GENERIC_DEVICE_ID,
6092 .total_size = 0,
6093 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006094 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006095 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006096 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006097 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006098 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006099 },
6100
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006101 {
6102 .vendor = "Macronix",
6103 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006104 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006105 .manufacture_id = MX_ID,
6106 .model_id = GENERIC_DEVICE_ID,
6107 .total_size = 0,
6108 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006109 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006110 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006111 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006112 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006113 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006114 },
6115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006116 {
6117 .vendor = "PMC",
6118 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006119 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006120 .manufacture_id = PMC_ID,
6121 .model_id = GENERIC_DEVICE_ID,
6122 .total_size = 0,
6123 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006124 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006125 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006126 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006127 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006128 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006129 },
6130
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006131 {
6132 .vendor = "SST",
6133 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006134 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006135 .manufacture_id = SST_ID,
6136 .model_id = GENERIC_DEVICE_ID,
6137 .total_size = 0,
6138 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006139 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006140 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006141 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006142 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006143 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006144 },
6145
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006146 {
6147 .vendor = "ST",
6148 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006149 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006150 .manufacture_id = ST_ID,
6151 .model_id = GENERIC_DEVICE_ID,
6152 .total_size = 0,
6153 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006154 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006155 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006156 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006157 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006158 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006159 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006160
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006161 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006162 .vendor = "Sanyo",
6163 .name = "unknown Sanyo SPI chip",
6164 .bustype = CHIP_BUSTYPE_SPI,
6165 .manufacture_id = SANYO_ID,
6166 .model_id = GENERIC_DEVICE_ID,
6167 .total_size = 0,
6168 .page_size = 256,
6169 .tested = TEST_BAD_PREW,
6170 .probe = probe_spi_rdid,
6171 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006172 .write = NULL,
6173 .read = NULL,
6174 },
6175
6176 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006177 .vendor = "Generic",
6178 .name = "unknown SPI chip (RDID)",
6179 .bustype = CHIP_BUSTYPE_SPI,
6180 .manufacture_id = GENERIC_MANUF_ID,
6181 .model_id = GENERIC_DEVICE_ID,
6182 .total_size = 0,
6183 .page_size = 256,
6184 .tested = TEST_BAD_PREW,
6185 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006186 .write = NULL,
6187 },
6188 {
6189 .vendor = "Generic",
6190 .name = "unknown SPI chip (REMS)",
6191 .bustype = CHIP_BUSTYPE_SPI,
6192 .manufacture_id = GENERIC_MANUF_ID,
6193 .model_id = GENERIC_DEVICE_ID,
6194 .total_size = 0,
6195 .page_size = 256,
6196 .tested = TEST_BAD_PREW,
6197 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006198 .write = NULL,
6199 },
6200
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006201 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006202};