blob: 38421707a39c0a7aedec8b627e39fceea99b0822 [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 Hailfinger29a1c662010-07-14 20:21:22 +0000338 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000339 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000340 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000341 },
342
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000343 {
344 .vendor = "Atmel",
345 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000346 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000347 .manufacture_id = ATMEL_ID,
348 .model_id = AT_25DF041A,
349 .total_size = 512,
350 .page_size = 256,
351 .tested = TEST_UNTESTED,
352 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000353 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000354 .block_erasers =
355 {
356 {
357 .eraseblocks = { {4 * 1024, 128} },
358 .block_erase = spi_block_erase_20,
359 }, {
360 .eraseblocks = { {32 * 1024, 16} },
361 .block_erase = spi_block_erase_52,
362 }, {
363 .eraseblocks = { {64 * 1024, 8} },
364 .block_erase = spi_block_erase_d8,
365 }, {
366 .eraseblocks = { {512 * 1024, 1} },
367 .block_erase = spi_block_erase_60,
368 }, {
369 .eraseblocks = { {512 * 1024, 1} },
370 .block_erase = spi_block_erase_c7,
371 }
372 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000373 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000374 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000375 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000376 },
377
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000378 {
379 .vendor = "Atmel",
380 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000381 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000382 .manufacture_id = ATMEL_ID,
383 .model_id = AT_25DF081,
384 .total_size = 1024,
385 .page_size = 256,
386 .tested = TEST_UNTESTED,
387 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000388 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000389 .block_erasers =
390 {
391 {
392 .eraseblocks = { {4 * 1024, 256} },
393 .block_erase = spi_block_erase_20,
394 }, {
395 .eraseblocks = { {32 * 1024, 32} },
396 .block_erase = spi_block_erase_52,
397 }, {
398 .eraseblocks = { {64 * 1024, 16} },
399 .block_erase = spi_block_erase_d8,
400 }, {
401 .eraseblocks = { {1024 * 1024, 1} },
402 .block_erase = spi_block_erase_60,
403 }, {
404 .eraseblocks = { {1024 * 1024, 1} },
405 .block_erase = spi_block_erase_c7,
406 }
407 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000408 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000409 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000410 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000411 },
412
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000413 {
414 .vendor = "Atmel",
415 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000416 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000417 .manufacture_id = ATMEL_ID,
418 .model_id = AT_25DF161,
419 .total_size = 2048,
420 .page_size = 256,
421 .tested = TEST_UNTESTED,
422 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000423 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000424 .block_erasers =
425 {
426 {
427 .eraseblocks = { {4 * 1024, 512} },
428 .block_erase = spi_block_erase_20,
429 }, {
430 .eraseblocks = { {32 * 1024, 64} },
431 .block_erase = spi_block_erase_52,
432 }, {
433 .eraseblocks = { {64 * 1024, 32} },
434 .block_erase = spi_block_erase_d8,
435 }, {
436 .eraseblocks = { {2 * 1024 * 1024, 1} },
437 .block_erase = spi_block_erase_60,
438 }, {
439 .eraseblocks = { {2 * 1024 * 1024, 1} },
440 .block_erase = spi_block_erase_c7,
441 }
442 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000443 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000444 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000445 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000446 },
447
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000448 {
449 .vendor = "Atmel",
450 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000451 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000452 .manufacture_id = ATMEL_ID,
453 .model_id = AT_25DF321,
454 .total_size = 4096,
455 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000456 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000457 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000458 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000459 .block_erasers =
460 {
461 {
462 .eraseblocks = { {4 * 1024, 1024} },
463 .block_erase = spi_block_erase_20,
464 }, {
465 .eraseblocks = { {32 * 1024, 128} },
466 .block_erase = spi_block_erase_52,
467 }, {
468 .eraseblocks = { {64 * 1024, 64} },
469 .block_erase = spi_block_erase_d8,
470 }, {
471 .eraseblocks = { {4 * 1024 * 1024, 1} },
472 .block_erase = spi_block_erase_60,
473 }, {
474 .eraseblocks = { {4 * 1024 * 1024, 1} },
475 .block_erase = spi_block_erase_c7,
476 }
477 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000478 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000479 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000480 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000481 },
482
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000483 {
484 .vendor = "Atmel",
485 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000486 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000487 .manufacture_id = ATMEL_ID,
488 .model_id = AT_25DF321A,
489 .total_size = 4096,
490 .page_size = 256,
491 .tested = TEST_UNTESTED,
492 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000493 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000494 .block_erasers =
495 {
496 {
497 .eraseblocks = { {4 * 1024, 1024} },
498 .block_erase = spi_block_erase_20,
499 }, {
500 .eraseblocks = { {32 * 1024, 128} },
501 .block_erase = spi_block_erase_52,
502 }, {
503 .eraseblocks = { {64 * 1024, 64} },
504 .block_erase = spi_block_erase_d8,
505 }, {
506 .eraseblocks = { {4 * 1024 * 1024, 1} },
507 .block_erase = spi_block_erase_60,
508 }, {
509 .eraseblocks = { {4 * 1024 * 1024, 1} },
510 .block_erase = spi_block_erase_c7,
511 }
512 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000513 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000514 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000515 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000516 },
517
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000518 {
519 .vendor = "Atmel",
520 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000521 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000522 .manufacture_id = ATMEL_ID,
523 .model_id = AT_25DF641,
524 .total_size = 8192,
525 .page_size = 256,
526 .tested = TEST_UNTESTED,
527 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000528 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000529 .block_erasers =
530 {
531 {
532 .eraseblocks = { {4 * 1024, 2048} },
533 .block_erase = spi_block_erase_20,
534 }, {
535 .eraseblocks = { {32 * 1024, 256} },
536 .block_erase = spi_block_erase_52,
537 }, {
538 .eraseblocks = { {64 * 1024, 128} },
539 .block_erase = spi_block_erase_d8,
540 }, {
541 .eraseblocks = { {8 * 1024 * 1024, 1} },
542 .block_erase = spi_block_erase_60,
543 }, {
544 .eraseblocks = { {8 * 1024 * 1024, 1} },
545 .block_erase = spi_block_erase_c7,
546 }
547 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000548 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000549 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000550 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000551 },
552
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000553 {
554 .vendor = "Atmel",
555 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000556 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000557 .manufacture_id = ATMEL_ID,
558 .model_id = AT_25F512B,
559 .total_size = 64,
560 .page_size = 256,
561 .tested = TEST_UNTESTED,
562 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000563 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000564 .block_erasers =
565 {
566 {
567 .eraseblocks = { {4 * 1024, 16} },
568 .block_erase = spi_block_erase_20,
569 }, {
570 .eraseblocks = { {32 * 1024, 2} },
571 .block_erase = spi_block_erase_52,
572 }, {
573 .eraseblocks = { {32 * 1024, 2} },
574 .block_erase = spi_block_erase_d8,
575 }, {
576 .eraseblocks = { {64 * 1024, 1} },
577 .block_erase = spi_block_erase_60,
578 }, {
579 .eraseblocks = { {64 * 1024, 1} },
580 .block_erase = spi_block_erase_c7,
581 }
582 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000583 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000584 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000585 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000586 },
587
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000588 {
589 .vendor = "Atmel",
590 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000591 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000592 .manufacture_id = ATMEL_ID,
593 .model_id = AT_25FS010,
594 .total_size = 128,
595 .page_size = 256,
596 .tested = TEST_UNTESTED,
597 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000598 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000599 .block_erasers =
600 {
601 {
602 .eraseblocks = { {4 * 1024, 32} },
603 .block_erase = spi_block_erase_20,
604 }, {
605 .eraseblocks = { {32 * 1024, 4} },
606 .block_erase = spi_block_erase_52,
607 }, {
608 .eraseblocks = { {32 * 1024, 4} },
609 .block_erase = spi_block_erase_d8,
610 }, {
611 .eraseblocks = { {128 * 1024, 1} },
612 .block_erase = spi_block_erase_60,
613 }, {
614 .eraseblocks = { {128 * 1024, 1} },
615 .block_erase = spi_block_erase_c7,
616 }
617 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000618 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000619 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000620 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000621 },
622
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000623 {
624 .vendor = "Atmel",
625 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000626 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000627 .manufacture_id = ATMEL_ID,
628 .model_id = AT_25FS040,
629 .total_size = 512,
630 .page_size = 256,
631 .tested = TEST_UNTESTED,
632 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000633 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000634 .block_erasers =
635 {
636 {
637 .eraseblocks = { {4 * 1024, 128} },
638 .block_erase = spi_block_erase_20,
639 }, {
640 .eraseblocks = { {64 * 1024, 8} },
641 .block_erase = spi_block_erase_52,
642 }, {
643 .eraseblocks = { {64 * 1024, 8} },
644 .block_erase = spi_block_erase_d8,
645 }, {
646 .eraseblocks = { {512 * 1024, 1} },
647 .block_erase = spi_block_erase_60,
648 }, {
649 .eraseblocks = { {512 * 1024, 1} },
650 .block_erase = spi_block_erase_c7,
651 }
652 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000653 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000654 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000655 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000656 },
657
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000658 {
659 .vendor = "Atmel",
660 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000661 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000662 .manufacture_id = ATMEL_ID,
663 .model_id = AT_26DF041,
664 .total_size = 512,
665 .page_size = 256,
666 .tested = TEST_UNTESTED,
667 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000668 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000669 .block_erasers =
670 {
671 {
672 .eraseblocks = { {4 * 1024, 128} },
673 .block_erase = spi_block_erase_20,
674 }
675 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000676 .write = NULL /* Incompatible Page write */,
677 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000678 },
679
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000680 {
681 .vendor = "Atmel",
682 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000683 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000684 .manufacture_id = ATMEL_ID,
685 .model_id = AT_26DF081A,
686 .total_size = 1024,
687 .page_size = 256,
688 .tested = TEST_UNTESTED,
689 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000690 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000691 .block_erasers =
692 {
693 {
694 .eraseblocks = { {4 * 1024, 256} },
695 .block_erase = spi_block_erase_20,
696 }, {
697 .eraseblocks = { {32 * 1024, 32} },
698 .block_erase = spi_block_erase_52,
699 }, {
700 .eraseblocks = { {64 * 1024, 16} },
701 .block_erase = spi_block_erase_d8,
702 }, {
703 .eraseblocks = { {1024 * 1024, 1} },
704 .block_erase = spi_block_erase_60,
705 }, {
706 .eraseblocks = { {1024 * 1024, 1} },
707 .block_erase = spi_block_erase_c7,
708 }
709 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000710 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000711 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000712 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000713 },
714
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000715 {
716 .vendor = "Atmel",
717 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000718 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000719 .manufacture_id = ATMEL_ID,
720 .model_id = AT_26DF161,
721 .total_size = 2048,
722 .page_size = 256,
723 .tested = TEST_UNTESTED,
724 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000725 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000726 .block_erasers =
727 {
728 {
729 .eraseblocks = { {4 * 1024, 512} },
730 .block_erase = spi_block_erase_20,
731 }, {
732 .eraseblocks = { {32 * 1024, 64} },
733 .block_erase = spi_block_erase_52,
734 }, {
735 .eraseblocks = { {64 * 1024, 32} },
736 .block_erase = spi_block_erase_d8,
737 }, {
738 .eraseblocks = { {2 * 1024 * 1024, 1} },
739 .block_erase = spi_block_erase_60,
740 }, {
741 .eraseblocks = { {2 * 1024 * 1024, 1} },
742 .block_erase = spi_block_erase_c7,
743 }
744 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000745 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000746 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000747 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000748 },
749
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000750 {
751 .vendor = "Atmel",
752 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000753 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000754 .manufacture_id = ATMEL_ID,
755 .model_id = AT_26DF161A,
756 .total_size = 2048,
757 .page_size = 256,
758 .tested = TEST_UNTESTED,
759 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000760 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000761 .block_erasers =
762 {
763 {
764 .eraseblocks = { {4 * 1024, 512} },
765 .block_erase = spi_block_erase_20,
766 }, {
767 .eraseblocks = { {32 * 1024, 64} },
768 .block_erase = spi_block_erase_52,
769 }, {
770 .eraseblocks = { {64 * 1024, 32} },
771 .block_erase = spi_block_erase_d8,
772 }, {
773 .eraseblocks = { {2 * 1024 * 1024, 1} },
774 .block_erase = spi_block_erase_60,
775 }, {
776 .eraseblocks = { {2 * 1024 * 1024, 1} },
777 .block_erase = spi_block_erase_c7,
778 }
779 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000780 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000781 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000782 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000783 },
784
785 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000786 /*{
787 .vendor = "Atmel",
788 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000789 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000790 .manufacture_id = ATMEL_ID,
791 .model_id = AT_26DF321,
792 .total_size = 4096,
793 .page_size = 256,
794 .tested = TEST_UNTESTED,
795 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000796 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +0000797 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000798 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000799 .read = spi_chip_read,
800 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000801
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000802 {
803 .vendor = "Atmel",
804 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000805 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000806 .manufacture_id = ATMEL_ID,
807 .model_id = AT_26F004,
808 .total_size = 512,
809 .page_size = 256,
810 .tested = TEST_UNTESTED,
811 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000812 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000813 .block_erasers =
814 {
815 {
816 .eraseblocks = { {4 * 1024, 128} },
817 .block_erase = spi_block_erase_20,
818 }, {
819 .eraseblocks = { {32 * 1024, 16} },
820 .block_erase = spi_block_erase_52,
821 }, {
822 .eraseblocks = { {64 * 1024, 8} },
823 .block_erase = spi_block_erase_d8,
824 }, {
825 .eraseblocks = { {512 * 1024, 1} },
826 .block_erase = spi_block_erase_60,
827 }, {
828 .eraseblocks = { {512 * 1024, 1} },
829 .block_erase = spi_block_erase_c7,
830 }
831 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000832 .write = NULL /* Incompatible Page write */,
833 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000834 },
835
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000836 {
837 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000838 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000839 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000840 .manufacture_id = ATMEL_ID,
841 .model_id = AT_29C512,
842 .total_size = 64,
843 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000844 .feature_bits = FEATURE_LONG_RESET,
845 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000846 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000847 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000848 .block_erasers =
849 {
850 {
851 .eraseblocks = { {64 * 1024, 1} },
852 .block_erase = erase_chip_block_jedec,
853 }
854 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000855 .write = write_jedec,
856 .read = read_memmapped,
857
858 },
859
860 {
861 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000862 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000863 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000864 .manufacture_id = ATMEL_ID,
865 .model_id = AT_29C010A,
866 .total_size = 128,
867 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000868 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +0000869 .tested = TEST_OK_PREW,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000870 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000871 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000872 .block_erasers =
873 {
874 {
875 .eraseblocks = { {128 * 1024, 1} },
876 .block_erase = erase_chip_block_jedec,
877 }
878 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000879 .write = write_jedec, /* FIXME */
880 .read = read_memmapped,
881 },
882
883 {
884 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000885 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000886 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000887 .manufacture_id = ATMEL_ID,
888 .model_id = AT_29C020,
889 .total_size = 256,
890 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000891 .feature_bits = FEATURE_LONG_RESET,
892 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000893 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000894 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000895 .block_erasers =
896 {
897 {
898 .eraseblocks = { {256 * 1024, 1} },
899 .block_erase = erase_chip_block_jedec,
900 }
901 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000902 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000903 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000904 },
905
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000906 {
907 .vendor = "Atmel",
908 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000909 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000910 .manufacture_id = ATMEL_ID,
911 .model_id = AT_29C040A,
912 .total_size = 512,
913 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000914 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000915 .tested = TEST_UNTESTED,
916 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000917 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000918 .block_erasers =
919 {
920 {
921 .eraseblocks = { {512 * 1024, 1} },
922 .block_erase = erase_chip_block_jedec,
923 }
924 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000925 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000926 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000927 },
928
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000929 {
930 .vendor = "Atmel",
931 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000932 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000933 .manufacture_id = ATMEL_ID,
934 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000935 .total_size = 16896 /* No power of two sizes */,
936 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000937 .tested = TEST_BAD_READ,
938 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000939 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000940 .write = NULL /* Incompatible Page write */,
941 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000942 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000943
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000944 {
945 .vendor = "Atmel",
946 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000947 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000948 .manufacture_id = ATMEL_ID,
949 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000950 .total_size = 128 /* Size can only be determined from status register */,
951 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000952 .tested = TEST_BAD_READ,
953 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000954 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000955 .write = NULL,
956 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000957 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000958
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000959 {
960 .vendor = "Atmel",
961 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000962 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000963 .manufacture_id = ATMEL_ID,
964 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000965 .total_size = 256 /* Size can only be determined from status register */,
966 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000967 .tested = TEST_BAD_READ,
968 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000969 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000970 .write = NULL,
971 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000972 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000973
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000974 {
975 .vendor = "Atmel",
976 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000977 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000978 .manufacture_id = ATMEL_ID,
979 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000980 .total_size = 512 /* Size can only be determined from status register */,
981 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000982 .tested = TEST_BAD_READ,
983 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000984 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000985 .write = NULL,
986 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000987 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000988
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000989 {
990 .vendor = "Atmel",
991 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000992 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000993 .manufacture_id = ATMEL_ID,
994 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000995 .total_size = 1024 /* Size can only be determined from status register */,
996 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000997 .tested = TEST_BAD_READ,
998 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000999 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001000 .write = NULL,
1001 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001002 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001003
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001004 {
1005 .vendor = "Atmel",
1006 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001007 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001008 .manufacture_id = ATMEL_ID,
1009 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001010 .total_size = 2048 /* Size can only be determined from status register */,
1011 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001012 .tested = TEST_BAD_READ,
1013 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001014 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001015 .write = NULL,
1016 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001017 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001018
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001019 {
1020 .vendor = "Atmel",
1021 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001022 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001023 .manufacture_id = ATMEL_ID,
1024 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001025 .total_size = 4224 /* No power of two sizes */,
1026 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001027 .tested = TEST_BAD_READ,
1028 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001029 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001030 .write = NULL,
1031 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001032 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001033
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001034 {
1035 .vendor = "Atmel",
1036 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001037 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001038 .manufacture_id = ATMEL_ID,
1039 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001040 .total_size = 4096 /* Size can only be determined from status register */,
1041 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001042 .tested = TEST_BAD_READ,
1043 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001044 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001045 .write = NULL,
1046 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001047 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001048
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001049 {
1050 .vendor = "Atmel",
1051 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001052 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001053 .manufacture_id = ATMEL_ID,
1054 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001055 .total_size = 8192 /* Size can only be determined from status register */,
1056 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001057 .tested = TEST_BAD_READ,
1058 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001059 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001060 .write = NULL,
1061 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001062 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001063
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001064 {
1065 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001066 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001067 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001068 .manufacture_id = ATMEL_ID,
1069 .model_id = AT_49BV512,
1070 .total_size = 64,
1071 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001072 .feature_bits = FEATURE_EITHER_RESET,
1073 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001074 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001075 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001076 .block_erasers =
1077 {
1078 {
1079 .eraseblocks = { {64 * 1024, 1} },
1080 .block_erase = erase_chip_block_jedec,
1081 }
1082 },
Sean Nelson35727f72010-01-28 23:55:12 +00001083 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001084 .read = read_memmapped,
1085 },
1086
1087 {
1088 .vendor = "Atmel",
Andrew Morgan1a5eaa12010-06-07 14:10:55 +00001089 .name = "AT49F020",
1090 .bustype = CHIP_BUSTYPE_PARALLEL,
1091 .manufacture_id = ATMEL_ID,
1092 .model_id = AT_49F020,
1093 .total_size = 256,
1094 .page_size = 256,
1095 .feature_bits = FEATURE_EITHER_RESET,
1096 .tested = TEST_OK_PREW,
1097 .probe = probe_jedec,
1098 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
1099 .block_erasers =
1100 {
1101 {
1102 .eraseblocks = { {256 * 1024, 1} },
1103 .block_erase = erase_chip_block_jedec,
1104 }
1105 },
1106 .write = write_jedec_1,
1107 .read = read_memmapped,
1108 },
1109
1110 {
1111 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001112 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001113 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001114 .manufacture_id = ATMEL_ID,
1115 .model_id = AT_49F002N,
1116 .total_size = 256,
1117 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001118 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001119 .tested = TEST_UNTESTED,
1120 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001121 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001122 .block_erasers =
1123 {
1124 {
1125 .eraseblocks = {
1126 {16 * 1024, 1},
1127 {8 * 1024, 2},
1128 {96 * 1024, 1},
1129 {128 * 1024, 1},
1130 },
1131 .block_erase = erase_sector_jedec,
1132 }, {
1133 .eraseblocks = { {256 * 1024, 1} },
1134 .block_erase = erase_chip_block_jedec,
1135 }
1136 },
Sean Nelson35727f72010-01-28 23:55:12 +00001137 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001138 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001139 },
1140
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001141 {
1142 .vendor = "Atmel",
1143 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001144 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001145 .manufacture_id = ATMEL_ID,
1146 .model_id = AT_49F002NT,
1147 .total_size = 256,
1148 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001149 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001150 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001151 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001152 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001153 .block_erasers =
1154 {
1155 {
1156 .eraseblocks = {
1157 {128 * 1024, 1},
1158 {96 * 1024, 1},
1159 {8 * 1024, 2},
1160 {16 * 1024, 1},
1161 },
1162 .block_erase = erase_sector_jedec,
1163 }, {
1164 .eraseblocks = { {256 * 1024, 1} },
1165 .block_erase = erase_chip_block_jedec,
1166 }
1167 },
Sean Nelson35727f72010-01-28 23:55:12 +00001168 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001169 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001170 },
1171
Sean Nelson54596372010-01-09 05:30:14 +00001172 /* The next two chip definitions have top/bottom boot blocks, but has no
Uwe Hermann4e3d0b32010-03-25 23:18:41 +00001173 device differentiation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001174 {
1175 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001176 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001177 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001178 .manufacture_id = AMIC_ID,
1179 .model_id = AMIC_A25L40P,
1180 .total_size = 512,
1181 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001182 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001183 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001184 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001185 .block_erasers =
1186 {
1187 {
1188 .eraseblocks = {
1189 {64 * 1024, 7},
1190 {32 * 1024, 1},
1191 {16 * 1024, 1},
1192 {8 * 1024, 1},
1193 {4 * 1024, 2},
1194 },
1195 .block_erase = spi_block_erase_d8,
1196 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001197 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001198 .block_erase = spi_block_erase_c7,
1199 }
1200 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001201 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001202 .write = spi_chip_write_256,
1203 .read = spi_chip_read,
1204 },
1205
1206 {
1207 .vendor = "AMIC",
1208 .name = "A25L40PU",
1209 .bustype = CHIP_BUSTYPE_SPI,
1210 .manufacture_id = AMIC_ID,
1211 .model_id = AMIC_A25L40P,
1212 .total_size = 512,
1213 .page_size = 256,
1214 .tested = TEST_OK_PRW,
1215 .probe = probe_spi_rdid4,
1216 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001217 .block_erasers =
1218 {
1219 {
1220 .eraseblocks = {
1221 {4 * 1024, 2},
1222 {8 * 1024, 1},
1223 {16 * 1024, 1},
1224 {32 * 1024, 1},
1225 {64 * 1024, 7},
1226 },
1227 .block_erase = spi_block_erase_d8,
1228 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001229 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001230 .block_erase = spi_block_erase_c7,
1231 }
1232 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001233 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001234 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001235 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001236 },
1237
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001238 {
1239 .vendor = "AMIC",
Daniel Lenski550f5c82010-07-11 21:33:31 +00001240 .name = "A25L80P",
1241 .bustype = CHIP_BUSTYPE_SPI,
1242 .manufacture_id = AMIC_ID,
1243 .model_id = AMIC_A25L80P,
1244 .total_size = 1024,
1245 .page_size = 256,
1246 .tested = TEST_OK_PREW,
1247 .probe = probe_spi_rdid4,
1248 .probe_timing = TIMING_ZERO,
1249 .block_erasers =
1250 {
1251 {
1252 .eraseblocks = {
1253 {4 * 1024, 2},
1254 {8 * 1024, 1},
1255 {16 * 1024, 1},
1256 {32 * 1024, 1},
1257 {64 * 1024, 15},
1258 },
1259 .block_erase = spi_block_erase_d8,
1260 }, {
1261 .eraseblocks = { {1024 * 1024, 1} },
1262 .block_erase = spi_block_erase_c7,
1263 }
1264 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001265 .unlock = spi_disable_blockprotect,
Daniel Lenski550f5c82010-07-11 21:33:31 +00001266 .write = spi_chip_write_256,
1267 .read = spi_chip_read,
1268 },
1269
1270 {
1271 .vendor = "AMIC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001272 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001273 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001274 .manufacture_id = AMIC_ID_NOPREFIX,
1275 .model_id = AMIC_A29002B,
1276 .total_size = 256,
1277 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001278 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001279 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001280 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001281 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001282 .block_erasers =
1283 {
1284 {
1285 .eraseblocks = {
1286 {16 * 1024, 1},
1287 {8 * 1024, 2},
1288 {32 * 1024, 1},
1289 {64 * 1024, 3},
1290 },
Sean Nelson35727f72010-01-28 23:55:12 +00001291 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001292 }, {
1293 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001294 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001295 },
1296 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001297 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001298 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001299 },
1300
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001301 {
1302 .vendor = "AMIC",
1303 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001304 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001305 .manufacture_id = AMIC_ID_NOPREFIX,
1306 .model_id = AMIC_A29002T,
1307 .total_size = 256,
1308 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001309 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001310 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00001311 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001312 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001313 .block_erasers =
1314 {
1315 {
1316 .eraseblocks = {
1317 {64 * 1024, 3},
1318 {32 * 1024, 1},
1319 {8 * 1024, 2},
1320 {16 * 1024, 1},
1321 },
Sean Nelson35727f72010-01-28 23:55:12 +00001322 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001323 }, {
1324 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001325 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001326 },
1327 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001328 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001329 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001330 },
1331
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001332 {
1333 .vendor = "AMIC",
1334 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001335 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001336 .manufacture_id = AMIC_ID_NOPREFIX,
1337 .model_id = AMIC_A29040B,
1338 .total_size = 512,
1339 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001340 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1341 .tested = TEST_UNTESTED,
1342 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001343 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001344 .block_erasers =
1345 {
1346 {
1347 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001348 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001349 }, {
1350 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001351 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001352 },
1353 },
Sean Nelson35727f72010-01-28 23:55:12 +00001354 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001355 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001356 },
1357
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001358 {
1359 .vendor = "AMIC",
1360 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001361 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001362 .manufacture_id = AMIC_ID_NOPREFIX,
1363 .model_id = AMIC_A49LF040A,
1364 .total_size = 512,
1365 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001366 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00001367 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001368 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001369 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001370 .block_erasers =
1371 {
1372 {
1373 .eraseblocks = { {64 * 1024, 8} },
1374 .block_erase = erase_block_jedec,
1375 }, {
1376 .eraseblocks = { {512 * 1024, 1} },
1377 .block_erase = erase_chip_block_jedec,
1378 }
1379 },
Sean Nelson36172342010-02-27 18:01:15 +00001380 .unlock = unlock_49fl00x,
1381 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001382 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001383 },
1384
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001385 {
1386 .vendor = "EMST",
1387 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001388 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001389 .manufacture_id = EMST_ID,
1390 .model_id = EMST_F49B002UA,
1391 .total_size = 256,
1392 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001393 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001394 .tested = TEST_UNTESTED,
1395 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001396 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001397 .block_erasers =
1398 {
1399 {
1400 .eraseblocks = {
1401 {128 * 1024, 1},
1402 {96 * 1024, 1},
1403 {8 * 1024, 2},
1404 {16 * 1024, 1},
1405 },
1406 .block_erase = erase_sector_jedec,
1407 }, {
1408 .eraseblocks = { {256 * 1024, 1} },
1409 .block_erase = erase_chip_block_jedec,
1410 }
1411 },
Sean Nelson35727f72010-01-28 23:55:12 +00001412 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001413 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001414 },
1415
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001416 {
Michael Karcher80a59ea2010-06-19 22:06:35 +00001417 .vendor = "EMST",
1418 .name = "F25L008A",
1419 .bustype = CHIP_BUSTYPE_SPI,
1420 .manufacture_id = EMST_ID,
1421 .model_id = EMST_F25L008A,
1422 .total_size = 1024,
1423 .page_size = 256,
1424 .tested = TEST_UNTESTED,
1425 .probe = probe_spi_rdid,
1426 .probe_timing = TIMING_ZERO,
1427 .block_erasers =
1428 {
1429 {
1430 .eraseblocks = { {4 * 1024, 256} },
1431 .block_erase = spi_block_erase_20,
1432 }, {
1433 .eraseblocks = { {64 * 1024, 16} },
1434 .block_erase = spi_block_erase_d8,
1435 }, {
1436 .eraseblocks = { {1024 * 1024, 1} },
1437 .block_erase = spi_block_erase_60,
1438 }, {
1439 .eraseblocks = { {1024 * 1024, 1} },
1440 .block_erase = spi_block_erase_c7,
1441 }
1442 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001443 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger9a795d82010-07-14 16:19:05 +00001444 .write = spi_chip_write_1,
Michael Karcher4497e862010-07-10 19:34:15 +00001445 .read = spi_chip_read,
Michael Karcher80a59ea2010-06-19 22:06:35 +00001446 },
1447
1448 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001449 .vendor = "Eon",
1450 .name = "EN25B05",
1451 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001452 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001453 .model_id = EN_25B05,
1454 .total_size = 64,
1455 .page_size = 256,
1456 .tested = TEST_UNTESTED,
1457 .probe = probe_spi_rdid,
1458 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001459 .block_erasers =
1460 {
1461 {
1462 .eraseblocks = {
1463 {4 * 1024, 2},
1464 {8 * 1024, 1},
1465 {16 * 1024, 1},
1466 {32 * 1024, 1},
1467 },
1468 .block_erase = spi_block_erase_d8,
1469 }, {
1470 .eraseblocks = { {64 * 1024, 1} },
1471 .block_erase = spi_block_erase_c7,
1472 }
1473 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001474 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001475 .write = spi_chip_write_256,
1476 .read = spi_chip_read,
1477 },
1478
1479 {
1480 .vendor = "Eon",
1481 .name = "EN25B05T",
1482 .bustype = CHIP_BUSTYPE_SPI,
1483 .manufacture_id = EON_ID_NOPREFIX,
1484 .model_id = EN_25B05,
1485 .total_size = 64,
1486 .page_size = 256,
1487 .tested = TEST_UNTESTED,
1488 .probe = probe_spi_rdid,
1489 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001490 .block_erasers =
1491 {
1492 {
1493 .eraseblocks = {
1494 {32 * 1024, 1},
1495 {16 * 1024, 1},
1496 {8 * 1024, 1},
1497 {4 * 1024, 2},
1498 },
1499 .block_erase = spi_block_erase_d8,
1500 }, {
1501 .eraseblocks = { {64 * 1024, 1} },
1502 .block_erase = spi_block_erase_c7,
1503 }
1504 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001505 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001506 .write = spi_chip_write_256,
1507 .read = spi_chip_read,
1508 },
1509
1510 {
1511 .vendor = "Eon",
1512 .name = "EN25B10",
1513 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001514 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001515 .model_id = EN_25B10,
1516 .total_size = 128,
1517 .page_size = 256,
1518 .tested = TEST_UNTESTED,
1519 .probe = probe_spi_rdid,
1520 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001521 .block_erasers =
1522 {
1523 {
1524 .eraseblocks = {
1525 {4 * 1024, 2},
1526 {8 * 1024, 1},
1527 {16 * 1024, 1},
1528 {32 * 1024, 3},
1529 },
1530 .block_erase = spi_block_erase_d8,
1531 }, {
1532 .eraseblocks = { {128 * 1024, 1} },
1533 .block_erase = spi_block_erase_c7,
1534 }
1535 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001536 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001537 .write = spi_chip_write_256,
1538 .read = spi_chip_read,
1539 },
1540
1541 {
1542 .vendor = "Eon",
1543 .name = "EN25B10T",
1544 .bustype = CHIP_BUSTYPE_SPI,
1545 .manufacture_id = EON_ID_NOPREFIX,
1546 .model_id = EN_25B10,
1547 .total_size = 128,
1548 .page_size = 256,
1549 .tested = TEST_UNTESTED,
1550 .probe = probe_spi_rdid,
1551 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001552 .block_erasers =
1553 {
1554 {
1555 .eraseblocks = {
1556 {32 * 1024, 3},
1557 {16 * 1024, 1},
1558 {8 * 1024, 1},
1559 {4 * 1024, 2},
1560 },
1561 .block_erase = spi_block_erase_d8,
1562 }, {
1563 .eraseblocks = { {128 * 1024, 1} },
1564 .block_erase = spi_block_erase_c7,
1565 }
1566 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001567 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001568 .write = spi_chip_write_256,
1569 .read = spi_chip_read,
1570 },
1571
1572 {
1573 .vendor = "Eon",
1574 .name = "EN25B20",
1575 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001576 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001577 .model_id = EN_25B20,
1578 .total_size = 256,
1579 .page_size = 256,
1580 .tested = TEST_UNTESTED,
1581 .probe = probe_spi_rdid,
1582 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001583 .block_erasers =
1584 {
1585 {
1586 .eraseblocks = {
1587 {4 * 1024, 2},
1588 {8 * 1024, 1},
1589 {16 * 1024, 1},
1590 {32 * 1024, 1},
1591 {64 * 1024, 3}
1592 },
1593 .block_erase = spi_block_erase_d8,
1594 }, {
1595 .eraseblocks = { {256 * 1024, 1} },
1596 .block_erase = spi_block_erase_c7,
1597 }
1598 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001599 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001600 .write = spi_chip_write_256,
1601 .read = spi_chip_read,
1602 },
1603
1604 {
1605 .vendor = "Eon",
1606 .name = "EN25B20T",
1607 .bustype = CHIP_BUSTYPE_SPI,
1608 .manufacture_id = EON_ID_NOPREFIX,
1609 .model_id = EN_25B20,
1610 .total_size = 256,
1611 .page_size = 256,
1612 .tested = TEST_UNTESTED,
1613 .probe = probe_spi_rdid,
1614 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001615 .block_erasers =
1616 {
1617 {
1618 .eraseblocks = {
1619 {64 * 1024, 3},
1620 {32 * 1024, 1},
1621 {16 * 1024, 1},
1622 {8 * 1024, 1},
1623 {4 * 1024, 2},
1624 },
1625 .block_erase = spi_block_erase_d8,
1626 }, {
1627 .eraseblocks = { {256 * 1024, 1} },
1628 .block_erase = spi_block_erase_c7,
1629 }
1630 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001631 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001632 .write = spi_chip_write_256,
1633 .read = spi_chip_read,
1634 },
1635
1636 {
1637 .vendor = "Eon",
1638 .name = "EN25B40",
1639 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001640 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001641 .model_id = EN_25B40,
1642 .total_size = 512,
1643 .page_size = 256,
1644 .tested = TEST_UNTESTED,
1645 .probe = probe_spi_rdid,
1646 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001647 .block_erasers =
1648 {
1649 {
1650 .eraseblocks = {
1651 {4 * 1024, 2},
1652 {8 * 1024, 1},
1653 {16 * 1024, 1},
1654 {32 * 1024, 1},
1655 {64 * 1024, 7}
1656 },
1657 .block_erase = spi_block_erase_d8,
1658 }, {
1659 .eraseblocks = { {512 * 1024, 1} },
1660 .block_erase = spi_block_erase_c7,
1661 }
1662 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001663 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001664 .write = spi_chip_write_256,
1665 .read = spi_chip_read,
1666 },
1667
1668 {
1669 .vendor = "Eon",
1670 .name = "EN25B40T",
1671 .bustype = CHIP_BUSTYPE_SPI,
1672 .manufacture_id = EON_ID_NOPREFIX,
1673 .model_id = EN_25B40,
1674 .total_size = 512,
1675 .page_size = 256,
1676 .tested = TEST_UNTESTED,
1677 .probe = probe_spi_rdid,
1678 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001679 .block_erasers =
1680 {
1681 {
1682 .eraseblocks = {
1683 {64 * 1024, 7},
1684 {32 * 1024, 1},
1685 {16 * 1024, 1},
1686 {8 * 1024, 1},
1687 {4 * 1024, 2},
1688 },
1689 .block_erase = spi_block_erase_d8,
1690 }, {
1691 .eraseblocks = { {512 * 1024, 1} },
1692 .block_erase = spi_block_erase_c7,
1693 }
1694 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001695 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001696 .write = spi_chip_write_256,
1697 .read = spi_chip_read,
1698 },
1699
1700 {
1701 .vendor = "Eon",
1702 .name = "EN25B80",
1703 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001704 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001705 .model_id = EN_25B80,
1706 .total_size = 1024,
1707 .page_size = 256,
1708 .tested = TEST_UNTESTED,
1709 .probe = probe_spi_rdid,
1710 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001711 .block_erasers =
1712 {
1713 {
1714 .eraseblocks = {
1715 {4 * 1024, 2},
1716 {8 * 1024, 1},
1717 {16 * 1024, 1},
1718 {32 * 1024, 1},
1719 {64 * 1024, 15}
1720 },
1721 .block_erase = spi_block_erase_d8,
1722 }, {
1723 .eraseblocks = { {1024 * 1024, 1} },
1724 .block_erase = spi_block_erase_c7,
1725 }
1726 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001727 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001728 .write = spi_chip_write_256,
1729 .read = spi_chip_read,
1730 },
1731
1732 {
1733 .vendor = "Eon",
1734 .name = "EN25B80T",
1735 .bustype = CHIP_BUSTYPE_SPI,
1736 .manufacture_id = EON_ID_NOPREFIX,
1737 .model_id = EN_25B80,
1738 .total_size = 1024,
1739 .page_size = 256,
1740 .tested = TEST_UNTESTED,
1741 .probe = probe_spi_rdid,
1742 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001743 .block_erasers =
1744 {
1745 {
1746 .eraseblocks = {
1747 {64 * 1024, 15},
1748 {32 * 1024, 1},
1749 {16 * 1024, 1},
1750 {8 * 1024, 1},
1751 {4 * 1024, 2},
1752 },
1753 .block_erase = spi_block_erase_d8,
1754 }, {
1755 .eraseblocks = { {1024 * 1024, 1} },
1756 .block_erase = spi_block_erase_c7,
1757 }
1758 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001759 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001760 .write = spi_chip_write_256,
1761 .read = spi_chip_read,
1762 },
1763
1764 {
1765 .vendor = "Eon",
1766 .name = "EN25B16",
1767 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001768 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001769 .model_id = EN_25B16,
1770 .total_size = 2048,
1771 .page_size = 256,
1772 .tested = TEST_UNTESTED,
1773 .probe = probe_spi_rdid,
1774 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001775 .block_erasers =
1776 {
1777 {
1778 .eraseblocks = {
1779 {4 * 1024, 2},
1780 {8 * 1024, 1},
1781 {16 * 1024, 1},
1782 {32 * 1024, 1},
1783 {64 * 1024, 31},
1784 },
1785 .block_erase = spi_block_erase_d8,
1786 }, {
1787 .eraseblocks = { {2 * 1024 * 1024, 1} },
1788 .block_erase = spi_block_erase_c7,
1789 }
1790 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001791 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001792 .write = spi_chip_write_256,
1793 .read = spi_chip_read,
1794 },
1795
1796 {
1797 .vendor = "Eon",
1798 .name = "EN25B16T",
1799 .bustype = CHIP_BUSTYPE_SPI,
1800 .manufacture_id = EON_ID_NOPREFIX,
1801 .model_id = EN_25B16,
1802 .total_size = 2048,
1803 .page_size = 256,
1804 .tested = TEST_UNTESTED,
1805 .probe = probe_spi_rdid,
1806 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001807 .block_erasers =
1808 {
1809 {
1810 .eraseblocks = {
1811 {64 * 1024, 31},
1812 {32 * 1024, 1},
1813 {16 * 1024, 1},
1814 {8 * 1024, 1},
1815 {4 * 1024, 2},
1816 },
1817 .block_erase = spi_block_erase_d8,
1818 }, {
1819 .eraseblocks = { {2 * 1024 * 1024, 1} },
1820 .block_erase = spi_block_erase_c7,
1821 }
1822 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001823 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001824 .write = spi_chip_write_256,
1825 .read = spi_chip_read,
1826 },
1827
1828 {
1829 .vendor = "Eon",
1830 .name = "EN25B32",
1831 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001832 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001833 .model_id = EN_25B32,
1834 .total_size = 4096,
1835 .page_size = 256,
1836 .tested = TEST_UNTESTED,
1837 .probe = probe_spi_rdid,
1838 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001839 .block_erasers =
1840 {
1841 {
1842 .eraseblocks = {
1843 {4 * 1024, 2},
1844 {8 * 1024, 1},
1845 {16 * 1024, 1},
1846 {32 * 1024, 1},
1847 {64 * 1024, 63},
1848 },
1849 .block_erase = spi_block_erase_d8,
1850 }, {
1851 .eraseblocks = { {4 * 1024 * 1024, 1} },
1852 .block_erase = spi_block_erase_c7,
1853 }
1854 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001855 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001856 .write = spi_chip_write_256,
1857 .read = spi_chip_read,
1858 },
1859
1860 {
1861 .vendor = "Eon",
1862 .name = "EN25B32T",
1863 .bustype = CHIP_BUSTYPE_SPI,
1864 .manufacture_id = EON_ID_NOPREFIX,
1865 .model_id = EN_25B32,
1866 .total_size = 4096,
1867 .page_size = 256,
1868 .tested = TEST_UNTESTED,
1869 .probe = probe_spi_rdid,
1870 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001871 .block_erasers =
1872 {
1873 {
1874 .eraseblocks = {
1875 {64 * 1024, 63},
1876 {32 * 1024, 1},
1877 {16 * 1024, 1},
1878 {8 * 1024, 1},
1879 {4 * 1024, 2},
1880 },
1881 .block_erase = spi_block_erase_d8,
1882 }, {
1883 .eraseblocks = { {4 * 1024 * 1024, 1} },
1884 .block_erase = spi_block_erase_c7,
1885 }
1886 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001887 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001888 .write = spi_chip_write_256,
1889 .read = spi_chip_read,
1890 },
1891
1892 {
1893 .vendor = "Eon",
1894 .name = "EN25B64",
1895 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001896 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001897 .model_id = EN_25B64,
1898 .total_size = 8192,
1899 .page_size = 256,
1900 .tested = TEST_UNTESTED,
1901 .probe = probe_spi_rdid,
1902 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001903 .block_erasers =
1904 {
1905 {
1906 .eraseblocks = {
1907 {4 * 1024, 2},
1908 {8 * 1024, 1},
1909 {16 * 1024, 1},
1910 {32 * 1024, 1},
1911 {64 * 1024, 127},
1912 },
1913 .block_erase = spi_block_erase_d8,
1914 }, {
1915 .eraseblocks = { {8 * 1024 * 1024, 1} },
1916 .block_erase = spi_block_erase_c7,
1917 }
1918 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001919 .unlock = spi_disable_blockprotect,
Sean Nelson54596372010-01-09 05:30:14 +00001920 .write = spi_chip_write_256,
1921 .read = spi_chip_read,
1922 },
1923
1924 {
1925 .vendor = "Eon",
1926 .name = "EN25B64T",
1927 .bustype = CHIP_BUSTYPE_SPI,
1928 .manufacture_id = EON_ID_NOPREFIX,
1929 .model_id = EN_25B64,
1930 .total_size = 8192,
1931 .page_size = 256,
1932 .tested = TEST_UNTESTED,
1933 .probe = probe_spi_rdid,
1934 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001935 .block_erasers =
1936 {
1937 {
1938 .eraseblocks = {
1939 {64 * 1024, 127},
1940 {32 * 1024, 1},
1941 {16 * 1024, 1},
1942 {8 * 1024, 1},
1943 {4 * 1024, 2},
1944 },
1945 .block_erase = spi_block_erase_d8,
1946 }, {
1947 .eraseblocks = { {8 * 1024 * 1024, 1} },
1948 .block_erase = spi_block_erase_c7,
1949 }
1950 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001951 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001952 .write = spi_chip_write_256,
1953 .read = spi_chip_read,
1954 },
1955
1956 {
1957 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001958 .name = "EN25D16",
1959 .bustype = CHIP_BUSTYPE_SPI,
1960 .manufacture_id = EON_ID_NOPREFIX,
1961 .model_id = EN_25D16,
1962 .total_size = 2048,
1963 .page_size = 256,
1964 .tested = TEST_UNTESTED,
1965 .probe = probe_spi_rdid,
1966 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001967 .block_erasers =
1968 {
1969 {
1970 .eraseblocks = { {4 * 1024, 512} },
1971 .block_erase = spi_block_erase_20,
1972 }, {
1973 .eraseblocks = { {64 * 1024, 32} },
1974 .block_erase = spi_block_erase_d8,
1975 }, {
1976 .eraseblocks = { {64 * 1024, 32} },
1977 .block_erase = spi_block_erase_52,
1978 }, {
1979 .eraseblocks = { {2 * 1024 * 1024, 1} },
1980 .block_erase = spi_block_erase_60,
1981 }, {
1982 .eraseblocks = { {2 * 1024 * 1024, 1} },
1983 .block_erase = spi_block_erase_c7,
1984 }
1985 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00001986 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001987 .write = spi_chip_write_256,
1988 .read = spi_chip_read,
1989 },
1990
1991 {
1992 .vendor = "Eon",
1993 .name = "EN25F05",
1994 .bustype = CHIP_BUSTYPE_SPI,
1995 .manufacture_id = EON_ID_NOPREFIX,
1996 .model_id = EN_25F05,
1997 .total_size = 64,
1998 .page_size = 256,
1999 .tested = TEST_UNTESTED,
2000 .probe = probe_spi_rdid,
2001 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002002 .block_erasers =
2003 {
2004 {
2005 .eraseblocks = { {4 * 1024, 16} },
2006 .block_erase = spi_block_erase_20,
2007 }, {
2008 .eraseblocks = { {32 * 1024, 2} },
2009 .block_erase = spi_block_erase_d8,
2010 }, {
2011 .eraseblocks = { {32 * 1024, 2} },
2012 .block_erase = spi_block_erase_52,
2013 }, {
2014 .eraseblocks = { {64 * 1024, 1} },
2015 .block_erase = spi_block_erase_60,
2016 }, {
2017 .eraseblocks = { {64 * 1024, 1} },
2018 .block_erase = spi_block_erase_c7,
2019 }
2020 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002021 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002022 .write = spi_chip_write_256,
2023 .read = spi_chip_read,
2024 },
2025
2026 {
2027 .vendor = "Eon",
2028 .name = "EN25F10",
2029 .bustype = CHIP_BUSTYPE_SPI,
2030 .manufacture_id = EON_ID_NOPREFIX,
2031 .model_id = EN_25F10,
2032 .total_size = 128,
2033 .page_size = 256,
2034 .tested = TEST_UNTESTED,
2035 .probe = probe_spi_rdid,
2036 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002037 .block_erasers =
2038 {
2039 {
2040 .eraseblocks = { {4 * 1024, 32} },
2041 .block_erase = spi_block_erase_20,
2042 }, {
2043 .eraseblocks = { {32 * 1024, 4} },
2044 .block_erase = spi_block_erase_d8,
2045 }, {
2046 .eraseblocks = { {32 * 1024, 4} },
2047 .block_erase = spi_block_erase_52,
2048 }, {
2049 .eraseblocks = { {128 * 1024, 1} },
2050 .block_erase = spi_block_erase_60,
2051 }, {
2052 .eraseblocks = { {128 * 1024, 1} },
2053 .block_erase = spi_block_erase_c7,
2054 }
2055 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002056 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002057 .write = spi_chip_write_256,
2058 .read = spi_chip_read,
2059 },
2060
2061 {
2062 .vendor = "Eon",
2063 .name = "EN25F20",
2064 .bustype = CHIP_BUSTYPE_SPI,
2065 .manufacture_id = EON_ID_NOPREFIX,
2066 .model_id = EN_25F20,
2067 .total_size = 256,
2068 .page_size = 256,
2069 .tested = TEST_UNTESTED,
2070 .probe = probe_spi_rdid,
2071 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002072 .block_erasers =
2073 {
2074 {
2075 .eraseblocks = { {4 * 1024, 64} },
2076 .block_erase = spi_block_erase_20,
2077 }, {
2078 .eraseblocks = { {64 * 1024, 4} },
2079 .block_erase = spi_block_erase_d8,
2080 }, {
2081 .eraseblocks = { {64 * 1024, 4} },
2082 .block_erase = spi_block_erase_52,
2083 }, {
2084 .eraseblocks = { {256 * 1024, 1} },
2085 .block_erase = spi_block_erase_60,
2086 }, {
2087 .eraseblocks = { {256 * 1024, 1} },
2088 .block_erase = spi_block_erase_c7,
2089 }
2090 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002091 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002092 .write = spi_chip_write_256,
2093 .read = spi_chip_read,
2094 },
2095
2096 {
2097 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002098 .name = "EN25F40",
2099 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002100 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002101 .model_id = EN_25F40,
2102 .total_size = 512,
2103 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00002104 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002105 .probe = probe_spi_rdid,
2106 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002107 .block_erasers =
2108 {
2109 {
Sean Nelson54596372010-01-09 05:30:14 +00002110 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002111 .block_erase = spi_block_erase_20,
2112 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002113 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002114 .block_erase = spi_block_erase_d8,
2115 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002116 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002117 .block_erase = spi_block_erase_60,
2118 }, {
Sean Nelson54596372010-01-09 05:30:14 +00002119 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00002120 .block_erase = spi_block_erase_c7,
2121 },
2122 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002123 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002124 .write = spi_chip_write_256,
2125 .read = spi_chip_read,
2126 },
2127
2128 {
2129 .vendor = "Eon",
2130 .name = "EN25F80",
2131 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002132 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002133 .model_id = EN_25F80,
2134 .total_size = 1024,
2135 .page_size = 256,
Uwe Hermannea5425b2010-05-30 17:00:19 +00002136 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002137 .probe = probe_spi_rdid,
2138 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002139 .block_erasers =
2140 {
2141 {
2142 .eraseblocks = { {4 * 1024, 256} },
2143 .block_erase = spi_block_erase_20,
2144 }, {
2145 .eraseblocks = { {64 * 1024, 16} },
2146 .block_erase = spi_block_erase_d8,
2147 }, {
2148 .eraseblocks = { {1024 * 1024, 1} },
2149 .block_erase = spi_block_erase_60,
2150 }, {
2151 .eraseblocks = { {1024 * 1024, 1} },
2152 .block_erase = spi_block_erase_c7,
2153 }
2154 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002155 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002156 .write = spi_chip_write_256,
2157 .read = spi_chip_read,
2158 },
2159
2160 {
2161 .vendor = "Eon",
2162 .name = "EN25F16",
2163 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002164 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002165 .model_id = EN_25F16,
2166 .total_size = 2048,
2167 .page_size = 256,
2168 .tested = TEST_UNTESTED,
2169 .probe = probe_spi_rdid,
2170 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002171 .block_erasers =
2172 {
2173 {
2174 .eraseblocks = { {4 * 1024, 512} },
2175 .block_erase = spi_block_erase_20,
2176 }, {
2177 .eraseblocks = { {64 * 1024, 32} },
2178 .block_erase = spi_block_erase_d8,
2179 }, {
2180 .eraseblocks = { {2 * 1024 * 1024, 1} },
2181 .block_erase = spi_block_erase_60,
2182 }, {
2183 .eraseblocks = { {2 * 1024 * 1024, 1} },
2184 .block_erase = spi_block_erase_c7,
2185 }
2186 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002187 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002188 .write = spi_chip_write_256,
2189 .read = spi_chip_read,
2190 },
2191
2192 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002193 .vendor = "Eon",
2194 .name = "EN25F32",
2195 .bustype = CHIP_BUSTYPE_SPI,
2196 .manufacture_id = EON_ID_NOPREFIX,
2197 .model_id = EN_25F32,
2198 .total_size = 4096,
2199 .page_size = 256,
2200 .tested = TEST_UNTESTED,
2201 .probe = probe_spi_rdid,
2202 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002203 .block_erasers =
2204 {
2205 {
2206 .eraseblocks = { {4 * 1024, 1024} },
2207 .block_erase = spi_block_erase_20,
2208 }, {
2209 .eraseblocks = { {64 * 1024, 64} },
2210 .block_erase = spi_block_erase_d8,
2211 }, {
2212 .eraseblocks = { {4 * 1024 * 1024, 1} },
2213 .block_erase = spi_block_erase_60,
2214 }, {
2215 .eraseblocks = { {4 * 1024 * 1024, 1} },
2216 .block_erase = spi_block_erase_c7,
2217 }
2218 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002219 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002220 .write = spi_chip_write_256,
2221 .read = spi_chip_read,
2222 },
2223
2224 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002225 .vendor = "Eon",
2226 .name = "EN29F010",
2227 .bustype = CHIP_BUSTYPE_PARALLEL,
2228 .manufacture_id = EON_ID,
2229 .model_id = EN_29F010,
2230 .total_size = 128,
2231 .page_size = 128,
2232 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2233 .tested = TEST_OK_PREW,
2234 .probe = probe_jedec,
2235 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2236 .block_erasers =
2237 {
2238 {
2239 .eraseblocks = { {16 * 1024, 8} },
2240 .block_erase = erase_sector_jedec,
2241 },
2242 {
2243 .eraseblocks = { {128 * 1024, 1} },
2244 .block_erase = erase_chip_block_jedec,
2245 },
2246 },
2247 .write = write_jedec_1,
2248 .read = read_memmapped,
2249 },
2250
2251 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002252 .vendor = "EON",
2253 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002254 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002255 .manufacture_id = EON_ID,
2256 .model_id = EN_29F002B,
2257 .total_size = 256,
2258 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002259 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00002260 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002261 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002262 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002263 .block_erasers =
2264 {
2265 {
2266 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002267 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002268 {8 * 1024, 2},
2269 {32 * 1024, 1},
2270 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002271 },
2272 .block_erase = erase_sector_jedec,
2273 }, {
2274 .eraseblocks = { {256 * 1024, 1} },
2275 .block_erase = erase_chip_block_jedec,
2276 },
2277 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002278 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002279 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002280 },
2281
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002282 {
2283 .vendor = "EON",
2284 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002285 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002286 .manufacture_id = EON_ID,
2287 .model_id = EN_29F002T,
2288 .total_size = 256,
2289 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002290 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002291 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002292 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002293 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002294 .block_erasers =
2295 {
2296 {
2297 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002298 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002299 {32 * 1024, 1},
2300 {8 * 1024, 2},
2301 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002302 },
2303 .block_erase = erase_sector_jedec,
2304 }, {
2305 .eraseblocks = { {256 * 1024, 1} },
2306 .block_erase = erase_chip_block_jedec,
2307 },
2308 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002309 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002310 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002311 },
2312
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002313 {
2314 .vendor = "Fujitsu",
2315 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002316 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002317 .manufacture_id = FUJITSU_ID,
2318 .model_id = MBM29F004BC,
2319 .total_size = 512,
2320 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002321 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002322 .tested = TEST_UNTESTED,
2323 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002324 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002325 .block_erasers =
2326 {
2327 {
2328 .eraseblocks = {
2329 {16 * 1024, 1},
2330 {8 * 1024, 2},
2331 {32 * 1024, 1},
2332 {64 * 1024, 7},
2333 },
Sean Nelson35727f72010-01-28 23:55:12 +00002334 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002335 }, {
2336 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002337 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002338 },
2339 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002340 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002341 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002342 },
2343
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002344 {
2345 .vendor = "Fujitsu",
2346 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002347 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002348 .manufacture_id = FUJITSU_ID,
2349 .model_id = MBM29F004TC,
2350 .total_size = 512,
2351 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002352 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002353 .tested = TEST_UNTESTED,
2354 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002355 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002356 .block_erasers =
2357 {
2358 {
2359 .eraseblocks = {
2360 {64 * 1024, 7},
2361 {32 * 1024, 1},
2362 {8 * 1024, 2},
2363 {16 * 1024, 1},
2364 },
Sean Nelson35727f72010-01-28 23:55:12 +00002365 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002366 }, {
2367 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002368 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002369 },
2370 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002371 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002372 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002373 },
2374
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002375 {
Sean Nelson35727f72010-01-28 23:55:12 +00002376 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002377 .vendor = "Fujitsu",
2378 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002379 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002380 .manufacture_id = FUJITSU_ID,
2381 .model_id = MBM29F400BC,
2382 .total_size = 512,
2383 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002384 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002385 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002386 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002387 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002388 .block_erasers =
2389 {
2390 {
2391 .eraseblocks = {
2392 {16 * 1024, 1},
2393 {8 * 1024, 2},
2394 {32 * 1024, 1},
2395 {64 * 1024, 7},
2396 },
2397 .block_erase = block_erase_m29f400bt,
2398 }, {
2399 .eraseblocks = { {512 * 1024, 1} },
2400 .block_erase = block_erase_chip_m29f400bt,
2401 },
2402 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002403 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002404 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002405 },
2406
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002407 {
2408 .vendor = "Fujitsu",
2409 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002410 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002411 .manufacture_id = FUJITSU_ID,
2412 .model_id = MBM29F400TC,
2413 .total_size = 512,
2414 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002415 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002416 .tested = TEST_UNTESTED,
2417 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002418 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002419 .block_erasers =
2420 {
2421 {
2422 .eraseblocks = {
2423 {64 * 1024, 7},
2424 {32 * 1024, 1},
2425 {8 * 1024, 2},
2426 {16 * 1024, 1},
2427 },
2428 .block_erase = block_erase_m29f400bt,
2429 }, {
2430 .eraseblocks = { {512 * 1024, 1} },
2431 .block_erase = block_erase_chip_m29f400bt,
2432 },
2433 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00002434 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002435 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002436 },
2437
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002438 {
David Borgc96a8bd2010-06-21 16:12:22 +00002439 .vendor = "Hyundai",
2440 .name = "HY29F002T",
2441 .bustype = CHIP_BUSTYPE_PARALLEL,
2442 .manufacture_id = HYUNDAI_ID,
2443 .model_id = HY_29F002T,
2444 .total_size = 256,
2445 .page_size = 256 * 1024,
2446 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
2447 .tested = TEST_OK_PREW,
2448 .probe = probe_jedec,
2449 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2450 .block_erasers =
2451 {
2452 {
2453 .eraseblocks = {
2454 {64 * 1024, 3},
2455 {32 * 1024, 1},
2456 {8 * 1024, 2},
2457 {16 * 1024, 1},
2458 },
2459 .block_erase = erase_sector_jedec,
2460 }, {
2461 .eraseblocks = { {256 * 1024, 1} },
2462 .block_erase = erase_chip_block_jedec,
2463 },
2464 },
2465 .write = write_jedec_1,
2466 .read = read_memmapped,
2467 },
2468
2469 {
2470 .vendor = "Hyundai",
2471 .name = "HY29F002B",
2472 .bustype = CHIP_BUSTYPE_PARALLEL,
2473 .manufacture_id = HYUNDAI_ID,
2474 .model_id = HY_29F002B,
2475 .total_size = 256,
2476 .page_size = 256 * 1024,
2477 .feature_bits = FEATURE_EITHER_RESET, /* Some revisions may need FEATURE_ADDR_2AA */
2478 .tested = TEST_UNTESTED,
2479 .probe = probe_jedec,
2480 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2481 .block_erasers =
2482 {
2483 {
2484 .eraseblocks = {
2485 {16 * 1024, 1},
2486 {8 * 1024, 2},
2487 {32 * 1024, 1},
2488 {64 * 1024, 3},
2489 },
2490 .block_erase = erase_sector_jedec,
2491 }, {
2492 .eraseblocks = { {256 * 1024, 1} },
2493 .block_erase = erase_chip_block_jedec,
2494 },
2495 },
2496 .write = write_jedec_1,
2497 .read = read_memmapped,
2498 },
2499
2500 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002501 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002502 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002503 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002504 .manufacture_id = INTEL_ID,
2505 .model_id = P28F001BXB,
2506 .total_size = 128,
2507 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002508 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002509 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002510 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002511 .block_erasers =
2512 {
2513 {
2514 .eraseblocks = {
2515 {8 * 1024, 1},
2516 {4 * 1024, 2},
2517 {112 * 1024, 1},
2518 },
Sean Nelson28accc22010-03-19 18:47:06 +00002519 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002520 },
2521 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002522 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002523 .read = read_memmapped,
2524 },
2525
2526 {
2527 .vendor = "Intel",
2528 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002529 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002530 .manufacture_id = INTEL_ID,
2531 .model_id = P28F001BXT,
2532 .total_size = 128,
2533 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002534 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002535 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002536 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002537 .block_erasers =
2538 {
2539 {
2540 .eraseblocks = {
2541 {112 * 1024, 1},
2542 {4 * 1024, 2},
2543 {8 * 1024, 1},
2544 },
Sean Nelson28accc22010-03-19 18:47:06 +00002545 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002546 },
2547 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002548 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002549 .read = read_memmapped,
2550 },
2551
2552 {
2553 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002554 .name = "28F004S5",
2555 .bustype = CHIP_BUSTYPE_PARALLEL,
2556 .manufacture_id = INTEL_ID,
2557 .model_id = E_28F004S5,
2558 .total_size = 512,
2559 .page_size = 256,
2560 .tested = TEST_UNTESTED,
2561 .probe = probe_82802ab,
2562 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002563 .block_erasers =
2564 {
2565 {
2566 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002567 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002568 },
2569 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002570 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002571 .write = write_82802ab,
2572 .read = read_memmapped,
2573 },
2574
2575 {
2576 .vendor = "Intel",
Michael Karcherad0010a2010-04-03 10:27:08 +00002577 .name = "28F004BV/BE-B",
2578 .bustype = CHIP_BUSTYPE_PARALLEL,
2579 .manufacture_id = INTEL_ID,
2580 .model_id = P28F004BB,
2581 .total_size = 512,
2582 .page_size = 128 * 1024, /* maximal block size */
2583 .tested = TEST_UNTESTED,
2584 .probe = probe_82802ab,
2585 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2586 .block_erasers =
2587 {
2588 {
2589 .eraseblocks = {
2590 {16 * 1024, 1},
2591 {8 * 1024, 2},
2592 {96 * 1024, 1},
2593 {128 * 1024, 3},
2594 },
2595 .block_erase = erase_block_82802ab,
2596 },
2597 },
2598 .write = write_82802ab,
2599 .read = read_memmapped,
2600 },
2601
2602 {
2603 .vendor = "Intel",
2604 .name = "28F004BV/BE-T",
2605 .bustype = CHIP_BUSTYPE_PARALLEL,
2606 .manufacture_id = INTEL_ID,
2607 .model_id = P28F004BT,
2608 .total_size = 512,
2609 .page_size = 128 * 1024, /* maximal block size */
2610 .tested = TEST_UNTESTED,
2611 .probe = probe_82802ab,
2612 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2613 .block_erasers =
2614 {
2615 {
2616 .eraseblocks = {
2617 {128 * 1024, 3},
2618 {96 * 1024, 1},
2619 {8 * 1024, 2},
2620 {16 * 1024, 1},
2621 },
2622 .block_erase = erase_block_82802ab,
2623 },
2624 },
2625 .write = write_82802ab,
2626 .read = read_memmapped,
2627 },
2628
2629 {
2630 .vendor = "Intel",
2631 .name = "28F400BV/CV/CE-B",
2632 .bustype = CHIP_BUSTYPE_PARALLEL,
2633 .manufacture_id = INTEL_ID,
2634 .model_id = P28F400BB,
2635 .total_size = 512,
2636 .page_size = 128 * 1024, /* maximal block size */
2637 .feature_bits = FEATURE_ADDR_SHIFTED,
2638 .tested = TEST_UNTESTED,
2639 .probe = probe_82802ab,
2640 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2641 .block_erasers =
2642 {
2643 {
2644 .eraseblocks = {
2645 {16 * 1024, 1},
2646 {8 * 1024, 2},
2647 {96 * 1024, 1},
2648 {128 * 1024, 3},
2649 },
2650 .block_erase = erase_block_82802ab,
2651 },
2652 },
2653 .write = write_82802ab,
2654 .read = read_memmapped,
2655 },
2656
2657 {
2658 .vendor = "Intel",
2659 .name = "28F400BV/CV/CE-T",
2660 .bustype = CHIP_BUSTYPE_PARALLEL,
2661 .manufacture_id = INTEL_ID,
2662 .model_id = P28F400BT,
2663 .total_size = 512,
2664 .page_size = 128 * 1024, /* maximal block size */
2665 .feature_bits = FEATURE_ADDR_SHIFTED,
2666 .tested = TEST_UNTESTED,
2667 .probe = probe_82802ab,
2668 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2669 .block_erasers =
2670 {
2671 {
2672 .eraseblocks = {
2673 {128 * 1024, 3},
2674 {96 * 1024, 1},
2675 {8 * 1024, 2},
2676 {16 * 1024, 1},
2677 },
2678 .block_erase = erase_block_82802ab,
2679 },
2680 },
2681 .write = write_82802ab,
2682 .read = read_memmapped,
2683 },
2684
2685 {
2686 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002687 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002688 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002689 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002690 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002691 .total_size = 512,
2692 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002693 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002694 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002695 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002696 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002697 .block_erasers =
2698 {
2699 {
2700 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002701 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002702 },
2703 },
Sean Nelson28accc22010-03-19 18:47:06 +00002704 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002705 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002706 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002707 },
2708
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002709 {
2710 .vendor = "Intel",
2711 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002712 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002713 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002714 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002715 .total_size = 1024,
2716 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002717 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002718 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002719 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002720 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002721 .block_erasers =
2722 {
2723 {
2724 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00002725 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002726 },
2727 },
Sean Nelson28accc22010-03-19 18:47:06 +00002728 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002729 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002730 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002731 },
2732
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002733 {
2734 .vendor = "Macronix",
2735 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002736 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002737 .manufacture_id = MX_ID,
2738 .model_id = MX_25L512,
2739 .total_size = 64,
2740 .page_size = 256,
2741 .tested = TEST_UNTESTED,
2742 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002743 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002744 .block_erasers =
2745 {
2746 {
2747 .eraseblocks = { {4 * 1024, 16} },
2748 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002749 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002750 .eraseblocks = { {64 * 1024, 1} },
2751 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002752 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002753 .eraseblocks = { {64 * 1024, 1} },
2754 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002755 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002756 .eraseblocks = { {64 * 1024, 1} },
2757 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002758 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002759 .eraseblocks = { {64 * 1024, 1} },
2760 .block_erase = spi_block_erase_c7,
2761 },
2762 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002763 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002764 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002765 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002766 },
2767
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002768 {
2769 .vendor = "Macronix",
2770 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002771 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002772 .manufacture_id = MX_ID,
2773 .model_id = MX_25L1005,
2774 .total_size = 128,
2775 .page_size = 256,
2776 .tested = TEST_UNTESTED,
2777 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002778 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002779 .block_erasers =
2780 {
2781 {
2782 .eraseblocks = { {4 * 1024, 32} },
2783 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002784 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002785 .eraseblocks = { {64 * 1024, 2} },
2786 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002787 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002788 .eraseblocks = { {128 * 1024, 1} },
2789 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002790 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002791 .eraseblocks = { {128 * 1024, 1} },
2792 .block_erase = spi_block_erase_c7,
2793 },
2794 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002795 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002796 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002797 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002798 },
2799
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002800 {
2801 .vendor = "Macronix",
2802 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002803 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002804 .manufacture_id = MX_ID,
2805 .model_id = MX_25L2005,
2806 .total_size = 256,
2807 .page_size = 256,
2808 .tested = TEST_UNTESTED,
2809 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002810 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002811 .block_erasers =
2812 {
2813 {
2814 .eraseblocks = { {4 * 1024, 64} },
2815 .block_erase = spi_block_erase_20,
2816 }, {
2817 .eraseblocks = { {64 * 1024, 4} },
2818 .block_erase = spi_block_erase_52,
2819 }, {
2820 .eraseblocks = { {64 * 1024, 4} },
2821 .block_erase = spi_block_erase_d8,
2822 }, {
2823 .eraseblocks = { {256 * 1024, 1} },
2824 .block_erase = spi_block_erase_60,
2825 }, {
2826 .eraseblocks = { {256 * 1024, 1} },
2827 .block_erase = spi_block_erase_c7,
2828 },
2829 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002830 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002831 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002832 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002833 },
2834
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002835 {
2836 .vendor = "Macronix",
2837 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002838 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002839 .manufacture_id = MX_ID,
2840 .model_id = MX_25L4005,
2841 .total_size = 512,
2842 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002843 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002844 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002845 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002846 .block_erasers =
2847 {
2848 {
2849 .eraseblocks = { {4 * 1024, 128} },
2850 .block_erase = spi_block_erase_20,
2851 }, {
2852 .eraseblocks = { {64 * 1024, 8} },
2853 .block_erase = spi_block_erase_52,
2854 }, {
2855 .eraseblocks = { {64 * 1024, 8} },
2856 .block_erase = spi_block_erase_d8,
2857 }, {
2858 .eraseblocks = { {512 * 1024, 1} },
2859 .block_erase = spi_block_erase_60,
2860 }, {
2861 .eraseblocks = { {512 * 1024, 1} },
2862 .block_erase = spi_block_erase_c7,
2863 },
2864 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002865 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002866 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002867 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002868 },
2869
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002870 {
2871 .vendor = "Macronix",
2872 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002873 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002874 .manufacture_id = MX_ID,
2875 .model_id = MX_25L8005,
2876 .total_size = 1024,
2877 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002878 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002879 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002880 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002881 .block_erasers =
2882 {
2883 {
2884 .eraseblocks = { {4 * 1024, 256} },
2885 .block_erase = spi_block_erase_20,
2886 }, {
2887 .eraseblocks = { {64 * 1024, 16} },
2888 .block_erase = spi_block_erase_52,
2889 }, {
2890 .eraseblocks = { {64 * 1024, 16} },
2891 .block_erase = spi_block_erase_d8,
2892 }, {
2893 .eraseblocks = { {1024 * 1024, 1} },
2894 .block_erase = spi_block_erase_60,
2895 }, {
2896 .eraseblocks = { {1024 * 1024, 1} },
2897 .block_erase = spi_block_erase_c7,
2898 },
2899 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002900 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002901 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002902 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002903 },
2904
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002905 {
2906 .vendor = "Macronix",
2907 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002908 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002909 .manufacture_id = MX_ID,
2910 .model_id = MX_25L1605,
2911 .total_size = 2048,
2912 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002913 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002914 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002915 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002916 .block_erasers =
2917 {
2918 {
2919 .eraseblocks = { {4 * 1024, 512} },
2920 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2921 }, {
2922 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2923 .block_erase = spi_block_erase_52,
2924 }, {
2925 .eraseblocks = { {64 * 1024, 32} },
2926 .block_erase = spi_block_erase_d8,
2927 }, {
2928 .eraseblocks = { {2 * 1024 * 1024, 1} },
2929 .block_erase = spi_block_erase_60,
2930 }, {
2931 .eraseblocks = { {2 * 1024 * 1024, 1} },
2932 .block_erase = spi_block_erase_c7,
2933 },
2934 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002935 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002936 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002937 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002938 },
2939
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002940 {
2941 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002942 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002943 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002944 .manufacture_id = MX_ID,
2945 .model_id = MX_25L1635D,
2946 .total_size = 2048,
2947 .page_size = 256,
2948 .tested = TEST_UNTESTED,
2949 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002950 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002951 .block_erasers =
2952 {
2953 {
2954 .eraseblocks = { {4 * 1024, 512} },
2955 .block_erase = spi_block_erase_20,
2956 }, {
2957 .eraseblocks = { {64 * 1024, 32} },
2958 .block_erase = spi_block_erase_d8,
2959 }, {
2960 .eraseblocks = { {2 * 1024 * 1024, 1} },
2961 .block_erase = spi_block_erase_60,
2962 }, {
2963 .eraseblocks = { {2 * 1024 * 1024, 1} },
2964 .block_erase = spi_block_erase_c7,
2965 }
2966 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002967 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002968 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002969 .read = spi_chip_read,
2970 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002971
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002972 {
2973 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002974 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002975 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002976 .manufacture_id = MX_ID,
2977 .model_id = MX_25L3205,
2978 .total_size = 4096,
2979 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002980 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002981 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002982 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002983 .block_erasers =
2984 {
2985 {
2986 .eraseblocks = { {4 * 1024, 1024} },
2987 .block_erase = spi_block_erase_20,
2988 }, {
2989 .eraseblocks = { {4 * 1024, 1024} },
2990 .block_erase = spi_block_erase_d8,
2991 }, {
2992 .eraseblocks = { {4 * 1024 * 1024, 1} },
2993 .block_erase = spi_block_erase_60,
2994 }, {
2995 .eraseblocks = { {4 * 1024 * 1024, 1} },
2996 .block_erase = spi_block_erase_c7,
2997 },
2998 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00002999 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003000 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003001 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003002 },
3003
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003004 {
3005 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003006 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003007 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003008 .manufacture_id = MX_ID,
3009 .model_id = MX_25L3235D,
3010 .total_size = 4096,
3011 .page_size = 256,
3012 .tested = TEST_UNTESTED,
3013 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003014 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003015 .block_erasers =
3016 {
3017 {
3018 .eraseblocks = { {4 * 1024, 1024} },
3019 .block_erase = spi_block_erase_20,
3020 }, {
3021 .eraseblocks = { {64 * 1024, 64} },
3022 .block_erase = spi_block_erase_d8,
3023 }, {
3024 .eraseblocks = { {4 * 1024 * 1024, 1} },
3025 .block_erase = spi_block_erase_60,
3026 }, {
3027 .eraseblocks = { {4 * 1024 * 1024, 1} },
3028 .block_erase = spi_block_erase_c7,
3029 }
3030 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003031 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003032 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00003033 .read = spi_chip_read,
3034 },
3035
3036 {
3037 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003038 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003039 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003040 .manufacture_id = MX_ID,
3041 .model_id = MX_25L6405,
3042 .total_size = 8192,
3043 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00003044 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003045 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003046 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003047 .block_erasers =
3048 {
3049 {
3050 .eraseblocks = { {64 * 1024, 128} },
3051 .block_erase = spi_block_erase_20,
3052 }, {
3053 .eraseblocks = { {64 * 1024, 128} },
3054 .block_erase = spi_block_erase_d8,
3055 }, {
3056 .eraseblocks = { {8 * 1024 * 1024, 1} },
3057 .block_erase = spi_block_erase_60,
3058 }, {
3059 .eraseblocks = { {8 * 1024 * 1024, 1} },
3060 .block_erase = spi_block_erase_c7,
3061 }
3062 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003063 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003064 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003065 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003066 },
3067
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003068 {
3069 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003070 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003071 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003072 .manufacture_id = MX_ID,
3073 .model_id = MX_25L12805,
3074 .total_size = 16384,
3075 .page_size = 256,
3076 .tested = TEST_UNTESTED,
3077 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003078 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00003079 .block_erasers =
3080 {
3081 {
3082 .eraseblocks = { {4 * 1024, 4096} },
3083 .block_erase = spi_block_erase_20,
3084 }, {
3085 .eraseblocks = { {64 * 1024, 256} },
3086 .block_erase = spi_block_erase_d8,
3087 }, {
3088 .eraseblocks = { {16 * 1024 * 1024, 1} },
3089 .block_erase = spi_block_erase_60,
3090 }, {
3091 .eraseblocks = { {16 * 1024 * 1024, 1} },
3092 .block_erase = spi_block_erase_c7,
3093 }
3094 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003095 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003096 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00003097 .read = spi_chip_read,
3098 },
3099
3100 {
3101 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00003102 .name = "MX29F001B",
3103 .bustype = CHIP_BUSTYPE_PARALLEL,
3104 .manufacture_id = MX_ID,
3105 .model_id = MX_29F001B,
3106 .total_size = 128,
3107 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003108 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3109 .tested = TEST_UNTESTED,
3110 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003111 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003112 .block_erasers =
3113 {
3114 {
3115 .eraseblocks = {
3116 {8 * 1024, 1},
3117 {4 * 1024, 2},
3118 {8 * 1024, 2},
3119 {32 * 1024, 1},
3120 {64 * 1024, 1},
3121 },
Sean Nelson35727f72010-01-28 23:55:12 +00003122 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003123 }, {
3124 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003125 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003126 }
3127 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003128 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003129 .read = read_memmapped,
3130 },
3131
3132 {
3133 .vendor = "Macronix",
3134 .name = "MX29F001T",
3135 .bustype = CHIP_BUSTYPE_PARALLEL,
3136 .manufacture_id = MX_ID,
3137 .model_id = MX_29F001T,
3138 .total_size = 128,
3139 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003140 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3141 .tested = TEST_UNTESTED,
3142 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003143 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003144 .block_erasers =
3145 {
3146 {
3147 .eraseblocks = {
3148 {64 * 1024, 1},
3149 {32 * 1024, 1},
3150 {8 * 1024, 2},
3151 {4 * 1024, 2},
3152 {8 * 1024, 1},
3153 },
Sean Nelson35727f72010-01-28 23:55:12 +00003154 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003155 }, {
3156 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003157 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003158 }
3159 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003160 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00003161 .read = read_memmapped,
3162 },
3163
3164 {
3165 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003166 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00003167 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003168 .manufacture_id = MX_ID,
3169 .model_id = MX_29F002B,
3170 .total_size = 256,
3171 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003172 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003173 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003174 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003175 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003176 .block_erasers =
3177 {
3178 {
3179 .eraseblocks = {
3180 {16 * 1024, 1},
3181 {8 * 1024, 2},
3182 {32 * 1024, 1},
3183 {64 * 1024, 3},
3184 },
Sean Nelson35727f72010-01-28 23:55:12 +00003185 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003186 }, {
3187 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003188 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003189 },
3190 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003191 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003192 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003193 },
3194
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003195 {
3196 .vendor = "Macronix",
3197 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00003198 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003199 .manufacture_id = MX_ID,
3200 .model_id = MX_29F002T,
3201 .total_size = 256,
3202 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003203 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003204 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00003205 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003206 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003207 .block_erasers =
3208 {
3209 {
3210 .eraseblocks = {
3211 {64 * 1024, 3},
3212 {32 * 1024, 1},
3213 {8 * 1024, 2},
3214 {16 * 1024, 1},
3215 },
Sean Nelson35727f72010-01-28 23:55:12 +00003216 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003217 }, {
3218 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003219 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003220 },
3221 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003222 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003223 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003224 },
3225
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003226 {
3227 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003228 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003229 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003230 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003231 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003232 .total_size = 512,
3233 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003234 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3235 .tested = TEST_UNTESTED,
3236 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003237 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003238 .block_erasers =
3239 {
3240 {
3241 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00003242 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003243 }, {
3244 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003245 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003246 },
3247 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003248 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003249 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00003250 },
3251
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003252 {
3253 .vendor = "Numonyx",
3254 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003255 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003256 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003257 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003258 .total_size = 128,
3259 .page_size = 256,
3260 .tested = TEST_UNTESTED,
3261 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003262 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003263 .block_erasers =
3264 {
3265 {
3266 .eraseblocks = { {4 * 1024, 32} },
3267 .block_erase = spi_block_erase_20,
3268 }, {
3269 .eraseblocks = { {64 * 1024, 2} },
3270 .block_erase = spi_block_erase_d8,
3271 }, {
3272 .eraseblocks = { {128 * 1024, 1} },
3273 .block_erase = spi_block_erase_c7,
3274 }
3275 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003276 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003277 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003278 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003279 },
3280
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003281 {
3282 .vendor = "Numonyx",
3283 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003284 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003285 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003286 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003287 .total_size = 256,
3288 .page_size = 256,
3289 .tested = TEST_UNTESTED,
3290 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003291 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003292 .block_erasers =
3293 {
3294 {
3295 .eraseblocks = { {4 * 1024, 64} },
3296 .block_erase = spi_block_erase_20,
3297 }, {
3298 .eraseblocks = { {64 * 1024, 4} },
3299 .block_erase = spi_block_erase_d8,
3300 }, {
3301 .eraseblocks = { {256 * 1024, 1} },
3302 .block_erase = spi_block_erase_c7,
3303 }
3304 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003305 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003306 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003307 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003308 },
3309
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003310 {
3311 .vendor = "Numonyx",
3312 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003313 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003314 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003315 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003316 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003317 .page_size = 256,
3318 .tested = TEST_UNTESTED,
3319 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003320 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003321 .block_erasers =
3322 {
3323 {
3324 .eraseblocks = { {4 * 1024, 128} },
3325 .block_erase = spi_block_erase_20,
3326 }, {
3327 .eraseblocks = { {64 * 1024, 8} },
3328 .block_erase = spi_block_erase_d8,
3329 }, {
3330 .eraseblocks = { {512 * 1024, 1} },
3331 .block_erase = spi_block_erase_c7,
3332 }
3333 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003334 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003335 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003336 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003337 },
3338
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003339 {
3340 .vendor = "Numonyx",
3341 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003342 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003343 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003344 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003345 .total_size = 1024,
3346 .page_size = 256,
3347 .tested = TEST_OK_PREW,
3348 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003349 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003350 .block_erasers =
3351 {
3352 {
3353 .eraseblocks = { {4 * 1024, 256} },
3354 .block_erase = spi_block_erase_20,
3355 }, {
3356 .eraseblocks = { {64 * 1024, 16} },
3357 .block_erase = spi_block_erase_d8,
3358 }, {
3359 .eraseblocks = { {1024 * 1024, 1} },
3360 .block_erase = spi_block_erase_c7,
3361 }
3362 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003363 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003364 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003365 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003366 },
3367
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003368 {
3369 .vendor = "Numonyx",
3370 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003371 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003372 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003373 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003374 .total_size = 2048,
3375 .page_size = 256,
3376 .tested = TEST_UNTESTED,
3377 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003378 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003379 .block_erasers =
3380 {
3381 {
3382 .eraseblocks = { {4 * 1024, 512} },
3383 .block_erase = spi_block_erase_20,
3384 }, {
3385 .eraseblocks = { {64 * 1024, 32} },
3386 .block_erase = spi_block_erase_d8,
3387 }, {
3388 .eraseblocks = { {2 * 1024 * 1024, 1} },
3389 .block_erase = spi_block_erase_c7,
3390 }
3391 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003392 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003393 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003394 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003395 },
3396
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003397 {
3398 .vendor = "PMC",
3399 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003400 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003401 .manufacture_id = PMC_ID,
3402 .model_id = PMC_25LV010,
3403 .total_size = 128,
3404 .page_size = 256,
3405 .tested = TEST_UNTESTED,
3406 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003407 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003408 .block_erasers =
3409 {
3410 {
3411 .eraseblocks = { {4 * 1024, 32} },
3412 .block_erase = spi_block_erase_d7,
3413 }, {
3414 .eraseblocks = { {32 * 1024, 4} },
3415 .block_erase = spi_block_erase_d8,
3416 }, {
3417 .eraseblocks = { {128 * 1024, 1} },
3418 .block_erase = spi_block_erase_c7,
3419 }
3420 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003421 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003422 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003423 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003424 },
3425
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003426 {
3427 .vendor = "PMC",
3428 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003429 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003430 .manufacture_id = PMC_ID,
3431 .model_id = PMC_25LV016B,
3432 .total_size = 2048,
3433 .page_size = 256,
3434 .tested = TEST_UNTESTED,
3435 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003436 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003437 .block_erasers =
3438 {
3439 {
3440 .eraseblocks = { {4 * 1024, 512} },
3441 .block_erase = spi_block_erase_d7,
3442 }, {
3443 .eraseblocks = { {4 * 1024, 512} },
3444 .block_erase = spi_block_erase_20,
3445 }, {
3446 .eraseblocks = { {64 * 1024, 32} },
3447 .block_erase = spi_block_erase_d8,
3448 }, {
3449 .eraseblocks = { {2 * 1024 * 1024, 1} },
3450 .block_erase = spi_block_erase_60,
3451 }, {
3452 .eraseblocks = { {2 * 1024 * 1024, 1} },
3453 .block_erase = spi_block_erase_c7,
3454 }
3455 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003456 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003457 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003458 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003459 },
3460
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003461 {
3462 .vendor = "PMC",
3463 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003464 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003465 .manufacture_id = PMC_ID,
3466 .model_id = PMC_25LV020,
3467 .total_size = 256,
3468 .page_size = 256,
3469 .tested = TEST_UNTESTED,
3470 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003471 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003472 .block_erasers =
3473 {
3474 {
3475 .eraseblocks = { {4 * 1024, 64} },
3476 .block_erase = spi_block_erase_d7,
3477 }, {
3478 .eraseblocks = { {64 * 1024, 4} },
3479 .block_erase = spi_block_erase_d8,
3480 }, {
3481 .eraseblocks = { {256 * 1024, 1} },
3482 .block_erase = spi_block_erase_c7,
3483 }
3484 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003485 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003486 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003487 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003488 },
3489
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003490 {
3491 .vendor = "PMC",
3492 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003493 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003494 .manufacture_id = PMC_ID,
3495 .model_id = PMC_25LV040,
3496 .total_size = 512,
3497 .page_size = 256,
3498 .tested = TEST_UNTESTED,
3499 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003500 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003501 .block_erasers =
3502 {
3503 {
3504 .eraseblocks = { {4 * 1024, 128} },
3505 .block_erase = spi_block_erase_d7,
3506 }, {
3507 .eraseblocks = { {64 * 1024, 8} },
3508 .block_erase = spi_block_erase_d8,
3509 }, {
3510 .eraseblocks = { {512 * 1024, 1} },
3511 .block_erase = spi_block_erase_c7,
3512 }
3513 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003514 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003515 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003516 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003517 },
3518
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003519 {
3520 .vendor = "PMC",
3521 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003522 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003523 .manufacture_id = PMC_ID,
3524 .model_id = PMC_25LV080B,
3525 .total_size = 1024,
3526 .page_size = 256,
3527 .tested = TEST_UNTESTED,
3528 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003529 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003530 .block_erasers =
3531 {
3532 {
3533 .eraseblocks = { {4 * 1024, 256} },
3534 .block_erase = spi_block_erase_d7,
3535 }, {
3536 .eraseblocks = { {4 * 1024, 256} },
3537 .block_erase = spi_block_erase_20,
3538 }, {
3539 .eraseblocks = { {64 * 1024, 16} },
3540 .block_erase = spi_block_erase_d8,
3541 }, {
3542 .eraseblocks = { {1024 * 1024, 1} },
3543 .block_erase = spi_block_erase_60,
3544 }, {
3545 .eraseblocks = { {1024 * 1024, 1} },
3546 .block_erase = spi_block_erase_c7,
3547 }
3548 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003549 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003550 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003551 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003552 },
3553
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003554 {
3555 .vendor = "PMC",
3556 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003557 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003558 .manufacture_id = PMC_ID,
3559 .model_id = PMC_25LV512,
3560 .total_size = 64,
3561 .page_size = 256,
3562 .tested = TEST_UNTESTED,
3563 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003564 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003565 .block_erasers =
3566 {
3567 {
3568 .eraseblocks = { {4 * 1024, 16} },
3569 .block_erase = spi_block_erase_d7,
3570 }, {
3571 .eraseblocks = { {32 * 1024, 2} },
3572 .block_erase = spi_block_erase_d8,
3573 }, {
3574 .eraseblocks = { {64 * 1024, 1} },
3575 .block_erase = spi_block_erase_c7,
3576 }
3577 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003578 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003579 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003580 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003581 },
3582
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003583 {
3584 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003585 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003586 .bustype = CHIP_BUSTYPE_PARALLEL,
3587 .manufacture_id = PMC_ID_NOPREFIX,
3588 .model_id = PMC_29F002T,
3589 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003590 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003591 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3592 .tested = TEST_UNTESTED,
3593 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003594 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003595 .block_erasers =
3596 {
3597 {
3598 .eraseblocks = {
3599 {128 * 1024, 1},
3600 {96 * 1024, 1},
3601 {8 * 1024, 2},
3602 {16 * 1024, 1},
3603 },
Sean Nelson35727f72010-01-28 23:55:12 +00003604 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003605 }, {
3606 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003607 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003608 },
3609 },
Sean Nelson35727f72010-01-28 23:55:12 +00003610 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003611 .read = read_memmapped,
3612 },
3613
3614 {
3615 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003616 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003617 .bustype = CHIP_BUSTYPE_PARALLEL,
3618 .manufacture_id = PMC_ID_NOPREFIX,
3619 .model_id = PMC_29F002B,
3620 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003621 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003622 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003623 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003624 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003625 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003626 .block_erasers =
3627 {
3628 {
3629 .eraseblocks = {
3630 {16 * 1024, 1},
3631 {8 * 1024, 2},
3632 {96 * 1024, 1},
3633 {128 * 1024, 1},
3634 },
Sean Nelson35727f72010-01-28 23:55:12 +00003635 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003636 }, {
3637 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003638 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003639 },
3640 },
Sean Nelson35727f72010-01-28 23:55:12 +00003641 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003642 .read = read_memmapped,
3643 },
3644
3645 {
3646 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003647 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003648 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003649 .manufacture_id = PMC_ID_NOPREFIX,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003650 .model_id = PMC_39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003651 .total_size = 128,
3652 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003653 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00003654 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003655 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003656 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003657 .block_erasers =
3658 {
3659 {
3660 .eraseblocks = { {4 * 1024, 32} },
3661 .block_erase = erase_sector_jedec,
3662 }, {
3663 .eraseblocks = { {64 * 1024, 2} },
3664 .block_erase = erase_block_jedec,
3665 }, {
3666 .eraseblocks = { {128 * 1024, 1} },
3667 .block_erase = erase_chip_block_jedec,
3668 }
3669 },
Sean Nelson35727f72010-01-28 23:55:12 +00003670 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003671 .read = read_memmapped,
3672 },
3673
3674 {
3675 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003676 .name = "Pm39LV020",
3677 .bustype = CHIP_BUSTYPE_PARALLEL,
3678 .manufacture_id = PMC_ID_NOPREFIX,
3679 .model_id = PMC_39LV020,
3680 .total_size = 256,
3681 .page_size = 4096,
3682 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3683 .tested = TEST_UNTESTED,
3684 .probe = probe_jedec,
3685 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3686 .block_erasers =
3687 {
3688 {
3689 .eraseblocks = { {4 * 1024, 64} },
3690 .block_erase = erase_sector_jedec,
3691 }, {
3692 .eraseblocks = { {64 * 1024, 4} },
3693 .block_erase = erase_block_jedec,
3694 }, {
3695 .eraseblocks = { {256 * 1024, 1} },
3696 .block_erase = erase_chip_block_jedec,
3697 }
3698 },
3699 .write = write_jedec_1,
3700 .read = read_memmapped,
3701 },
3702
3703 {
3704 .vendor = "PMC",
3705 .name = "Pm39LV040",
3706 .bustype = CHIP_BUSTYPE_PARALLEL,
3707 .manufacture_id = PMC_ID_NOPREFIX,
3708 .model_id = PMC_39LV040,
3709 .total_size = 512,
3710 .page_size = 4096,
3711 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3712 .tested = TEST_UNTESTED,
3713 .probe = probe_jedec,
3714 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3715 .block_erasers =
3716 {
3717 {
3718 .eraseblocks = { {4 * 1024, 128} },
3719 .block_erase = erase_sector_jedec,
3720 }, {
3721 .eraseblocks = { {64 * 1024, 8} },
3722 .block_erase = erase_block_jedec,
3723 }, {
3724 .eraseblocks = { {512 * 1024, 1} },
3725 .block_erase = erase_chip_block_jedec,
3726 }
3727 },
3728 .write = write_jedec_1,
3729 .read = read_memmapped,
3730 },
3731
3732 {
3733 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003734 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003735 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003736 .manufacture_id = PMC_ID_NOPREFIX,
3737 .model_id = PMC_49FL002,
3738 .total_size = 256,
3739 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003740 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00003741 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003742 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003743 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003744 .block_erasers =
3745 {
3746 {
3747 .eraseblocks = { {4 * 1024, 64} },
3748 .block_erase = erase_sector_jedec,
3749 }, {
3750 .eraseblocks = { {16 * 1024, 16} },
3751 .block_erase = erase_block_jedec,
3752 }, {
3753 .eraseblocks = { {256 * 1024, 1} },
3754 .block_erase = erase_chip_block_jedec,
3755 }
3756 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003757 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003758 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003759 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003760 },
3761
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003762 {
3763 .vendor = "PMC",
3764 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003765 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003766 .manufacture_id = PMC_ID_NOPREFIX,
3767 .model_id = PMC_49FL004,
3768 .total_size = 512,
3769 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003770 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00003771 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003772 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003773 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003774 .block_erasers =
3775 {
3776 {
3777 .eraseblocks = { {4 * 1024, 128} },
3778 .block_erase = erase_sector_jedec,
3779 }, {
3780 .eraseblocks = { {64 * 1024, 8} },
3781 .block_erase = erase_block_jedec,
3782 }, {
3783 .eraseblocks = { {512 * 1024, 1} },
3784 .block_erase = erase_chip_block_jedec,
3785 }
3786 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003787 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003788 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003789 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003790 },
3791
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003792 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003793 .vendor = "Sanyo",
3794 .name = "LF25FW203A",
3795 .bustype = CHIP_BUSTYPE_SPI,
3796 .manufacture_id = SANYO_ID,
3797 .model_id = SANYO_LE25FW203A,
3798 .total_size = 2048,
3799 .page_size = 256,
3800 .tested = TEST_UNTESTED,
3801 .probe = probe_spi_rdid,
3802 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003803 .block_erasers =
3804 {
3805 {
3806 .eraseblocks = { {64 * 1024, 32} },
3807 .block_erase = spi_block_erase_d8,
3808 }, {
3809 .eraseblocks = { {2 * 1024 * 1024, 1} },
3810 .block_erase = spi_block_erase_c7,
3811 }
3812 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003813 .unlock = spi_disable_blockprotect,
Sean Nelsond70b09c2009-11-24 02:11:08 +00003814 .write = spi_chip_write_256,
3815 .read = spi_chip_read,
3816 },
3817
3818 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003819 .vendor = "Sharp",
3820 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003821 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003822 .manufacture_id = SHARP_ID,
3823 .model_id = SHARP_LHF00L04,
3824 .total_size = 1024,
3825 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003826 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003827 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003828 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003829 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003830 .block_erasers =
3831 {
3832 {
3833 .eraseblocks = {
3834 {64 * 1024, 15},
3835 {8 * 1024, 8}
3836 },
Sean Nelson28accc22010-03-19 18:47:06 +00003837 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003838 }, {
3839 .eraseblocks = {
3840 {1024 * 1024, 1}
3841 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003842 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003843 },
3844 },
Sean Nelson28accc22010-03-19 18:47:06 +00003845 .unlock = unlock_82802ab,
3846 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003847 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003848 },
3849
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003850 {
3851 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003852 .name = "S25FL008A",
3853 .bustype = CHIP_BUSTYPE_SPI,
3854 .manufacture_id = SPANSION_ID,
3855 .model_id = SPANSION_S25FL008A,
3856 .total_size = 1024,
3857 .page_size = 256,
3858 .tested = TEST_OK_PREW,
3859 .probe = probe_spi_rdid,
3860 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003861 .block_erasers =
3862 {
3863 {
3864 .eraseblocks = { {64 * 1024, 16} },
3865 .block_erase = spi_block_erase_d8,
3866 }, {
3867 .eraseblocks = { {1024 * 1024, 1} },
3868 .block_erase = spi_block_erase_c7,
3869 }
3870 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003871 .unlock = spi_disable_blockprotect,
Michael Karcher23ff4602010-01-12 23:29:30 +00003872 .write = spi_chip_write_256,
3873 .read = spi_chip_read,
3874 },
3875
3876 {
3877 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003878 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003879 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003880 .manufacture_id = SPANSION_ID,
3881 .model_id = SPANSION_S25FL016A,
3882 .total_size = 2048,
3883 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003884 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003885 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003886 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003887 .block_erasers =
3888 {
3889 {
3890 .eraseblocks = { {64 * 1024, 32} },
3891 .block_erase = spi_block_erase_d8,
3892 }, {
3893 .eraseblocks = { {2 * 1024 * 1024, 1} },
3894 .block_erase = spi_block_erase_c7,
3895 }
3896 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003897 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003898 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003899 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003900 },
3901
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003902 {
3903 .vendor = "SST",
3904 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003905 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003906 .manufacture_id = SST_ID,
3907 .model_id = SST_25VF016B,
3908 .total_size = 2048,
3909 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003910 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003911 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003912 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003913 .block_erasers =
3914 {
3915 {
3916 .eraseblocks = { {4 * 1024, 512} },
3917 .block_erase = spi_block_erase_20,
3918 }, {
3919 .eraseblocks = { {32 * 1024, 64} },
3920 .block_erase = spi_block_erase_52,
3921 }, {
3922 .eraseblocks = { {64 * 1024, 32} },
3923 .block_erase = spi_block_erase_d8,
3924 }, {
3925 .eraseblocks = { {2 * 1024 * 1024, 1} },
3926 .block_erase = spi_block_erase_60,
3927 }, {
3928 .eraseblocks = { {2 * 1024 * 1024, 1} },
3929 .block_erase = spi_block_erase_c7,
3930 },
3931 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003932 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003933 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003934 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003935 },
3936
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003937 {
3938 .vendor = "SST",
3939 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003940 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003941 .manufacture_id = SST_ID,
3942 .model_id = SST_25VF032B,
3943 .total_size = 4096,
3944 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003945 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003946 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003947 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003948 .block_erasers =
3949 {
3950 {
3951 .eraseblocks = { {4 * 1024, 1024} },
3952 .block_erase = spi_block_erase_20,
3953 }, {
3954 .eraseblocks = { {32 * 1024, 128} },
3955 .block_erase = spi_block_erase_52,
3956 }, {
3957 .eraseblocks = { {64 * 1024, 64} },
3958 .block_erase = spi_block_erase_d8,
3959 }, {
3960 .eraseblocks = { {4 * 1024 * 1024, 1} },
3961 .block_erase = spi_block_erase_60,
3962 }, {
3963 .eraseblocks = { {4 * 1024 * 1024, 1} },
3964 .block_erase = spi_block_erase_c7,
3965 },
3966 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003967 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003968 .write = spi_chip_write_1,
3969 .read = spi_chip_read,
3970 },
3971
3972 {
3973 .vendor = "SST",
Ed Swierk86f4e6d2010-07-21 15:02:22 +00003974 .name = "SST25VF064C",
3975 .bustype = CHIP_BUSTYPE_SPI,
3976 .manufacture_id = SST_ID,
3977 .model_id = SST_25VF064C,
3978 .total_size = 8192,
3979 .page_size = 256,
3980 .tested = TEST_OK_PREW,
3981 .probe = probe_spi_rdid,
3982 .probe_timing = TIMING_ZERO,
3983 .block_erasers =
3984 {
3985 {
3986 .eraseblocks = { {4 * 1024, 2048} },
3987 .block_erase = spi_block_erase_20,
3988 }, {
3989 .eraseblocks = { {32 * 1024, 256} },
3990 .block_erase = spi_block_erase_52,
3991 }, {
3992 .eraseblocks = { {64 * 1024, 128} },
3993 .block_erase = spi_block_erase_d8,
3994 }, {
3995 .eraseblocks = { {8 * 1024 * 1024, 1} },
3996 .block_erase = spi_block_erase_60,
3997 }, {
3998 .eraseblocks = { {8 * 1024 * 1024, 1} },
3999 .block_erase = spi_block_erase_c7,
4000 },
4001 },
4002 .unlock = spi_disable_blockprotect,
4003 .write = spi_chip_write_1,
4004 .read = spi_chip_read,
4005 },
4006
4007 {
4008 .vendor = "SST",
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004009 .name = "SST25VF040.REMS",
4010 .bustype = CHIP_BUSTYPE_SPI,
4011 .manufacture_id = SST_ID,
4012 .model_id = SST_25VF040_REMS,
4013 .total_size = 512,
4014 .page_size = 256,
4015 .tested = TEST_OK_PR,
4016 .probe = probe_spi_rems,
4017 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004018 .block_erasers =
4019 {
4020 {
4021 .eraseblocks = { {4 * 1024, 128} },
4022 .block_erase = spi_block_erase_20,
4023 }, {
4024 .eraseblocks = { {32 * 1024, 16} },
4025 .block_erase = spi_block_erase_52,
4026 }, {
4027 .eraseblocks = { {512 * 1024, 1} },
4028 .block_erase = spi_block_erase_60,
4029 },
4030 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004031 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004032 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004033 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004034 },
4035
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004036 {
4037 .vendor = "SST",
4038 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004039 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004040 .manufacture_id = SST_ID,
4041 .model_id = SST_25VF040B,
4042 .total_size = 512,
4043 .page_size = 256,
4044 .tested = TEST_UNTESTED,
4045 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004046 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004047 .block_erasers =
4048 {
4049 {
4050 .eraseblocks = { {4 * 1024, 128} },
4051 .block_erase = spi_block_erase_20,
4052 }, {
4053 .eraseblocks = { {32 * 1024, 16} },
4054 .block_erase = spi_block_erase_52,
4055 }, {
4056 .eraseblocks = { {64 * 1024, 8} },
4057 .block_erase = spi_block_erase_d8,
4058 }, {
4059 .eraseblocks = { {512 * 1024, 1} },
4060 .block_erase = spi_block_erase_60,
4061 }, {
4062 .eraseblocks = { {512 * 1024, 1} },
4063 .block_erase = spi_block_erase_c7,
4064 },
4065 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004066 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004067 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00004068 .read = spi_chip_read,
4069 },
4070
4071 {
4072 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004073 .name = "SST25LF040A.RES",
4074 .bustype = CHIP_BUSTYPE_SPI,
4075 .manufacture_id = SST_ID,
4076 .model_id = SST_25VF040_REMS,
4077 .total_size = 512,
4078 .page_size = 256,
4079 .tested = TEST_OK_PROBE,
4080 .probe = probe_spi_res2,
4081 .probe_timing = TIMING_ZERO,
4082 .block_erasers =
4083 {
4084 {
4085 .eraseblocks = { {4 * 1024, 128} },
4086 .block_erase = spi_block_erase_20,
4087 }, {
4088 .eraseblocks = { {32 * 1024, 16} },
4089 .block_erase = spi_block_erase_52,
4090 }, {
4091 .eraseblocks = { {512 * 1024, 1} },
4092 .block_erase = spi_block_erase_60,
4093 },
4094 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004095 .unlock = spi_disable_blockprotect,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004096 .write = spi_chip_write_1,
4097 .read = spi_chip_read,
4098 },
4099
4100 {
4101 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00004102 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004103 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004104 .manufacture_id = SST_ID,
4105 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00004106 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004107 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00004108 .tested = TEST_OK_PR,
4109 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004110 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004111 .block_erasers =
4112 {
4113 {
4114 .eraseblocks = { {4 * 1024, 128} },
4115 .block_erase = spi_block_erase_20,
4116 }, {
4117 .eraseblocks = { {32 * 1024, 16} },
4118 .block_erase = spi_block_erase_52,
4119 }, {
4120 .eraseblocks = { {64 * 1024, 8} },
4121 .block_erase = spi_block_erase_d8,
4122 }, {
4123 .eraseblocks = { {512 * 1024, 1} },
4124 .block_erase = spi_block_erase_60,
4125 }, {
4126 .eraseblocks = { {512 * 1024, 1} },
4127 .block_erase = spi_block_erase_c7,
4128 },
4129 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004130 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004131 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00004132 .read = spi_chip_read,
4133 },
4134
4135 {
4136 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004137 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004138 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004139 .manufacture_id = SST_ID,
4140 .model_id = SST_25VF080B,
4141 .total_size = 1024,
4142 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004143 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004144 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004145 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004146 .block_erasers =
4147 {
4148 {
4149 .eraseblocks = { {4 * 1024, 256} },
4150 .block_erase = spi_block_erase_20,
4151 }, {
4152 .eraseblocks = { {32 * 1024, 32} },
4153 .block_erase = spi_block_erase_52,
4154 }, {
4155 .eraseblocks = { {64 * 1024, 16} },
4156 .block_erase = spi_block_erase_d8,
4157 }, {
4158 .eraseblocks = { {1024 * 1024, 1} },
4159 .block_erase = spi_block_erase_60,
4160 }, {
4161 .eraseblocks = { {1024 * 1024, 1} },
4162 .block_erase = spi_block_erase_c7,
4163 },
4164 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004165 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004166 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004167 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004168 },
4169
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004170 {
4171 .vendor = "SST",
4172 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004173 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004174 .manufacture_id = SST_ID,
4175 .model_id = SST_28SF040,
4176 .total_size = 512,
4177 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00004178 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004179 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004180 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004181 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004182 .block_erasers =
4183 {
4184 {
4185 .eraseblocks = { {128, 4096} },
4186 .block_erase = erase_sector_28sf040,
4187 }, {
4188 .eraseblocks = { {512 * 1024, 1} },
4189 .block_erase = erase_chip_28sf040,
4190 }
4191 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004192 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004193 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004194 },
4195
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004196 {
4197 .vendor = "SST",
4198 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004199 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004200 .manufacture_id = SST_ID,
4201 .model_id = SST_29EE010,
4202 .total_size = 128,
4203 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004204 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004205 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004206 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004207 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004208 .block_erasers =
4209 {
4210 {
4211 .eraseblocks = { {128 * 1024, 1} },
4212 .block_erase = erase_chip_block_jedec,
4213 }
4214 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004215 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004216 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004217 },
4218
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004219 {
4220 .vendor = "SST",
4221 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004222 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004223 .manufacture_id = SST_ID,
4224 .model_id = SST_29LE010,
4225 .total_size = 128,
4226 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004227 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004228 .tested = TEST_UNTESTED,
4229 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004230 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004231 .block_erasers =
4232 {
4233 {
4234 .eraseblocks = { {128 * 1024, 1} },
4235 .block_erase = erase_chip_block_jedec,
4236 }
4237 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004238 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004239 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004240 },
4241
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004242 {
4243 .vendor = "SST",
4244 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004245 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004246 .manufacture_id = SST_ID,
4247 .model_id = SST_29EE020A,
4248 .total_size = 256,
4249 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004250 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004251 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004252 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004253 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004254 .block_erasers =
4255 {
4256 {
4257 .eraseblocks = { {256 * 1024, 1} },
4258 .block_erase = erase_chip_block_jedec,
4259 }
4260 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004261 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004262 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004263 },
4264
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004265 {
4266 .vendor = "SST",
4267 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004268 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004269 .manufacture_id = SST_ID,
4270 .model_id = SST_29LE020,
4271 .total_size = 256,
4272 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004273 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00004274 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004275 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004276 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004277 .block_erasers =
4278 {
4279 {
4280 .eraseblocks = { {256 * 1024, 1} },
4281 .block_erase = erase_chip_block_jedec,
4282 }
4283 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004284 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004285 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004286 },
4287
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004288 {
4289 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00004290 .name = "SST39SF512",
4291 .bustype = CHIP_BUSTYPE_PARALLEL,
4292 .manufacture_id = SST_ID,
4293 .model_id = SST_39SF512,
4294 .total_size = 64,
4295 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004296 .feature_bits = FEATURE_EITHER_RESET,
4297 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004298 .probe = probe_jedec,
4299 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00004300 .block_erasers =
4301 {
4302 {
4303 .eraseblocks = { {4 * 1024, 16} },
4304 .block_erase = erase_sector_jedec,
4305 }, {
4306 .eraseblocks = { {64 * 1024, 1} },
4307 .block_erase = erase_chip_block_jedec,
4308 }
4309 },
Sean Nelson35727f72010-01-28 23:55:12 +00004310 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004311 .read = read_memmapped,
4312 },
4313
4314 {
4315 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004316 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004317 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004318 .manufacture_id = SST_ID,
4319 .model_id = SST_39SF010,
4320 .total_size = 128,
4321 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004322 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004323 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004324 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004325 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004326 .block_erasers =
4327 {
4328 {
4329 .eraseblocks = { {4 * 1024, 32} },
4330 .block_erase = erase_sector_jedec,
4331 }, {
4332 .eraseblocks = { {128 * 1024, 1} },
4333 .block_erase = erase_chip_block_jedec,
4334 }
4335 },
Sean Nelson35727f72010-01-28 23:55:12 +00004336 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004337 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004338 },
4339
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004340 {
4341 .vendor = "SST",
4342 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004343 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004344 .manufacture_id = SST_ID,
4345 .model_id = SST_39SF020,
4346 .total_size = 256,
4347 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004348 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004349 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004350 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004351 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004352 .block_erasers =
4353 {
4354 {
4355 .eraseblocks = { {4 * 1024, 64} },
4356 .block_erase = erase_sector_jedec,
4357 }, {
4358 .eraseblocks = { {256 * 1024, 1} },
4359 .block_erase = erase_chip_block_jedec,
4360 }
4361 },
Sean Nelson35727f72010-01-28 23:55:12 +00004362 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004363 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004364 },
4365
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004366 {
4367 .vendor = "SST",
4368 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004369 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004370 .manufacture_id = SST_ID,
4371 .model_id = SST_39SF040,
4372 .total_size = 512,
4373 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004374 .feature_bits = FEATURE_EITHER_RESET,
4375 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004376 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004377 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004378 .block_erasers =
4379 {
4380 {
4381 .eraseblocks = { {4 * 1024, 128} },
4382 .block_erase = erase_sector_jedec,
4383 }, {
4384 .eraseblocks = { {512 * 1024, 1} },
4385 .block_erase = erase_chip_block_jedec,
4386 }
4387 },
Sean Nelson35727f72010-01-28 23:55:12 +00004388 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004389 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004390 },
4391
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004392 {
4393 .vendor = "SST",
4394 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00004395 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004396 .manufacture_id = SST_ID,
4397 .model_id = SST_39VF512,
4398 .total_size = 64,
4399 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004400 .feature_bits = FEATURE_EITHER_RESET,
4401 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004402 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004403 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00004404 .block_erasers =
4405 {
4406 {
4407 .eraseblocks = { {4 * 1024, 16} },
4408 .block_erase = erase_sector_jedec,
4409 }, {
4410 .eraseblocks = { {64 * 1024, 1} },
4411 .block_erase = erase_chip_block_jedec,
4412 }
4413 },
Sean Nelson35727f72010-01-28 23:55:12 +00004414 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004415 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004416 },
4417
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004418 {
4419 .vendor = "SST",
4420 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004421 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004422 .manufacture_id = SST_ID,
4423 .model_id = SST_39VF010,
4424 .total_size = 128,
4425 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004426 .feature_bits = FEATURE_EITHER_RESET,
Guenter Knauf2bd007a2010-06-24 11:51:12 +00004427 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004428 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004429 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004430 .block_erasers =
4431 {
4432 {
4433 .eraseblocks = { {4 * 1024, 32} },
4434 .block_erase = erase_sector_jedec,
4435 }, {
4436 .eraseblocks = { {128 * 1024, 1} },
4437 .block_erase = erase_chip_block_jedec,
4438 }
4439 },
Sean Nelson35727f72010-01-28 23:55:12 +00004440 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004441 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004442 },
4443
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004444 {
4445 .vendor = "SST",
4446 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004447 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004448 .manufacture_id = SST_ID,
4449 .model_id = SST_39VF020,
4450 .total_size = 256,
4451 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004452 .feature_bits = FEATURE_EITHER_RESET,
4453 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004454 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004455 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004456 .block_erasers =
4457 {
4458 {
4459 .eraseblocks = { {4 * 1024, 64} },
4460 .block_erase = erase_sector_jedec,
4461 }, {
4462 .eraseblocks = { {256 * 1024, 1} },
4463 .block_erase = erase_chip_block_jedec,
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 = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004473 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004474 .manufacture_id = SST_ID,
4475 .model_id = SST_39VF040,
4476 .total_size = 512,
4477 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004478 .feature_bits = FEATURE_EITHER_RESET,
4479 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004480 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004481 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004482 .block_erasers =
4483 {
4484 {
4485 .eraseblocks = { {4 * 1024, 128} },
4486 .block_erase = erase_sector_jedec,
4487 }, {
4488 .eraseblocks = { {512 * 1024, 1} },
4489 .block_erase = erase_chip_block_jedec,
4490 }
4491 },
Sean Nelson35727f72010-01-28 23:55:12 +00004492 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004493 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004494 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004495
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004496 {
4497 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004498 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004499 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004500 .manufacture_id = SST_ID,
4501 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004502 .total_size = 1024,
4503 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004504 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004505 .tested = TEST_UNTESTED,
4506 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004507 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004508 .block_erasers =
4509 {
4510 {
4511 .eraseblocks = { {4 * 1024, 256} },
4512 .block_erase = erase_sector_jedec,
4513 }, {
4514 .eraseblocks = { {64 * 1024, 16} },
4515 .block_erase = erase_block_jedec,
4516 }, {
4517 .eraseblocks = { {1024 * 1024, 1} },
4518 .block_erase = erase_chip_block_jedec,
4519 }
4520 },
Sean Nelson35727f72010-01-28 23:55:12 +00004521 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004522 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004523 },
4524
4525 {
4526 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004527 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004528 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004529 .manufacture_id = SST_ID,
4530 .model_id = SST_49LF002A,
4531 .total_size = 256,
4532 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004533 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004534 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004535 .probe = probe_jedec,
4536 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004537 .block_erasers =
4538 {
4539 {
4540 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004541 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004542 }, {
4543 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004544 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004545 }, {
4546 .eraseblocks = { {256 * 1024, 1} },
4547 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4548 }
4549 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004550 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004551 .unlock = unlock_sst_fwhub,
4552 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004553 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004554 },
4555
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004556 {
4557 .vendor = "SST",
4558 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004559 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004560 .manufacture_id = SST_ID,
4561 .model_id = SST_49LF003A,
4562 .total_size = 384,
4563 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004564 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004565 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004566 .probe = probe_jedec,
4567 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004568 .block_erasers =
4569 {
4570 {
4571 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004572 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004573 }, {
4574 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004575 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004576 }, {
4577 .eraseblocks = { {384 * 1024, 1} },
4578 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4579 }
4580 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004581 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004582 .unlock = unlock_sst_fwhub,
4583 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004584 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004585 },
4586
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004587 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004588 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4589 * and is only honored for 64k block erase, but not 4k sector erase.
4590 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004591 .vendor = "SST",
4592 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004593 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004594 .manufacture_id = SST_ID,
4595 .model_id = SST_49LF004A,
4596 .total_size = 512,
4597 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004598 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004599 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004600 .probe = probe_jedec,
4601 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004602 .block_erasers =
4603 {
4604 {
4605 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004606 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004607 }, {
4608 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004609 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004610 }, {
4611 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004612 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004613 },
4614 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004615 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004616 .unlock = unlock_sst_fwhub,
4617 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004618 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004619 },
4620
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004621 {
4622 .vendor = "SST",
4623 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004624 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004625 .manufacture_id = SST_ID,
4626 .model_id = SST_49LF004C,
4627 .total_size = 512,
4628 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004629 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004630 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004631 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004632 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004633 .block_erasers =
4634 {
4635 {
4636 .eraseblocks = { {4 * 1024, 128} },
4637 .block_erase = erase_sector_49lfxxxc,
4638 }, {
4639 .eraseblocks = {
4640 {64 * 1024, 7},
4641 {32 * 1024, 1},
4642 {8 * 1024, 2},
4643 {16 * 1024, 1},
4644 },
Sean Nelson69e58112010-03-23 17:10:28 +00004645 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004646 }
4647 },
Sean Nelson69e58112010-03-23 17:10:28 +00004648 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004649 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004650 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004651 },
4652
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004653 {
4654 .vendor = "SST",
4655 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004656 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004657 .manufacture_id = SST_ID,
4658 .model_id = SST_49LF008A,
4659 .total_size = 1024,
4660 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004661 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004662 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004663 .probe = probe_jedec,
4664 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004665 .block_erasers =
4666 {
4667 {
4668 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004669 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004670 }, {
4671 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004672 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004673 }, {
4674 .eraseblocks = { {1024 * 1024, 1} },
4675 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4676 }
4677 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004678 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004679 .unlock = unlock_sst_fwhub,
4680 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004681 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004682 },
4683
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004684 {
4685 .vendor = "SST",
4686 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004687 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004688 .manufacture_id = SST_ID,
4689 .model_id = SST_49LF008C,
4690 .total_size = 1024,
4691 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004692 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004693 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004694 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004695 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004696 .block_erasers =
4697 {
4698 {
4699 .eraseblocks = { {4 * 1024, 256} },
4700 .block_erase = erase_sector_49lfxxxc,
4701 }, {
4702 .eraseblocks = {
4703 {64 * 1024, 15},
4704 {32 * 1024, 1},
4705 {8 * 1024, 2},
4706 {16 * 1024, 1},
4707 },
Sean Nelson69e58112010-03-23 17:10:28 +00004708 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004709 }
4710 },
Sean Nelson69e58112010-03-23 17:10:28 +00004711 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004712 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004713 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004714 },
4715
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004716 {
4717 .vendor = "SST",
4718 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004719 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004720 .manufacture_id = SST_ID,
4721 .model_id = SST_49LF016C,
4722 .total_size = 2048,
4723 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004724 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004725 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004726 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004727 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004728 .block_erasers =
4729 {
4730 {
4731 .eraseblocks = { {4 * 1024, 512} },
4732 .block_erase = erase_sector_49lfxxxc,
4733 }, {
4734 .eraseblocks = {
4735 {64 * 1024, 31},
4736 {32 * 1024, 1},
4737 {8 * 1024, 2},
4738 {16 * 1024, 1},
4739 },
Sean Nelson69e58112010-03-23 17:10:28 +00004740 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004741 }
4742 },
Sean Nelson69e58112010-03-23 17:10:28 +00004743 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004744 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004745 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004746 },
4747
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004748 {
4749 .vendor = "SST",
4750 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004751 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004752 .manufacture_id = SST_ID,
4753 .model_id = SST_49LF020,
4754 .total_size = 256,
4755 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004756 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004757 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004758 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004759 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004760 .block_erasers =
4761 {
4762 {
4763 .eraseblocks = { {4 * 1024, 64} },
4764 .block_erase = erase_sector_jedec,
4765 }, {
4766 .eraseblocks = { {16 * 1024, 16} },
4767 .block_erase = erase_block_jedec,
4768 }, {
4769 .eraseblocks = { {256 * 1024, 1} },
4770 .block_erase = NULL,
4771 }
4772 },
Sean Nelson35727f72010-01-28 23:55:12 +00004773 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004774 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004775 },
4776
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004777 {
4778 .vendor = "SST",
4779 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004780 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004781 .manufacture_id = SST_ID,
4782 .model_id = SST_49LF020A,
4783 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004784 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004785 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004786 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004787 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004788 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004789 .block_erasers =
4790 {
4791 {
4792 .eraseblocks = { {4 * 1024, 64} },
4793 .block_erase = erase_sector_jedec,
4794 }, {
4795 .eraseblocks = { {16 * 1024, 16} },
4796 .block_erase = erase_block_jedec,
4797 }, {
4798 .eraseblocks = { {256 * 1024, 1} },
4799 .block_erase = NULL,
4800 }
4801 },
Sean Nelson35727f72010-01-28 23:55:12 +00004802 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004803 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004804 },
4805
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004806 {
4807 .vendor = "SST",
4808 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004809 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004810 .manufacture_id = SST_ID,
4811 .model_id = SST_49LF040,
4812 .total_size = 512,
4813 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004814 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004815 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004816 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004817 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004818 .block_erasers =
4819 {
4820 {
4821 .eraseblocks = { {4 * 1024, 128} },
4822 .block_erase = erase_sector_jedec,
4823 }, {
4824 .eraseblocks = { {64 * 1024, 8} },
4825 .block_erase = erase_block_jedec,
4826 }, {
4827 .eraseblocks = { {512 * 1024, 1} },
4828 .block_erase = NULL,
4829 }
4830 },
Sean Nelson35727f72010-01-28 23:55:12 +00004831 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004832 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004833 },
4834
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004835 {
4836 .vendor = "SST",
4837 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004838 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004839 .manufacture_id = SST_ID,
4840 .model_id = SST_49LF040B,
4841 .total_size = 512,
4842 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004843 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004844 .tested = TEST_OK_PR,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004845 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004846 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004847 .block_erasers =
4848 {
4849 {
4850 .eraseblocks = { {4 * 1024, 128} },
4851 .block_erase = erase_sector_jedec,
4852 }, {
4853 .eraseblocks = { {64 * 1024, 8} },
4854 .block_erase = erase_block_jedec,
4855 }, {
4856 .eraseblocks = { {512 * 1024, 1} },
4857 .block_erase = NULL,
4858 }
4859 },
Sean Nelson35727f72010-01-28 23:55:12 +00004860 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004861 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004862 },
4863
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004864 {
4865 .vendor = "SST",
4866 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004867 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004868 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004869 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004870 .total_size = 1024,
4871 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004872 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004873 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004874 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004875 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004876 .block_erasers =
4877 {
4878 {
4879 .eraseblocks = { {4 * 1024, 256} },
4880 .block_erase = erase_sector_jedec,
4881 }, {
4882 .eraseblocks = { {64 * 1024, 16} },
4883 .block_erase = erase_block_jedec,
4884 }, {
4885 .eraseblocks = { {1024 * 1024, 1} },
4886 .block_erase = NULL,
4887 }
4888 },
Sean Nelson35727f72010-01-28 23:55:12 +00004889 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004890 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004891 },
4892
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004893 {
4894 .vendor = "SST",
4895 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004896 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004897 .manufacture_id = SST_ID,
4898 .model_id = SST_49LF160C,
4899 .total_size = 2048,
4900 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004901 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004902 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004903 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004904 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004905 .block_erasers =
4906 {
4907 {
4908 .eraseblocks = { {4 * 1024, 512} },
4909 .block_erase = erase_sector_49lfxxxc,
4910 }, {
4911 .eraseblocks = {
4912 {64 * 1024, 31},
4913 {32 * 1024, 1},
4914 {8 * 1024, 2},
4915 {16 * 1024, 1},
4916 },
Sean Nelson69e58112010-03-23 17:10:28 +00004917 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004918 }
4919 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004920 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004921 .write = write_49lfxxxc,
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 {
4926 .vendor = "ST",
4927 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004928 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004929 .manufacture_id = ST_ID,
4930 .model_id = ST_M25P05A,
4931 .total_size = 64,
4932 .page_size = 256,
4933 .tested = TEST_UNTESTED,
4934 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004935 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004936 .block_erasers =
4937 {
4938 {
4939 .eraseblocks = { {32 * 1024, 2} },
4940 .block_erase = spi_block_erase_d8,
4941 }, {
4942 .eraseblocks = { {64 * 1024, 1} },
4943 .block_erase = spi_block_erase_c7,
4944 }
4945 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004946 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004947 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004948 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004949 },
4950
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004951 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4952 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004953 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004954 * only is successful if RDID does not work.
4955 */
4956 {
4957 .vendor = "ST",
4958 .name = "M25P05.RES",
4959 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004960 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004961 .model_id = ST_M25P05_RES,
4962 .total_size = 64,
4963 .page_size = 256,
4964 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004965 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004966 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004967 .block_erasers =
4968 {
4969 {
4970 .eraseblocks = { {32 * 1024, 2} },
4971 .block_erase = spi_block_erase_d8,
4972 }, {
4973 .eraseblocks = { {64 * 1024, 1} },
4974 .block_erase = spi_block_erase_c7,
4975 }
4976 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004977 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004978 .write = spi_chip_write_1, /* 128 */
4979 .read = spi_chip_read,
4980 },
4981
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004982 {
4983 .vendor = "ST",
4984 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004985 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004986 .manufacture_id = ST_ID,
4987 .model_id = ST_M25P10A,
4988 .total_size = 128,
4989 .page_size = 256,
4990 .tested = TEST_UNTESTED,
4991 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004992 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004993 .block_erasers =
4994 {
4995 {
4996 .eraseblocks = { {32 * 1024, 4} },
4997 .block_erase = spi_block_erase_d8,
4998 }, {
4999 .eraseblocks = { {128 * 1024, 1} },
5000 .block_erase = spi_block_erase_c7,
5001 }
5002 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005003 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005004 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005005 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005006 },
5007
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005008 /* The ST M25P10 has the same problem as the M25P05. */
5009 {
5010 .vendor = "ST",
5011 .name = "M25P10.RES",
5012 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005013 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005014 .model_id = ST_M25P10_RES,
5015 .total_size = 128,
5016 .page_size = 256,
5017 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005018 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005019 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005020 .block_erasers =
5021 {
5022 {
5023 .eraseblocks = { {32 * 1024, 4} },
5024 .block_erase = spi_block_erase_d8,
5025 }, {
5026 .eraseblocks = { {128 * 1024, 1} },
5027 .block_erase = spi_block_erase_c7,
5028 }
5029 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005030 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00005031 .write = spi_chip_write_1, /* 128 */
5032 .read = spi_chip_read,
5033 },
5034
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005035 {
5036 .vendor = "ST",
5037 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005038 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005039 .manufacture_id = ST_ID,
5040 .model_id = ST_M25P20,
5041 .total_size = 256,
5042 .page_size = 256,
5043 .tested = TEST_UNTESTED,
5044 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005045 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005046 .block_erasers =
5047 {
5048 {
5049 .eraseblocks = { {64 * 1024, 4} },
5050 .block_erase = spi_block_erase_d8,
5051 }, {
5052 .eraseblocks = { {256 * 1024, 1} },
5053 .block_erase = spi_block_erase_c7,
5054 }
5055 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005056 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005057 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005058 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005059 },
5060
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005061 {
5062 .vendor = "ST",
5063 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005064 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005065 .manufacture_id = ST_ID,
5066 .model_id = ST_M25P40,
5067 .total_size = 512,
5068 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005069 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005070 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005071 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005072 .block_erasers =
5073 {
5074 {
5075 .eraseblocks = { {64 * 1024, 8} },
5076 .block_erase = spi_block_erase_d8,
5077 }, {
5078 .eraseblocks = { {512 * 1024, 1} },
5079 .block_erase = spi_block_erase_c7,
5080 }
5081 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005082 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005083 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005084 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005085 },
5086
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005087 {
5088 .vendor = "ST",
5089 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005090 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005091 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005092 .model_id = ST_M25P40_RES,
5093 .total_size = 512,
5094 .page_size = 256,
5095 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005096 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005097 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005098 .block_erasers =
5099 {
5100 {
5101 .eraseblocks = { {64 * 1024, 8} },
5102 .block_erase = spi_block_erase_d8,
5103 }, {
5104 .eraseblocks = { {512 * 1024, 1} },
5105 .block_erase = spi_block_erase_c7,
5106 }
5107 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005108 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005109 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005110 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005111 },
5112
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005113 {
5114 .vendor = "ST",
5115 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005116 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005117 .manufacture_id = ST_ID,
5118 .model_id = ST_M25P80,
5119 .total_size = 1024,
5120 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005121 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005122 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005123 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005124 .block_erasers =
5125 {
5126 {
5127 .eraseblocks = { {64 * 1024, 16} },
5128 .block_erase = spi_block_erase_d8,
5129 }, {
5130 .eraseblocks = { {1024 * 1024, 1} },
5131 .block_erase = spi_block_erase_c7,
5132 }
5133 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005134 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005135 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005136 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005137 },
5138
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005139 {
5140 .vendor = "ST",
5141 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005142 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005143 .manufacture_id = ST_ID,
5144 .model_id = ST_M25P16,
5145 .total_size = 2048,
5146 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005147 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005148 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005149 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005150 .block_erasers =
5151 {
5152 {
5153 .eraseblocks = { {64 * 1024, 32} },
5154 .block_erase = spi_block_erase_d8,
5155 }, {
5156 .eraseblocks = { {2 * 1024 * 1024, 1} },
5157 .block_erase = spi_block_erase_c7,
5158 }
5159 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005160 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005161 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005162 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005163 },
5164
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005165 {
5166 .vendor = "ST",
5167 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005168 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005169 .manufacture_id = ST_ID,
5170 .model_id = ST_M25P32,
5171 .total_size = 4096,
5172 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005173 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005174 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005175 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005176 .block_erasers =
5177 {
5178 {
5179 .eraseblocks = { {64 * 1024, 64} },
5180 .block_erase = spi_block_erase_d8,
5181 }, {
5182 .eraseblocks = { {4 * 1024 * 1024, 1} },
5183 .block_erase = spi_block_erase_c7,
5184 }
5185 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005186 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005187 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005188 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005189 },
5190
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005191 {
5192 .vendor = "ST",
5193 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005194 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005195 .manufacture_id = ST_ID,
5196 .model_id = ST_M25P64,
5197 .total_size = 8192,
5198 .page_size = 256,
5199 .tested = TEST_UNTESTED,
5200 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005201 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005202 .block_erasers =
5203 {
5204 {
5205 .eraseblocks = { {64 * 1024, 128} },
5206 .block_erase = spi_block_erase_d8,
5207 }, {
5208 .eraseblocks = { {8 * 1024 * 1024, 1} },
5209 .block_erase = spi_block_erase_c7,
5210 }
5211 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005212 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005213 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005214 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005215 },
5216
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005217 {
5218 .vendor = "ST",
5219 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005220 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005221 .manufacture_id = ST_ID,
5222 .model_id = ST_M25P128,
5223 .total_size = 16384,
5224 .page_size = 256,
5225 .tested = TEST_UNTESTED,
5226 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005227 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005228 .block_erasers =
5229 {
5230 {
5231 .eraseblocks = { {256 * 1024, 64} },
5232 .block_erase = spi_block_erase_d8,
5233 }, {
5234 .eraseblocks = { {16 * 1024 * 1024, 1} },
5235 .block_erase = spi_block_erase_c7,
5236 }
5237 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005238 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005239 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005240 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005241 },
5242
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005243 {
5244 .vendor = "ST",
5245 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005246 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005247 .manufacture_id = ST_ID,
5248 .model_id = ST_M29F002B,
5249 .total_size = 256,
5250 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005251 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005252 .tested = TEST_UNTESTED,
5253 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005254 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005255 .block_erasers =
5256 {
5257 {
5258 .eraseblocks = {
5259 {16 * 1024, 1},
5260 {8 * 1024, 2},
5261 {32 * 1024, 1},
5262 {64 * 1024, 3},
5263 },
5264 .block_erase = erase_sector_jedec,
5265 }, {
5266 .eraseblocks = { {256 * 1024, 1} },
5267 .block_erase = erase_chip_block_jedec,
5268 }
5269 },
Sean Nelson35727f72010-01-28 23:55:12 +00005270 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005271 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005272 },
5273
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005274 {
5275 .vendor = "ST",
5276 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005277 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005278 .manufacture_id = ST_ID,
5279 .model_id = ST_M29F002T,
5280 .total_size = 256,
5281 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005282 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
5283 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005284 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005285 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005286 .block_erasers =
5287 {
5288 {
5289 .eraseblocks = {
5290 {64 * 1024, 3},
5291 {32 * 1024, 1},
5292 {8 * 1024, 2},
5293 {16 * 1024, 1},
5294 },
5295 .block_erase = erase_sector_jedec,
5296 }, {
5297 .eraseblocks = { {256 * 1024, 1} },
5298 .block_erase = erase_chip_block_jedec,
5299 }
5300 },
Sean Nelson35727f72010-01-28 23:55:12 +00005301 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005302 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005303 },
5304
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005305 {
5306 .vendor = "ST",
5307 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005308 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005309 .manufacture_id = ST_ID,
5310 .model_id = ST_M29F040B,
5311 .total_size = 512,
5312 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005313 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5314 .tested = TEST_UNTESTED,
5315 .probe = probe_jedec,
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005316 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005317 .block_erasers =
5318 {
5319 {
5320 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00005321 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005322 }, {
5323 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005324 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005325 }
5326 },
Sean Nelson35727f72010-01-28 23:55:12 +00005327 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005328 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005329 },
5330
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005331 {
Sean Nelson35727f72010-01-28 23:55:12 +00005332 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005333 .vendor = "ST",
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005334 .name = "M29F400BB",
5335 .bustype = CHIP_BUSTYPE_PARALLEL,
5336 .manufacture_id = ST_ID,
5337 .model_id = ST_M29F400BB,
5338 .total_size = 512,
5339 .page_size = 64 * 1024,
5340 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
5341 .tested = TEST_BAD_WRITE, /* Implicit eraseblock layout in write_m29f400bt is broken. */
5342 .probe = probe_m29f400bt,
5343 .probe_timing = TIMING_IGNORED, /* routine doesn't use probe_timing (m29f400bt.c) */
5344 .block_erasers =
5345 {
5346 {
5347 .eraseblocks = {
5348 {16 * 1024, 1},
5349 {8 * 1024, 2},
5350 {32 * 1024, 1},
5351 {64 * 1024, 7},
5352 },
5353 .block_erase = block_erase_m29f400bt,
5354 }, {
5355 .eraseblocks = { {512 * 1024, 1} },
5356 .block_erase = block_erase_chip_m29f400bt,
5357 }
5358 },
5359 .write = NULL,
5360 .read = read_memmapped,
5361 },
5362 {
5363 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
5364 .vendor = "ST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005365 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005366 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005367 .manufacture_id = ST_ID,
5368 .model_id = ST_M29F400BT,
5369 .total_size = 512,
5370 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005371 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005372 .tested = TEST_UNTESTED,
5373 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005374 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005375 .block_erasers =
5376 {
5377 {
5378 .eraseblocks = {
5379 {64 * 1024, 7},
5380 {32 * 1024, 1},
5381 {8 * 1024, 2},
5382 {16 * 1024, 1},
5383 },
5384 .block_erase = block_erase_m29f400bt,
5385 }, {
5386 .eraseblocks = { {512 * 1024, 1} },
5387 .block_erase = block_erase_chip_m29f400bt,
5388 }
5389 },
Carl-Daniel Hailfinger420cf6f2010-07-16 22:07:20 +00005390 .write = write_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005391 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005392 },
5393
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005394 {
5395 .vendor = "ST",
5396 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005397 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005398 .manufacture_id = ST_ID,
5399 .model_id = ST_M29W010B,
5400 .total_size = 128,
5401 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005402 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005403 .tested = TEST_UNTESTED,
5404 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005405 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005406 .block_erasers =
5407 {
5408 {
5409 .eraseblocks = { {16 * 1024, 8}, },
5410 .block_erase = erase_sector_jedec,
5411 }, {
5412 .eraseblocks = { {128 * 1024, 1} },
5413 .block_erase = erase_chip_block_jedec,
5414 }
5415 },
Sean Nelson35727f72010-01-28 23:55:12 +00005416 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005417 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005418 },
5419
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005420 {
5421 .vendor = "ST",
5422 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005423 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005424 .manufacture_id = ST_ID,
5425 .model_id = ST_M29W040B,
5426 .total_size = 512,
5427 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005428 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005429 .tested = TEST_UNTESTED,
5430 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005431 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005432 .block_erasers =
5433 {
5434 {
5435 .eraseblocks = { {64 * 1024, 8}, },
5436 .block_erase = erase_sector_jedec,
5437 }, {
5438 .eraseblocks = { {512 * 1024, 1} },
5439 .block_erase = erase_chip_block_jedec,
5440 }
5441 },
Sean Nelson35727f72010-01-28 23:55:12 +00005442 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005443 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005444 },
5445
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005446 {
5447 .vendor = "ST",
5448 .name = "M29W512B",
5449 .bustype = CHIP_BUSTYPE_PARALLEL,
5450 .manufacture_id = ST_ID,
5451 .model_id = ST_M29W512B,
5452 .total_size = 64,
5453 .page_size = 64 * 1024,
5454 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5455 .tested = TEST_OK_PREW,
5456 .probe = probe_jedec,
5457 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005458 .block_erasers =
5459 {
5460 {
5461 .eraseblocks = { {64 * 1024, 1} },
5462 .block_erase = erase_chip_block_jedec,
5463 }
5464 },
5465 .write = write_jedec_1,
5466 .read = read_memmapped,
5467 },
5468
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005469 {
5470 .vendor = "ST",
5471 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00005472 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005473 .manufacture_id = ST_ID,
5474 .model_id = ST_M50FLW040A,
5475 .total_size = 512,
5476 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005477 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005478 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005479 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005480 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005481 .block_erasers =
5482 {
5483 {
Sean Nelson329bde72010-01-19 16:39:19 +00005484 .eraseblocks = {
5485 {4 * 1024, 16}, /* sector */
5486 {64 * 1024, 5}, /* block */
5487 {4 * 1024, 16}, /* sector */
5488 {4 * 1024, 16}, /* sector */
5489 },
5490 .block_erase = NULL,
5491 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005492 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005493 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005494 }, {
5495 .eraseblocks = { {512 * 1024, 1} },
5496 .block_erase = erase_chip_stm50flw0x0x,
5497 }
5498 },
Sean Nelson28accc22010-03-19 18:47:06 +00005499 .unlock = unlock_stm50flw0x0x,
5500 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005501 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005502 },
5503
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005504 {
5505 .vendor = "ST",
5506 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005507 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005508 .manufacture_id = ST_ID,
5509 .model_id = ST_M50FLW040B,
5510 .total_size = 512,
5511 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005512 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005513 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005514 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005515 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005516 .block_erasers =
5517 {
5518 {
Sean Nelson329bde72010-01-19 16:39:19 +00005519 .eraseblocks = {
5520 {4 * 1024, 16}, /* sector */
5521 {4 * 1024, 16}, /* sector */
5522 {64 * 1024, 5}, /* block */
5523 {4 * 1024, 16}, /* sector */
5524 },
5525 .block_erase = NULL,
5526 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005527 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005528 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005529 }, {
5530 .eraseblocks = { {512 * 1024, 1} },
5531 .block_erase = erase_chip_stm50flw0x0x,
5532 }
5533 },
Sean Nelson28accc22010-03-19 18:47:06 +00005534 .unlock = unlock_stm50flw0x0x,
5535 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005536 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005537 },
5538
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005539 {
5540 .vendor = "ST",
5541 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005542 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005543 .manufacture_id = ST_ID,
5544 .model_id = ST_M50FLW080A,
5545 .total_size = 1024,
5546 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005547 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00005548 .tested = TEST_UNTESTED,
5549 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005550 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005551 .block_erasers =
5552 {
5553 {
Sean Nelson329bde72010-01-19 16:39:19 +00005554 .eraseblocks = {
5555 {4 * 1024, 16}, /* sector */
5556 {64 * 1024, 13}, /* block */
5557 {4 * 1024, 16}, /* sector */
5558 {4 * 1024, 16}, /* sector */
5559 },
5560 .block_erase = NULL,
5561 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005562 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005563 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005564 }, {
5565 .eraseblocks = { {1024 * 1024, 1} },
5566 .block_erase = erase_chip_stm50flw0x0x,
5567 }
5568 },
Sean Nelson28accc22010-03-19 18:47:06 +00005569 .unlock = unlock_stm50flw0x0x,
5570 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005571 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005572 },
5573
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005574 {
5575 .vendor = "ST",
5576 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005577 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005578 .manufacture_id = ST_ID,
5579 .model_id = ST_M50FLW080B,
5580 .total_size = 1024,
5581 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005582 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005583 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005584 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005585 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005586 .block_erasers =
5587 {
5588 {
Sean Nelson329bde72010-01-19 16:39:19 +00005589 .eraseblocks = {
5590 {4 * 1024, 16}, /* sector */
5591 {4 * 1024, 16}, /* sector */
5592 {64 * 1024, 13}, /* block */
5593 {4 * 1024, 16}, /* sector */
5594 },
5595 .block_erase = NULL,
5596 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005597 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005598 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005599 }, {
5600 .eraseblocks = { {1024 * 1024, 1} },
5601 .block_erase = erase_chip_stm50flw0x0x,
5602 }
5603 },
Sean Nelson28accc22010-03-19 18:47:06 +00005604 .unlock = unlock_stm50flw0x0x,
5605 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005606 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005607 },
5608
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005609 {
5610 .vendor = "ST",
5611 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005612 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005613 .manufacture_id = ST_ID,
5614 .model_id = ST_M50FW002,
5615 .total_size = 256,
5616 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005617 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005618 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005619 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005620 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005621 .block_erasers =
5622 {
5623 {
5624 .eraseblocks = {
5625 {64 * 1024, 3},
5626 {32 * 1024, 1},
5627 {8 * 1024, 2},
5628 {16 * 1024, 1},
5629 },
Sean Nelson28accc22010-03-19 18:47:06 +00005630 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005631 }, {
5632 .eraseblocks = { {256 * 1024, 1} },
5633 .block_erase = erase_chip_stm50flw0x0x,
5634 }
5635 },
Sean Nelson28accc22010-03-19 18:47:06 +00005636 .unlock = unlock_stm50flw0x0x,
5637 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005638 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005639 },
5640
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005641 {
5642 .vendor = "ST",
5643 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005644 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005645 .manufacture_id = ST_ID,
5646 .model_id = ST_M50FW016,
5647 .total_size = 2048,
5648 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005649 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005650 .tested = TEST_UNTESTED,
5651 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005652 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005653 .block_erasers =
5654 {
5655 {
5656 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005657 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005658 }, {
5659 .eraseblocks = { {2 * 1024 * 1024, 1} },
5660 .block_erase = erase_chip_stm50flw0x0x,
5661 }
5662 },
Sean Nelson28accc22010-03-19 18:47:06 +00005663 .unlock = unlock_stm50flw0x0x,
5664 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005665 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005666 },
5667
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005668 {
5669 .vendor = "ST",
5670 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005671 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005672 .manufacture_id = ST_ID,
5673 .model_id = ST_M50FW040,
5674 .total_size = 512,
5675 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005676 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005677 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005678 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005679 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005680 .block_erasers =
5681 {
5682 {
5683 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005684 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005685 }, {
5686 .eraseblocks = { {512 * 1024, 1} },
5687 .block_erase = erase_chip_stm50flw0x0x,
5688 }
5689 },
Sean Nelson28accc22010-03-19 18:47:06 +00005690 .unlock = unlock_stm50flw0x0x,
5691 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005692 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005693 },
5694
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005695 {
5696 .vendor = "ST",
5697 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005698 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005699 .manufacture_id = ST_ID,
5700 .model_id = ST_M50FW080,
5701 .total_size = 1024,
5702 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005703 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005704 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005705 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005706 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005707 .block_erasers =
5708 {
5709 {
5710 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005711 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005712 }, {
5713 .eraseblocks = { {1024 * 1024, 1} },
5714 .block_erase = erase_chip_stm50flw0x0x,
5715 }
5716 },
Sean Nelson28accc22010-03-19 18:47:06 +00005717 .unlock = unlock_stm50flw0x0x,
5718 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005719 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005720 },
5721
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005722 {
5723 .vendor = "ST",
5724 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005725 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005726 .manufacture_id = ST_ID,
5727 .model_id = ST_M50LPW116,
5728 .total_size = 2048,
5729 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005730 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005731 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005732 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005733 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005734 .block_erasers =
5735 {
5736 {
5737 .eraseblocks = {
5738 {4 * 1024, 16},
5739 {64 * 1024, 30},
5740 {32 * 1024, 1},
5741 {8 * 1024, 2},
5742 {16 * 1024, 1},
5743 },
Sean Nelson28accc22010-03-19 18:47:06 +00005744 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005745 }, {
5746 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005747 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005748 }
5749 },
Sean Nelson28accc22010-03-19 18:47:06 +00005750 .unlock = unlock_stm50flw0x0x,
5751 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005752 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005753 },
5754
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005755 {
5756 .vendor = "SyncMOS",
5757 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005758 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005759 .manufacture_id = SYNCMOS_ID,
5760 .model_id = S29C31004T,
5761 .total_size = 512,
5762 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005763 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005764 .tested = TEST_UNTESTED,
5765 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005766 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005767 .block_erasers =
5768 {
5769 {
5770 .eraseblocks = { {1 * 1024, 512} },
5771 .block_erase = erase_sector_jedec,
5772 }, {
5773 .eraseblocks = { {512 * 1024, 1} },
5774 .block_erase = erase_chip_block_jedec,
5775 },
5776 },
Sean Nelson35727f72010-01-28 23:55:12 +00005777 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005778 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005779 },
5780
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005781 {
5782 .vendor = "SyncMOS",
5783 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005784 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005785 .manufacture_id = SYNCMOS_ID,
5786 .model_id = S29C51001T,
5787 .total_size = 128,
5788 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005789 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005790 .tested = TEST_UNTESTED,
5791 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005792 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005793 .block_erasers =
5794 {
5795 {
5796 .eraseblocks = { {512, 256} },
5797 .block_erase = erase_sector_jedec,
5798 }, {
5799 .eraseblocks = { {128 * 1024, 1} },
5800 .block_erase = erase_chip_block_jedec,
5801 },
5802 },
Sean Nelson35727f72010-01-28 23:55:12 +00005803 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005804 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005805 },
5806
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005807 {
5808 .vendor = "SyncMOS",
5809 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005810 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005811 .manufacture_id = SYNCMOS_ID,
5812 .model_id = S29C51002T,
5813 .total_size = 256,
5814 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005815 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005816 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005817 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005818 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005819 .block_erasers =
5820 {
5821 {
5822 .eraseblocks = { {512, 512} },
5823 .block_erase = erase_sector_jedec,
5824 }, {
5825 .eraseblocks = { {256 * 1024, 1} },
5826 .block_erase = erase_chip_block_jedec,
5827 },
5828 },
Sean Nelson35727f72010-01-28 23:55:12 +00005829 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005830 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005831 },
5832
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005833 {
5834 .vendor = "SyncMOS",
5835 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005836 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005837 .manufacture_id = SYNCMOS_ID,
5838 .model_id = S29C51004T,
5839 .total_size = 512,
5840 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005841 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005842 .tested = TEST_UNTESTED,
5843 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005844 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005845 .block_erasers =
5846 {
5847 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005848 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005849 .block_erase = erase_sector_jedec,
5850 }, {
5851 .eraseblocks = { {512 * 1024, 1} },
5852 .block_erase = erase_chip_block_jedec,
5853 },
5854 },
Sean Nelson35727f72010-01-28 23:55:12 +00005855 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005856 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005857 },
5858
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005859 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005860 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005861 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005862 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005863 .manufacture_id = TI_OLD_ID,
5864 .model_id = TI_TMS29F002RB,
5865 .total_size = 256,
5866 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005867 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005868 .tested = TEST_UNTESTED,
5869 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005870 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005871 .block_erasers =
5872 {
5873 {
5874 .eraseblocks = {
5875 {16 * 1024, 1},
5876 {8 * 1024, 2},
5877 {32 * 1024, 1},
5878 {64 * 1024, 3},
5879 },
5880 .block_erase = erase_sector_jedec,
5881 }, {
5882 .eraseblocks = { {256 * 1024, 1} },
5883 .block_erase = erase_chip_block_jedec,
5884 },
5885 },
Sean Nelson35727f72010-01-28 23:55:12 +00005886 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005887 .read = read_memmapped,
5888 },
5889
5890 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005891 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005892 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005893 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005894 .manufacture_id = TI_OLD_ID,
5895 .model_id = TI_TMS29F002RT,
5896 .total_size = 256,
5897 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005898 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005899 .tested = TEST_UNTESTED,
5900 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005901 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005902 .block_erasers =
5903 {
5904 {
5905 .eraseblocks = {
5906 {64 * 1024, 3},
5907 {32 * 1024, 1},
5908 {8 * 1024, 2},
5909 {16 * 1024, 1},
5910 },
5911 .block_erase = erase_sector_jedec,
5912 }, {
5913 .eraseblocks = { {256 * 1024, 1} },
5914 .block_erase = erase_chip_block_jedec,
5915 },
5916 },
Sean Nelson35727f72010-01-28 23:55:12 +00005917 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005918 .read = read_memmapped,
5919 },
5920
5921 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005922 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00005923 .name = "W25Q80",
5924 .bustype = CHIP_BUSTYPE_SPI,
5925 .manufacture_id = WINBOND_NEX_ID,
5926 .model_id = W_25Q80,
5927 .total_size = 1024,
5928 .page_size = 256,
5929 .tested = TEST_UNTESTED,
5930 .probe = probe_spi_rdid,
5931 .probe_timing = TIMING_ZERO,
5932 .block_erasers =
5933 {
5934 {
5935 .eraseblocks = { {4 * 1024, 256} },
5936 .block_erase = spi_block_erase_20,
5937 }, {
5938 .eraseblocks = { {32 * 1024, 32} },
5939 .block_erase = spi_block_erase_52,
5940 }, {
5941 .eraseblocks = { {64 * 1024, 16} },
5942 .block_erase = spi_block_erase_d8,
5943 }, {
5944 .eraseblocks = { {1024 * 1024, 1} },
5945 .block_erase = spi_block_erase_60,
5946 }, {
5947 .eraseblocks = { {1024 * 1024, 1} },
5948 .block_erase = spi_block_erase_c7,
5949 }
5950 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005951 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00005952 .write = spi_chip_write_256,
5953 .read = spi_chip_read,
5954 },
5955
5956 {
5957 .vendor = "Winbond",
5958 .name = "W25Q16",
5959 .bustype = CHIP_BUSTYPE_SPI,
5960 .manufacture_id = WINBOND_NEX_ID,
5961 .model_id = W_25Q16,
5962 .total_size = 2048,
5963 .page_size = 256,
5964 .tested = TEST_UNTESTED,
5965 .probe = probe_spi_rdid,
5966 .probe_timing = TIMING_ZERO,
5967 .block_erasers =
5968 {
5969 {
5970 .eraseblocks = { {4 * 1024, 512} },
5971 .block_erase = spi_block_erase_20,
5972 }, {
5973 .eraseblocks = { {32 * 1024, 64} },
5974 .block_erase = spi_block_erase_52,
5975 }, {
5976 .eraseblocks = { {64 * 1024, 32} },
5977 .block_erase = spi_block_erase_d8,
5978 }, {
5979 .eraseblocks = { {2 * 1024 * 1024, 1} },
5980 .block_erase = spi_block_erase_60,
5981 }, {
5982 .eraseblocks = { {2 * 1024 * 1024, 1} },
5983 .block_erase = spi_block_erase_c7,
5984 }
5985 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005986 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00005987 .write = spi_chip_write_256,
5988 .read = spi_chip_read,
5989 },
5990
5991 {
5992 .vendor = "Winbond",
5993 .name = "W25Q32",
5994 .bustype = CHIP_BUSTYPE_SPI,
5995 .manufacture_id = WINBOND_NEX_ID,
5996 .model_id = W_25Q32,
5997 .total_size = 4096,
5998 .page_size = 256,
5999 .tested = TEST_UNTESTED,
6000 .probe = probe_spi_rdid,
6001 .probe_timing = TIMING_ZERO,
6002 .block_erasers =
6003 {
6004 {
6005 .eraseblocks = { {4 * 1024, 1024} },
6006 .block_erase = spi_block_erase_20,
6007 }, {
6008 .eraseblocks = { {32 * 1024, 128} },
6009 .block_erase = spi_block_erase_52,
6010 }, {
6011 .eraseblocks = { {64 * 1024, 64} },
6012 .block_erase = spi_block_erase_d8,
6013 }, {
6014 .eraseblocks = { {4 * 1024 * 1024, 1} },
6015 .block_erase = spi_block_erase_60,
6016 }, {
6017 .eraseblocks = { {4 * 1024 * 1024, 1} },
6018 .block_erase = spi_block_erase_c7,
6019 }
6020 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006021 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00006022 .write = spi_chip_write_256,
6023 .read = spi_chip_read,
6024 },
6025
6026 {
6027 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00006028 .name = "W25Q64",
6029 .bustype = CHIP_BUSTYPE_SPI,
6030 .manufacture_id = WINBOND_NEX_ID,
6031 .model_id = W_25Q64,
6032 .total_size = 8192,
6033 .page_size = 256,
6034 .tested = TEST_OK_PRW,
6035 .probe = probe_spi_rdid,
6036 .probe_timing = TIMING_ZERO,
6037 .block_erasers =
6038 {
6039 {
6040 .eraseblocks = { {4 * 1024, 2048} },
6041 .block_erase = spi_block_erase_20,
6042 }, {
6043 .eraseblocks = { {32 * 1024, 256} },
6044 .block_erase = spi_block_erase_52,
6045 }, {
6046 .eraseblocks = { {64 * 1024, 128} },
6047 .block_erase = spi_block_erase_d8,
6048 }, {
6049 .eraseblocks = { {8 * 1024 * 1024, 1} },
6050 .block_erase = spi_block_erase_60,
6051 }, {
6052 .eraseblocks = { {8 * 1024 * 1024, 1} },
6053 .block_erase = spi_block_erase_c7,
6054 }
6055 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006056 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00006057 .write = spi_chip_write_256,
6058 .read = spi_chip_read,
6059 },
6060
6061 {
6062 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006063 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006064 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006065 .manufacture_id = WINBOND_NEX_ID,
6066 .model_id = W_25X10,
6067 .total_size = 128,
6068 .page_size = 256,
6069 .tested = TEST_UNTESTED,
6070 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006071 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006072 .block_erasers =
6073 {
6074 {
6075 .eraseblocks = { {4 * 1024, 32} },
6076 .block_erase = spi_block_erase_20,
6077 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006078 .eraseblocks = { {64 * 1024, 2} },
6079 .block_erase = spi_block_erase_d8,
6080 }, {
6081 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006082 .block_erase = spi_block_erase_c7,
6083 }
6084 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006085 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006086 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006087 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006088 },
6089
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006090 {
6091 .vendor = "Winbond",
6092 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006093 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006094 .manufacture_id = WINBOND_NEX_ID,
6095 .model_id = W_25X20,
6096 .total_size = 256,
6097 .page_size = 256,
6098 .tested = TEST_UNTESTED,
6099 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006100 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006101 .block_erasers =
6102 {
6103 {
6104 .eraseblocks = { {4 * 1024, 64} },
6105 .block_erase = spi_block_erase_20,
6106 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006107 .eraseblocks = { {64 * 1024, 4} },
6108 .block_erase = spi_block_erase_d8,
6109 }, {
6110 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006111 .block_erase = spi_block_erase_c7,
6112 }
6113 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006114 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006115 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006116 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006117 },
6118
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006119 {
6120 .vendor = "Winbond",
6121 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006122 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006123 .manufacture_id = WINBOND_NEX_ID,
6124 .model_id = W_25X40,
6125 .total_size = 512,
6126 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006127 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006128 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006129 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006130 .block_erasers =
6131 {
6132 {
6133 .eraseblocks = { {4 * 1024, 128} },
6134 .block_erase = spi_block_erase_20,
6135 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006136 .eraseblocks = { {64 * 1024, 8} },
6137 .block_erase = spi_block_erase_d8,
6138 }, {
6139 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006140 .block_erase = spi_block_erase_c7,
6141 }
6142 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006143 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006144 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006145 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006146 },
6147
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006148 {
6149 .vendor = "Winbond",
6150 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006151 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006152 .manufacture_id = WINBOND_NEX_ID,
6153 .model_id = W_25X80,
6154 .total_size = 1024,
6155 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006156 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006157 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006158 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006159 .block_erasers =
6160 {
6161 {
6162 .eraseblocks = { {4 * 1024, 256} },
6163 .block_erase = spi_block_erase_20,
6164 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006165 .eraseblocks = { {64 * 1024, 16} },
6166 .block_erase = spi_block_erase_d8,
6167 }, {
6168 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006169 .block_erase = spi_block_erase_c7,
6170 }
6171 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006172 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006173 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006174 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006175 },
6176
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006177 {
6178 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00006179 .name = "W25x16",
6180 .bustype = CHIP_BUSTYPE_SPI,
6181 .manufacture_id = WINBOND_NEX_ID,
6182 .model_id = W_25X16,
6183 .total_size = 2048,
6184 .page_size = 256,
6185 .tested = TEST_OK_PR,
6186 .probe = probe_spi_rdid,
6187 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006188 .block_erasers =
6189 {
6190 {
6191 .eraseblocks = { {4 * 1024, 512} },
6192 .block_erase = spi_block_erase_20,
6193 }, {
6194 .eraseblocks = { {32 * 1024, 64} },
6195 .block_erase = spi_block_erase_52,
6196 }, {
6197 .eraseblocks = { {64 * 1024, 32} },
6198 .block_erase = spi_block_erase_d8,
6199 }, {
6200 .eraseblocks = { {2 * 1024 * 1024, 1} },
6201 .block_erase = spi_block_erase_60,
6202 }, {
6203 .eraseblocks = { {2 * 1024 * 1024, 1} },
6204 .block_erase = spi_block_erase_c7,
6205 }
6206 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006207 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00006208 .write = spi_chip_write_256,
6209 .read = spi_chip_read,
6210 },
6211
6212 {
6213 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00006214 .name = "W25x32",
6215 .bustype = CHIP_BUSTYPE_SPI,
6216 .manufacture_id = WINBOND_NEX_ID,
6217 .model_id = W_25X32,
6218 .total_size = 4096,
6219 .page_size = 256,
6220 .tested = TEST_OK_PROBE,
6221 .probe = probe_spi_rdid,
6222 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006223 .block_erasers =
6224 {
6225 {
6226 .eraseblocks = { {4 * 1024, 1024} },
6227 .block_erase = spi_block_erase_20,
6228 }, {
6229 .eraseblocks = { {32 * 1024, 128} },
6230 .block_erase = spi_block_erase_52,
6231 }, {
6232 .eraseblocks = { {64 * 1024, 64} },
6233 .block_erase = spi_block_erase_d8,
6234 }, {
6235 .eraseblocks = { {4 * 1024 * 1024, 1} },
6236 .block_erase = spi_block_erase_60,
6237 }, {
6238 .eraseblocks = { {4 * 1024 * 1024, 1} },
6239 .block_erase = spi_block_erase_c7,
6240 }
6241 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006242 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00006243 .write = spi_chip_write_256,
6244 .read = spi_chip_read,
6245 },
6246
6247 {
6248 .vendor = "Winbond",
6249 .name = "W25x64",
6250 .bustype = CHIP_BUSTYPE_SPI,
6251 .manufacture_id = WINBOND_NEX_ID,
6252 .model_id = W_25X64,
6253 .total_size = 8192,
6254 .page_size = 256,
6255 .tested = TEST_UNTESTED,
6256 .probe = probe_spi_rdid,
6257 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006258 .block_erasers =
6259 {
6260 {
6261 .eraseblocks = { {4 * 1024, 2048} },
6262 .block_erase = spi_block_erase_20,
6263 }, {
6264 .eraseblocks = { {32 * 1024, 256} },
6265 .block_erase = spi_block_erase_52,
6266 }, {
6267 .eraseblocks = { {64 * 1024, 128} },
6268 .block_erase = spi_block_erase_d8,
6269 }, {
6270 .eraseblocks = { {8 * 1024 * 1024, 1} },
6271 .block_erase = spi_block_erase_60,
6272 }, {
6273 .eraseblocks = { {8 * 1024 * 1024, 1} },
6274 .block_erase = spi_block_erase_c7,
6275 }
6276 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006277 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00006278 .write = spi_chip_write_256,
6279 .read = spi_chip_read,
6280 },
6281
6282 {
6283 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006284 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006285 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006286 .manufacture_id = WINBOND_ID,
6287 .model_id = W_29C011,
6288 .total_size = 128,
6289 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006290 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006291 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006292 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006293 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006294 .block_erasers =
6295 {
6296 {
6297 .eraseblocks = { {128 * 1024, 1} },
6298 .block_erase = erase_chip_block_jedec,
6299 }
6300 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006301 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006302 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006303 },
6304
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006305 {
6306 .vendor = "Winbond",
6307 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00006308 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006309 .manufacture_id = WINBOND_ID,
6310 .model_id = W_29C020C,
6311 .total_size = 256,
6312 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006313 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006314 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006315 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006316 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006317 .block_erasers =
6318 {
6319 {
6320 .eraseblocks = { {256 * 1024, 1} },
6321 .block_erase = erase_chip_block_jedec,
6322 }
6323 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006324 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006325 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006326 },
6327
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006328 {
6329 .vendor = "Winbond",
6330 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00006331 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006332 .manufacture_id = WINBOND_ID,
6333 .model_id = W_29C040P,
6334 .total_size = 512,
6335 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00006336 .feature_bits = FEATURE_LONG_RESET,
6337 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006338 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006339 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006340 .block_erasers =
6341 {
6342 {
6343 .eraseblocks = { {512 * 1024, 1} },
6344 .block_erase = erase_chip_block_jedec,
6345 }
6346 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006347 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006348 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006349 },
6350
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006351 {
6352 .vendor = "Winbond",
6353 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006354 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006355 .manufacture_id = WINBOND_ID,
6356 .model_id = W_29C011,
6357 .total_size = 128,
6358 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006359 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006360 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006361 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006362 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006363 .block_erasers =
6364 {
6365 {
6366 .eraseblocks = { {128 * 1024, 1} },
6367 .block_erase = erase_chip_block_jedec,
6368 }
6369 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006370 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006371 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006372 },
6373
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006374 {
6375 .vendor = "Winbond",
6376 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006377 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006378 .manufacture_id = WINBOND_ID,
6379 .model_id = W_39V040A,
6380 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006381 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006382 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00006383 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006384 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006385 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006386 .block_erasers =
6387 {
6388 {
6389 .eraseblocks = { {64 * 1024, 8} },
6390 .block_erase = erase_sector_jedec,
6391 }, {
6392 .eraseblocks = { {512 * 1024, 1} },
6393 .block_erase = erase_chip_block_jedec,
6394 }
6395 },
Sean Nelson35727f72010-01-28 23:55:12 +00006396 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006397 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006398 },
6399
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006400 {
6401 .vendor = "Winbond",
6402 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006403 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006404 .manufacture_id = WINBOND_ID,
6405 .model_id = W_39V040B,
6406 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006407 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006408 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00006409 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006410 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006411 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006412 .block_erasers =
6413 {
6414 {
6415 .eraseblocks = { {64 * 1024, 8} },
6416 .block_erase = erase_sector_jedec,
6417 }, {
6418 .eraseblocks = { {512 * 1024, 1} },
6419 .block_erase = erase_chip_block_jedec,
6420 }
6421 },
Sean Nelson35727f72010-01-28 23:55:12 +00006422 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006423 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006424 },
6425
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006426 {
6427 .vendor = "Winbond",
6428 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006429 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006430 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006431 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006432 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006433 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006434 .feature_bits = FEATURE_EITHER_RESET,
6435 .tested = TEST_UNTESTED,
6436 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006437 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006438 .block_erasers =
6439 {
6440 {
6441 .eraseblocks = { {64 * 1024, 8} },
6442 .block_erase = erase_sector_jedec,
6443 }, {
6444 .eraseblocks = { {512 * 1024, 1} },
6445 .block_erase = erase_chip_block_jedec,
6446 }
6447 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006448 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00006449 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006450 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006451 },
6452
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006453 {
6454 .vendor = "Winbond",
6455 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006456 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006457 .manufacture_id = WINBOND_ID,
6458 .model_id = W_39V040FA,
6459 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006460 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00006461 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00006462 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006463 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006464 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006465 .block_erasers =
6466 {
6467 {
6468 .eraseblocks = { {4 * 1024, 128} },
6469 .block_erase = erase_block_jedec,
6470 }, {
6471 .eraseblocks = { {64 * 1024, 8} },
6472 .block_erase = erase_sector_jedec,
6473 }, {
6474 .eraseblocks = { {512 * 1024, 1} },
6475 .block_erase = erase_chip_block_jedec,
6476 }
6477 },
Michael Karcherc9b63412010-05-30 16:55:18 +00006478 .printlock = printlock_sst_fwhub,
6479 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006480 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006481 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006482 },
6483
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006484 {
6485 .vendor = "Winbond",
6486 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006487 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006488 .manufacture_id = WINBOND_ID,
6489 .model_id = W_39V080A,
6490 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006491 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006492 .feature_bits = FEATURE_EITHER_RESET,
6493 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006494 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006495 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006496 .block_erasers =
6497 {
6498 {
6499 .eraseblocks = { {64 * 1024, 16} },
6500 .block_erase = erase_sector_jedec,
6501 }, {
6502 .eraseblocks = { {1024 * 1024, 1} },
6503 .block_erase = erase_chip_block_jedec,
6504 }
6505 },
Sean Nelson35727f72010-01-28 23:55:12 +00006506 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006507 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006508 },
6509
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006510 {
6511 .vendor = "Winbond",
6512 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00006513 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006514 .manufacture_id = WINBOND_ID,
6515 .model_id = W_49F002U,
6516 .total_size = 256,
6517 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006518 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006519 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006520 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006521 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006522 .block_erasers =
6523 {
6524 {
6525 .eraseblocks = {
6526 {128 * 1024, 1},
6527 {96 * 1024, 1},
6528 {8 * 1024, 2},
6529 {16 * 1024, 1},
6530 },
6531 .block_erase = erase_sector_jedec,
6532 }, {
6533 .eraseblocks = { {256 * 1024, 1} },
6534 .block_erase = erase_chip_block_jedec,
6535 }
6536 },
Sean Nelson35727f72010-01-28 23:55:12 +00006537 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006538 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006539 },
6540
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006541 {
6542 .vendor = "Winbond",
Carl-Daniel Hailfingerabebe6b2010-07-17 13:45:42 +00006543 .name = "W49F020",
6544 .bustype = CHIP_BUSTYPE_PARALLEL,
6545 .manufacture_id = WINBOND_ID,
6546 .model_id = W_49F020,
6547 .total_size = 256,
6548 .page_size = 128,
6549 .feature_bits = FEATURE_EITHER_RESET,
6550 .tested = TEST_OK_PROBE,
6551 .probe = probe_jedec,
6552 .probe_timing = 10,
6553 .block_erasers =
6554 {
6555 {
6556 .eraseblocks = { {256 * 1024, 1} },
6557 .block_erase = erase_chip_block_jedec,
6558 }
6559 },
6560 .write = write_jedec_1,
6561 .read = read_memmapped,
6562 },
6563
6564 {
6565 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006566 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006567 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006568 .manufacture_id = WINBOND_ID,
6569 .model_id = W_49V002A,
6570 .total_size = 256,
6571 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006572 .feature_bits = FEATURE_EITHER_RESET,
6573 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006574 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006575 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006576 .block_erasers =
6577 {
6578 {
6579 .eraseblocks = {
6580 {64 * 1024, 3},
6581 {32 * 1024, 1},
6582 {8 * 1024, 2},
6583 {16 * 1024, 1},
6584 },
6585 .block_erase = erase_sector_jedec,
6586 }, {
6587 .eraseblocks = { {256 * 1024, 1} },
6588 .block_erase = erase_chip_block_jedec,
6589 }
6590 },
Sean Nelson35727f72010-01-28 23:55:12 +00006591 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006592 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006593 },
6594
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006595 {
6596 .vendor = "Winbond",
6597 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006598 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006599 .manufacture_id = WINBOND_ID,
6600 .model_id = W_49V002FA,
6601 .total_size = 256,
6602 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006603 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00006604 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006605 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006606 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006607 .block_erasers =
6608 {
6609 {
6610 .eraseblocks = {
6611 {64 * 1024, 3},
6612 {32 * 1024, 1},
6613 {8 * 1024, 2},
6614 {16 * 1024, 1},
6615 },
6616 .block_erase = erase_sector_jedec,
6617 }, {
6618 .eraseblocks = { {256 * 1024, 1} },
6619 .block_erase = erase_chip_block_jedec,
6620 }
6621 },
Sean Nelson35727f72010-01-28 23:55:12 +00006622 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006623 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006624 },
6625
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006626 {
6627 .vendor = "Winbond",
6628 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006629 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006630 .manufacture_id = WINBOND_ID,
6631 .model_id = W_39V080FA,
6632 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006633 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006634 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006635 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006636 .probe = probe_jedec,
6637 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006638 .block_erasers =
6639 {
6640 {
6641 .eraseblocks = { {64 * 1024, 16}, },
6642 .block_erase = erase_sector_jedec,
6643 }, {
6644 .eraseblocks = { {1024 * 1024, 1} },
6645 .block_erase = erase_chip_block_jedec,
6646 }
6647 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006648 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006649 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006650 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006651 },
6652
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006653 {
6654 .vendor = "Winbond",
6655 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006656 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006657 .manufacture_id = WINBOND_ID,
6658 .model_id = W_39V080FA_DM,
6659 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006660 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006661 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006662 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006663 .probe = probe_jedec,
6664 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006665 .block_erasers =
6666 {
6667 {
6668 .eraseblocks = { {64 * 1024, 8}, },
6669 .block_erase = erase_sector_jedec,
6670 }, {
6671 .eraseblocks = { {512 * 1024, 1} },
6672 .block_erase = erase_chip_block_jedec,
6673 }
6674 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006675 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006676 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006677 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006678 },
6679
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006680 {
6681 .vendor = "Atmel",
6682 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006683 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006684 .manufacture_id = ATMEL_ID,
6685 .model_id = GENERIC_DEVICE_ID,
6686 .total_size = 0,
6687 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006688 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006689 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006690 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006691 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006692 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006693 },
6694
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006695 {
6696 .vendor = "EON",
6697 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006698 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006699 .manufacture_id = EON_ID_NOPREFIX,
6700 .model_id = GENERIC_DEVICE_ID,
6701 .total_size = 0,
6702 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006703 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006704 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006705 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006706 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006707 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006708 },
6709
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006710 {
6711 .vendor = "Macronix",
6712 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006713 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006714 .manufacture_id = MX_ID,
6715 .model_id = GENERIC_DEVICE_ID,
6716 .total_size = 0,
6717 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006718 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006719 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006720 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006721 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006722 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006723 },
6724
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006725 {
6726 .vendor = "PMC",
6727 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006728 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006729 .manufacture_id = PMC_ID,
6730 .model_id = GENERIC_DEVICE_ID,
6731 .total_size = 0,
6732 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006733 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006734 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006735 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006736 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006737 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006738 },
6739
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006740 {
6741 .vendor = "SST",
6742 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006743 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006744 .manufacture_id = SST_ID,
6745 .model_id = GENERIC_DEVICE_ID,
6746 .total_size = 0,
6747 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006748 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006749 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006750 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006751 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006752 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006753 },
6754
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006755 {
6756 .vendor = "ST",
6757 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006758 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006759 .manufacture_id = ST_ID,
6760 .model_id = GENERIC_DEVICE_ID,
6761 .total_size = 0,
6762 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006763 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006764 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006765 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006766 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006767 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006768 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006769
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006770 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006771 .vendor = "Sanyo",
6772 .name = "unknown Sanyo SPI chip",
6773 .bustype = CHIP_BUSTYPE_SPI,
6774 .manufacture_id = SANYO_ID,
6775 .model_id = GENERIC_DEVICE_ID,
6776 .total_size = 0,
6777 .page_size = 256,
6778 .tested = TEST_BAD_PREW,
6779 .probe = probe_spi_rdid,
6780 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006781 .write = NULL,
6782 .read = NULL,
6783 },
6784
6785 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006786 .vendor = "Generic",
6787 .name = "unknown SPI chip (RDID)",
6788 .bustype = CHIP_BUSTYPE_SPI,
6789 .manufacture_id = GENERIC_MANUF_ID,
6790 .model_id = GENERIC_DEVICE_ID,
6791 .total_size = 0,
6792 .page_size = 256,
6793 .tested = TEST_BAD_PREW,
6794 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006795 .write = NULL,
6796 },
6797 {
6798 .vendor = "Generic",
6799 .name = "unknown SPI chip (REMS)",
6800 .bustype = CHIP_BUSTYPE_SPI,
6801 .manufacture_id = GENERIC_MANUF_ID,
6802 .model_id = GENERIC_DEVICE_ID,
6803 .total_size = 0,
6804 .page_size = 256,
6805 .tested = TEST_BAD_PREW,
6806 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006807 .write = NULL,
6808 },
6809
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006810 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006811};