blob: 354bd95c995120e95b0cd96d8c5ab092303b2f39 [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,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002385 .tested = TEST_UNTESTED,
2386 .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 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002403 .write = write_coreboot_m29f400bt,
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 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002434 .write = write_coreboot_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",
3974 .name = "SST25VF040.REMS",
3975 .bustype = CHIP_BUSTYPE_SPI,
3976 .manufacture_id = SST_ID,
3977 .model_id = SST_25VF040_REMS,
3978 .total_size = 512,
3979 .page_size = 256,
3980 .tested = TEST_OK_PR,
3981 .probe = probe_spi_rems,
3982 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003983 .block_erasers =
3984 {
3985 {
3986 .eraseblocks = { {4 * 1024, 128} },
3987 .block_erase = spi_block_erase_20,
3988 }, {
3989 .eraseblocks = { {32 * 1024, 16} },
3990 .block_erase = spi_block_erase_52,
3991 }, {
3992 .eraseblocks = { {512 * 1024, 1} },
3993 .block_erase = spi_block_erase_60,
3994 },
3995 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00003996 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003997 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003998 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003999 },
4000
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004001 {
4002 .vendor = "SST",
4003 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004004 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004005 .manufacture_id = SST_ID,
4006 .model_id = SST_25VF040B,
4007 .total_size = 512,
4008 .page_size = 256,
4009 .tested = TEST_UNTESTED,
4010 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004011 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004012 .block_erasers =
4013 {
4014 {
4015 .eraseblocks = { {4 * 1024, 128} },
4016 .block_erase = spi_block_erase_20,
4017 }, {
4018 .eraseblocks = { {32 * 1024, 16} },
4019 .block_erase = spi_block_erase_52,
4020 }, {
4021 .eraseblocks = { {64 * 1024, 8} },
4022 .block_erase = spi_block_erase_d8,
4023 }, {
4024 .eraseblocks = { {512 * 1024, 1} },
4025 .block_erase = spi_block_erase_60,
4026 }, {
4027 .eraseblocks = { {512 * 1024, 1} },
4028 .block_erase = spi_block_erase_c7,
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,
Zheng Bao0677dff2009-02-25 08:07:33 +00004033 .read = spi_chip_read,
4034 },
4035
4036 {
4037 .vendor = "SST",
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004038 .name = "SST25LF040A.RES",
4039 .bustype = CHIP_BUSTYPE_SPI,
4040 .manufacture_id = SST_ID,
4041 .model_id = SST_25VF040_REMS,
4042 .total_size = 512,
4043 .page_size = 256,
4044 .tested = TEST_OK_PROBE,
4045 .probe = probe_spi_res2,
4046 .probe_timing = TIMING_ZERO,
4047 .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 = { {512 * 1024, 1} },
4057 .block_erase = spi_block_erase_60,
4058 },
4059 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004060 .unlock = spi_disable_blockprotect,
Stefan Reinauer5cacf8c2010-06-14 12:58:06 +00004061 .write = spi_chip_write_1,
4062 .read = spi_chip_read,
4063 },
4064
4065 {
4066 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00004067 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004068 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004069 .manufacture_id = SST_ID,
4070 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00004071 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004072 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00004073 .tested = TEST_OK_PR,
4074 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004075 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004076 .block_erasers =
4077 {
4078 {
4079 .eraseblocks = { {4 * 1024, 128} },
4080 .block_erase = spi_block_erase_20,
4081 }, {
4082 .eraseblocks = { {32 * 1024, 16} },
4083 .block_erase = spi_block_erase_52,
4084 }, {
4085 .eraseblocks = { {64 * 1024, 8} },
4086 .block_erase = spi_block_erase_d8,
4087 }, {
4088 .eraseblocks = { {512 * 1024, 1} },
4089 .block_erase = spi_block_erase_60,
4090 }, {
4091 .eraseblocks = { {512 * 1024, 1} },
4092 .block_erase = spi_block_erase_c7,
4093 },
4094 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004095 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00004096 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00004097 .read = spi_chip_read,
4098 },
4099
4100 {
4101 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004102 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004103 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004104 .manufacture_id = SST_ID,
4105 .model_id = SST_25VF080B,
4106 .total_size = 1024,
4107 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00004108 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004109 .probe = probe_spi_rdid,
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, 256} },
4115 .block_erase = spi_block_erase_20,
4116 }, {
4117 .eraseblocks = { {32 * 1024, 32} },
4118 .block_erase = spi_block_erase_52,
4119 }, {
4120 .eraseblocks = { {64 * 1024, 16} },
4121 .block_erase = spi_block_erase_d8,
4122 }, {
4123 .eraseblocks = { {1024 * 1024, 1} },
4124 .block_erase = spi_block_erase_60,
4125 }, {
4126 .eraseblocks = { {1024 * 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 Hailfinger8d497012009-05-09 02:34:18 +00004131 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004132 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004133 },
4134
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004135 {
4136 .vendor = "SST",
4137 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004138 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004139 .manufacture_id = SST_ID,
4140 .model_id = SST_28SF040,
4141 .total_size = 512,
4142 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00004143 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004144 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004145 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004146 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004147 .block_erasers =
4148 {
4149 {
4150 .eraseblocks = { {128, 4096} },
4151 .block_erase = erase_sector_28sf040,
4152 }, {
4153 .eraseblocks = { {512 * 1024, 1} },
4154 .block_erase = erase_chip_28sf040,
4155 }
4156 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004157 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004158 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004159 },
4160
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004161 {
4162 .vendor = "SST",
4163 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004164 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004165 .manufacture_id = SST_ID,
4166 .model_id = SST_29EE010,
4167 .total_size = 128,
4168 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004169 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004170 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004171 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004172 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004173 .block_erasers =
4174 {
4175 {
4176 .eraseblocks = { {128 * 1024, 1} },
4177 .block_erase = erase_chip_block_jedec,
4178 }
4179 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004180 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004181 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004182 },
4183
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004184 {
4185 .vendor = "SST",
4186 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004187 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004188 .manufacture_id = SST_ID,
4189 .model_id = SST_29LE010,
4190 .total_size = 128,
4191 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004192 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004193 .tested = TEST_UNTESTED,
4194 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004195 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004196 .block_erasers =
4197 {
4198 {
4199 .eraseblocks = { {128 * 1024, 1} },
4200 .block_erase = erase_chip_block_jedec,
4201 }
4202 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004203 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004204 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004205 },
4206
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004207 {
4208 .vendor = "SST",
4209 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004210 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004211 .manufacture_id = SST_ID,
4212 .model_id = SST_29EE020A,
4213 .total_size = 256,
4214 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004215 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004216 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004217 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004218 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004219 .block_erasers =
4220 {
4221 {
4222 .eraseblocks = { {256 * 1024, 1} },
4223 .block_erase = erase_chip_block_jedec,
4224 }
4225 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004226 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004227 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004228 },
4229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004230 {
4231 .vendor = "SST",
4232 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004233 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004234 .manufacture_id = SST_ID,
4235 .model_id = SST_29LE020,
4236 .total_size = 256,
4237 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00004238 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00004239 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004240 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004241 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004242 .block_erasers =
4243 {
4244 {
4245 .eraseblocks = { {256 * 1024, 1} },
4246 .block_erase = erase_chip_block_jedec,
4247 }
4248 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004249 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004250 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004251 },
4252
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004253 {
4254 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00004255 .name = "SST39SF512",
4256 .bustype = CHIP_BUSTYPE_PARALLEL,
4257 .manufacture_id = SST_ID,
4258 .model_id = SST_39SF512,
4259 .total_size = 64,
4260 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004261 .feature_bits = FEATURE_EITHER_RESET,
4262 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004263 .probe = probe_jedec,
4264 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00004265 .block_erasers =
4266 {
4267 {
4268 .eraseblocks = { {4 * 1024, 16} },
4269 .block_erase = erase_sector_jedec,
4270 }, {
4271 .eraseblocks = { {64 * 1024, 1} },
4272 .block_erase = erase_chip_block_jedec,
4273 }
4274 },
Sean Nelson35727f72010-01-28 23:55:12 +00004275 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004276 .read = read_memmapped,
4277 },
4278
4279 {
4280 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004281 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004282 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004283 .manufacture_id = SST_ID,
4284 .model_id = SST_39SF010,
4285 .total_size = 128,
4286 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004287 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004288 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004289 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004290 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004291 .block_erasers =
4292 {
4293 {
4294 .eraseblocks = { {4 * 1024, 32} },
4295 .block_erase = erase_sector_jedec,
4296 }, {
4297 .eraseblocks = { {128 * 1024, 1} },
4298 .block_erase = erase_chip_block_jedec,
4299 }
4300 },
Sean Nelson35727f72010-01-28 23:55:12 +00004301 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004302 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004303 },
4304
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004305 {
4306 .vendor = "SST",
4307 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004308 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004309 .manufacture_id = SST_ID,
4310 .model_id = SST_39SF020,
4311 .total_size = 256,
4312 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004313 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004314 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004315 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004316 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004317 .block_erasers =
4318 {
4319 {
4320 .eraseblocks = { {4 * 1024, 64} },
4321 .block_erase = erase_sector_jedec,
4322 }, {
4323 .eraseblocks = { {256 * 1024, 1} },
4324 .block_erase = erase_chip_block_jedec,
4325 }
4326 },
Sean Nelson35727f72010-01-28 23:55:12 +00004327 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004328 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004329 },
4330
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004331 {
4332 .vendor = "SST",
4333 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004334 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004335 .manufacture_id = SST_ID,
4336 .model_id = SST_39SF040,
4337 .total_size = 512,
4338 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004339 .feature_bits = FEATURE_EITHER_RESET,
4340 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004341 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004342 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004343 .block_erasers =
4344 {
4345 {
4346 .eraseblocks = { {4 * 1024, 128} },
4347 .block_erase = erase_sector_jedec,
4348 }, {
4349 .eraseblocks = { {512 * 1024, 1} },
4350 .block_erase = erase_chip_block_jedec,
4351 }
4352 },
Sean Nelson35727f72010-01-28 23:55:12 +00004353 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004354 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004355 },
4356
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004357 {
4358 .vendor = "SST",
4359 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00004360 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004361 .manufacture_id = SST_ID,
4362 .model_id = SST_39VF512,
4363 .total_size = 64,
4364 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004365 .feature_bits = FEATURE_EITHER_RESET,
4366 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004367 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004368 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00004369 .block_erasers =
4370 {
4371 {
4372 .eraseblocks = { {4 * 1024, 16} },
4373 .block_erase = erase_sector_jedec,
4374 }, {
4375 .eraseblocks = { {64 * 1024, 1} },
4376 .block_erase = erase_chip_block_jedec,
4377 }
4378 },
Sean Nelson35727f72010-01-28 23:55:12 +00004379 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004380 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004381 },
4382
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004383 {
4384 .vendor = "SST",
4385 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004386 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004387 .manufacture_id = SST_ID,
4388 .model_id = SST_39VF010,
4389 .total_size = 128,
4390 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004391 .feature_bits = FEATURE_EITHER_RESET,
Guenter Knauf2bd007a2010-06-24 11:51:12 +00004392 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004393 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004394 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004395 .block_erasers =
4396 {
4397 {
4398 .eraseblocks = { {4 * 1024, 32} },
4399 .block_erase = erase_sector_jedec,
4400 }, {
4401 .eraseblocks = { {128 * 1024, 1} },
4402 .block_erase = erase_chip_block_jedec,
4403 }
4404 },
Sean Nelson35727f72010-01-28 23:55:12 +00004405 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004406 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004407 },
4408
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004409 {
4410 .vendor = "SST",
4411 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004412 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004413 .manufacture_id = SST_ID,
4414 .model_id = SST_39VF020,
4415 .total_size = 256,
4416 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004417 .feature_bits = FEATURE_EITHER_RESET,
4418 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004419 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004420 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004421 .block_erasers =
4422 {
4423 {
4424 .eraseblocks = { {4 * 1024, 64} },
4425 .block_erase = erase_sector_jedec,
4426 }, {
4427 .eraseblocks = { {256 * 1024, 1} },
4428 .block_erase = erase_chip_block_jedec,
4429 }
4430 },
Sean Nelson35727f72010-01-28 23:55:12 +00004431 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004432 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004433 },
4434
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004435 {
4436 .vendor = "SST",
4437 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004438 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004439 .manufacture_id = SST_ID,
4440 .model_id = SST_39VF040,
4441 .total_size = 512,
4442 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004443 .feature_bits = FEATURE_EITHER_RESET,
4444 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004445 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004446 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004447 .block_erasers =
4448 {
4449 {
4450 .eraseblocks = { {4 * 1024, 128} },
4451 .block_erase = erase_sector_jedec,
4452 }, {
4453 .eraseblocks = { {512 * 1024, 1} },
4454 .block_erase = erase_chip_block_jedec,
4455 }
4456 },
Sean Nelson35727f72010-01-28 23:55:12 +00004457 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004458 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004459 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004460
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004461 {
4462 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004463 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004464 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004465 .manufacture_id = SST_ID,
4466 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004467 .total_size = 1024,
4468 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004469 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004470 .tested = TEST_UNTESTED,
4471 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004472 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004473 .block_erasers =
4474 {
4475 {
4476 .eraseblocks = { {4 * 1024, 256} },
4477 .block_erase = erase_sector_jedec,
4478 }, {
4479 .eraseblocks = { {64 * 1024, 16} },
4480 .block_erase = erase_block_jedec,
4481 }, {
4482 .eraseblocks = { {1024 * 1024, 1} },
4483 .block_erase = erase_chip_block_jedec,
4484 }
4485 },
Sean Nelson35727f72010-01-28 23:55:12 +00004486 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004487 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004488 },
4489
4490 {
4491 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004492 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004493 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004494 .manufacture_id = SST_ID,
4495 .model_id = SST_49LF002A,
4496 .total_size = 256,
4497 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004498 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004499 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004500 .probe = probe_jedec,
4501 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004502 .block_erasers =
4503 {
4504 {
4505 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004506 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004507 }, {
4508 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004509 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004510 }, {
4511 .eraseblocks = { {256 * 1024, 1} },
4512 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4513 }
4514 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004515 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004516 .unlock = unlock_sst_fwhub,
4517 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004518 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004519 },
4520
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004521 {
4522 .vendor = "SST",
4523 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004524 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004525 .manufacture_id = SST_ID,
4526 .model_id = SST_49LF003A,
4527 .total_size = 384,
4528 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004529 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004530 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004531 .probe = probe_jedec,
4532 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004533 .block_erasers =
4534 {
4535 {
4536 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004537 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004538 }, {
4539 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004540 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004541 }, {
4542 .eraseblocks = { {384 * 1024, 1} },
4543 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4544 }
4545 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004546 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004547 .unlock = unlock_sst_fwhub,
4548 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004549 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004550 },
4551
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004552 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004553 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4554 * and is only honored for 64k block erase, but not 4k sector erase.
4555 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004556 .vendor = "SST",
4557 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004558 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004559 .manufacture_id = SST_ID,
4560 .model_id = SST_49LF004A,
4561 .total_size = 512,
4562 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004563 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004564 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004565 .probe = probe_jedec,
4566 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004567 .block_erasers =
4568 {
4569 {
4570 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004571 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004572 }, {
4573 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004574 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004575 }, {
4576 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004577 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004578 },
4579 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004580 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004581 .unlock = unlock_sst_fwhub,
4582 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004583 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004584 },
4585
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004586 {
4587 .vendor = "SST",
4588 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004589 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004590 .manufacture_id = SST_ID,
4591 .model_id = SST_49LF004C,
4592 .total_size = 512,
4593 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004594 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004595 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004596 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004597 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004598 .block_erasers =
4599 {
4600 {
4601 .eraseblocks = { {4 * 1024, 128} },
4602 .block_erase = erase_sector_49lfxxxc,
4603 }, {
4604 .eraseblocks = {
4605 {64 * 1024, 7},
4606 {32 * 1024, 1},
4607 {8 * 1024, 2},
4608 {16 * 1024, 1},
4609 },
Sean Nelson69e58112010-03-23 17:10:28 +00004610 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004611 }
4612 },
Sean Nelson69e58112010-03-23 17:10:28 +00004613 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004614 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004615 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004616 },
4617
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004618 {
4619 .vendor = "SST",
4620 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004621 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004622 .manufacture_id = SST_ID,
4623 .model_id = SST_49LF008A,
4624 .total_size = 1024,
4625 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004626 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004627 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004628 .probe = probe_jedec,
4629 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004630 .block_erasers =
4631 {
4632 {
4633 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004634 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004635 }, {
4636 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004637 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004638 }, {
4639 .eraseblocks = { {1024 * 1024, 1} },
4640 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4641 }
4642 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004643 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004644 .unlock = unlock_sst_fwhub,
4645 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004646 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004647 },
4648
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004649 {
4650 .vendor = "SST",
4651 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004652 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004653 .manufacture_id = SST_ID,
4654 .model_id = SST_49LF008C,
4655 .total_size = 1024,
4656 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004657 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004658 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004659 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004660 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004661 .block_erasers =
4662 {
4663 {
4664 .eraseblocks = { {4 * 1024, 256} },
4665 .block_erase = erase_sector_49lfxxxc,
4666 }, {
4667 .eraseblocks = {
4668 {64 * 1024, 15},
4669 {32 * 1024, 1},
4670 {8 * 1024, 2},
4671 {16 * 1024, 1},
4672 },
Sean Nelson69e58112010-03-23 17:10:28 +00004673 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004674 }
4675 },
Sean Nelson69e58112010-03-23 17:10:28 +00004676 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004677 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004678 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004679 },
4680
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004681 {
4682 .vendor = "SST",
4683 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004684 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004685 .manufacture_id = SST_ID,
4686 .model_id = SST_49LF016C,
4687 .total_size = 2048,
4688 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004689 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004690 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004691 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004692 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004693 .block_erasers =
4694 {
4695 {
4696 .eraseblocks = { {4 * 1024, 512} },
4697 .block_erase = erase_sector_49lfxxxc,
4698 }, {
4699 .eraseblocks = {
4700 {64 * 1024, 31},
4701 {32 * 1024, 1},
4702 {8 * 1024, 2},
4703 {16 * 1024, 1},
4704 },
Sean Nelson69e58112010-03-23 17:10:28 +00004705 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004706 }
4707 },
Sean Nelson69e58112010-03-23 17:10:28 +00004708 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004709 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004710 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004711 },
4712
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004713 {
4714 .vendor = "SST",
4715 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004716 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004717 .manufacture_id = SST_ID,
4718 .model_id = SST_49LF020,
4719 .total_size = 256,
4720 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004721 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004722 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004723 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004724 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004725 .block_erasers =
4726 {
4727 {
4728 .eraseblocks = { {4 * 1024, 64} },
4729 .block_erase = erase_sector_jedec,
4730 }, {
4731 .eraseblocks = { {16 * 1024, 16} },
4732 .block_erase = erase_block_jedec,
4733 }, {
4734 .eraseblocks = { {256 * 1024, 1} },
4735 .block_erase = NULL,
4736 }
4737 },
Sean Nelson35727f72010-01-28 23:55:12 +00004738 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004739 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004740 },
4741
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004742 {
4743 .vendor = "SST",
4744 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004745 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004746 .manufacture_id = SST_ID,
4747 .model_id = SST_49LF020A,
4748 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004749 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004750 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004751 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004752 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004753 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004754 .block_erasers =
4755 {
4756 {
4757 .eraseblocks = { {4 * 1024, 64} },
4758 .block_erase = erase_sector_jedec,
4759 }, {
4760 .eraseblocks = { {16 * 1024, 16} },
4761 .block_erase = erase_block_jedec,
4762 }, {
4763 .eraseblocks = { {256 * 1024, 1} },
4764 .block_erase = NULL,
4765 }
4766 },
Sean Nelson35727f72010-01-28 23:55:12 +00004767 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004768 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004769 },
4770
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004771 {
4772 .vendor = "SST",
4773 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004774 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004775 .manufacture_id = SST_ID,
4776 .model_id = SST_49LF040,
4777 .total_size = 512,
4778 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004779 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004780 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004781 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004782 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004783 .block_erasers =
4784 {
4785 {
4786 .eraseblocks = { {4 * 1024, 128} },
4787 .block_erase = erase_sector_jedec,
4788 }, {
4789 .eraseblocks = { {64 * 1024, 8} },
4790 .block_erase = erase_block_jedec,
4791 }, {
4792 .eraseblocks = { {512 * 1024, 1} },
4793 .block_erase = NULL,
4794 }
4795 },
Sean Nelson35727f72010-01-28 23:55:12 +00004796 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004797 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004798 },
4799
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004800 {
4801 .vendor = "SST",
4802 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004803 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004804 .manufacture_id = SST_ID,
4805 .model_id = SST_49LF040B,
4806 .total_size = 512,
4807 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004808 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004809 .tested = TEST_OK_PR,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004810 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004811 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004812 .block_erasers =
4813 {
4814 {
4815 .eraseblocks = { {4 * 1024, 128} },
4816 .block_erase = erase_sector_jedec,
4817 }, {
4818 .eraseblocks = { {64 * 1024, 8} },
4819 .block_erase = erase_block_jedec,
4820 }, {
4821 .eraseblocks = { {512 * 1024, 1} },
4822 .block_erase = NULL,
4823 }
4824 },
Sean Nelson35727f72010-01-28 23:55:12 +00004825 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004826 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004827 },
4828
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004829 {
4830 .vendor = "SST",
4831 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004832 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004833 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004834 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004835 .total_size = 1024,
4836 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004837 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004838 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004839 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004840 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004841 .block_erasers =
4842 {
4843 {
4844 .eraseblocks = { {4 * 1024, 256} },
4845 .block_erase = erase_sector_jedec,
4846 }, {
4847 .eraseblocks = { {64 * 1024, 16} },
4848 .block_erase = erase_block_jedec,
4849 }, {
4850 .eraseblocks = { {1024 * 1024, 1} },
4851 .block_erase = NULL,
4852 }
4853 },
Sean Nelson35727f72010-01-28 23:55:12 +00004854 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004855 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004856 },
4857
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004858 {
4859 .vendor = "SST",
4860 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004861 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004862 .manufacture_id = SST_ID,
4863 .model_id = SST_49LF160C,
4864 .total_size = 2048,
4865 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004866 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004867 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004868 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004869 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004870 .block_erasers =
4871 {
4872 {
4873 .eraseblocks = { {4 * 1024, 512} },
4874 .block_erase = erase_sector_49lfxxxc,
4875 }, {
4876 .eraseblocks = {
4877 {64 * 1024, 31},
4878 {32 * 1024, 1},
4879 {8 * 1024, 2},
4880 {16 * 1024, 1},
4881 },
Sean Nelson69e58112010-03-23 17:10:28 +00004882 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004883 }
4884 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004885 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004886 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004887 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004888 },
4889
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004890 {
4891 .vendor = "ST",
4892 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004893 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004894 .manufacture_id = ST_ID,
4895 .model_id = ST_M25P05A,
4896 .total_size = 64,
4897 .page_size = 256,
4898 .tested = TEST_UNTESTED,
4899 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004900 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004901 .block_erasers =
4902 {
4903 {
4904 .eraseblocks = { {32 * 1024, 2} },
4905 .block_erase = spi_block_erase_d8,
4906 }, {
4907 .eraseblocks = { {64 * 1024, 1} },
4908 .block_erase = spi_block_erase_c7,
4909 }
4910 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004911 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004912 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004913 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004914 },
4915
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004916 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4917 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004918 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004919 * only is successful if RDID does not work.
4920 */
4921 {
4922 .vendor = "ST",
4923 .name = "M25P05.RES",
4924 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004925 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004926 .model_id = ST_M25P05_RES,
4927 .total_size = 64,
4928 .page_size = 256,
4929 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004930 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004931 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004932 .block_erasers =
4933 {
4934 {
4935 .eraseblocks = { {32 * 1024, 2} },
4936 .block_erase = spi_block_erase_d8,
4937 }, {
4938 .eraseblocks = { {64 * 1024, 1} },
4939 .block_erase = spi_block_erase_c7,
4940 }
4941 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004942 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004943 .write = spi_chip_write_1, /* 128 */
4944 .read = spi_chip_read,
4945 },
4946
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004947 {
4948 .vendor = "ST",
4949 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004950 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004951 .manufacture_id = ST_ID,
4952 .model_id = ST_M25P10A,
4953 .total_size = 128,
4954 .page_size = 256,
4955 .tested = TEST_UNTESTED,
4956 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004957 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004958 .block_erasers =
4959 {
4960 {
4961 .eraseblocks = { {32 * 1024, 4} },
4962 .block_erase = spi_block_erase_d8,
4963 }, {
4964 .eraseblocks = { {128 * 1024, 1} },
4965 .block_erase = spi_block_erase_c7,
4966 }
4967 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004968 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004969 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004970 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004971 },
4972
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004973 /* The ST M25P10 has the same problem as the M25P05. */
4974 {
4975 .vendor = "ST",
4976 .name = "M25P10.RES",
4977 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004978 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004979 .model_id = ST_M25P10_RES,
4980 .total_size = 128,
4981 .page_size = 256,
4982 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004983 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004984 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004985 .block_erasers =
4986 {
4987 {
4988 .eraseblocks = { {32 * 1024, 4} },
4989 .block_erase = spi_block_erase_d8,
4990 }, {
4991 .eraseblocks = { {128 * 1024, 1} },
4992 .block_erase = spi_block_erase_c7,
4993 }
4994 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00004995 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004996 .write = spi_chip_write_1, /* 128 */
4997 .read = spi_chip_read,
4998 },
4999
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005000 {
5001 .vendor = "ST",
5002 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005003 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005004 .manufacture_id = ST_ID,
5005 .model_id = ST_M25P20,
5006 .total_size = 256,
5007 .page_size = 256,
5008 .tested = TEST_UNTESTED,
5009 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005010 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005011 .block_erasers =
5012 {
5013 {
5014 .eraseblocks = { {64 * 1024, 4} },
5015 .block_erase = spi_block_erase_d8,
5016 }, {
5017 .eraseblocks = { {256 * 1024, 1} },
5018 .block_erase = spi_block_erase_c7,
5019 }
5020 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005021 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005022 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005023 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005024 },
5025
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005026 {
5027 .vendor = "ST",
5028 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005029 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005030 .manufacture_id = ST_ID,
5031 .model_id = ST_M25P40,
5032 .total_size = 512,
5033 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005034 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005035 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005036 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005037 .block_erasers =
5038 {
5039 {
5040 .eraseblocks = { {64 * 1024, 8} },
5041 .block_erase = spi_block_erase_d8,
5042 }, {
5043 .eraseblocks = { {512 * 1024, 1} },
5044 .block_erase = spi_block_erase_c7,
5045 }
5046 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005047 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005048 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005049 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005050 },
5051
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005052 {
5053 .vendor = "ST",
5054 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005055 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005056 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005057 .model_id = ST_M25P40_RES,
5058 .total_size = 512,
5059 .page_size = 256,
5060 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00005061 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005062 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005063 .block_erasers =
5064 {
5065 {
5066 .eraseblocks = { {64 * 1024, 8} },
5067 .block_erase = spi_block_erase_d8,
5068 }, {
5069 .eraseblocks = { {512 * 1024, 1} },
5070 .block_erase = spi_block_erase_c7,
5071 }
5072 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005073 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005074 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005075 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005076 },
5077
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005078 {
5079 .vendor = "ST",
5080 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005081 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005082 .manufacture_id = ST_ID,
5083 .model_id = ST_M25P80,
5084 .total_size = 1024,
5085 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005086 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005087 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005088 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005089 .block_erasers =
5090 {
5091 {
5092 .eraseblocks = { {64 * 1024, 16} },
5093 .block_erase = spi_block_erase_d8,
5094 }, {
5095 .eraseblocks = { {1024 * 1024, 1} },
5096 .block_erase = spi_block_erase_c7,
5097 }
5098 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005099 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005100 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005101 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005102 },
5103
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005104 {
5105 .vendor = "ST",
5106 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005107 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005108 .manufacture_id = ST_ID,
5109 .model_id = ST_M25P16,
5110 .total_size = 2048,
5111 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005112 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005113 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005114 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005115 .block_erasers =
5116 {
5117 {
5118 .eraseblocks = { {64 * 1024, 32} },
5119 .block_erase = spi_block_erase_d8,
5120 }, {
5121 .eraseblocks = { {2 * 1024 * 1024, 1} },
5122 .block_erase = spi_block_erase_c7,
5123 }
5124 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005125 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005126 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005127 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005128 },
5129
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005130 {
5131 .vendor = "ST",
5132 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005133 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005134 .manufacture_id = ST_ID,
5135 .model_id = ST_M25P32,
5136 .total_size = 4096,
5137 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00005138 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005139 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005140 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005141 .block_erasers =
5142 {
5143 {
5144 .eraseblocks = { {64 * 1024, 64} },
5145 .block_erase = spi_block_erase_d8,
5146 }, {
5147 .eraseblocks = { {4 * 1024 * 1024, 1} },
5148 .block_erase = spi_block_erase_c7,
5149 }
5150 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005151 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005152 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005153 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005154 },
5155
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005156 {
5157 .vendor = "ST",
5158 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005159 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005160 .manufacture_id = ST_ID,
5161 .model_id = ST_M25P64,
5162 .total_size = 8192,
5163 .page_size = 256,
5164 .tested = TEST_UNTESTED,
5165 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005166 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005167 .block_erasers =
5168 {
5169 {
5170 .eraseblocks = { {64 * 1024, 128} },
5171 .block_erase = spi_block_erase_d8,
5172 }, {
5173 .eraseblocks = { {8 * 1024 * 1024, 1} },
5174 .block_erase = spi_block_erase_c7,
5175 }
5176 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005177 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005178 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005179 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005180 },
5181
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005182 {
5183 .vendor = "ST",
5184 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005185 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005186 .manufacture_id = ST_ID,
5187 .model_id = ST_M25P128,
5188 .total_size = 16384,
5189 .page_size = 256,
5190 .tested = TEST_UNTESTED,
5191 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005192 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005193 .block_erasers =
5194 {
5195 {
5196 .eraseblocks = { {256 * 1024, 64} },
5197 .block_erase = spi_block_erase_d8,
5198 }, {
5199 .eraseblocks = { {16 * 1024 * 1024, 1} },
5200 .block_erase = spi_block_erase_c7,
5201 }
5202 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005203 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005204 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005205 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005206 },
5207
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005208 {
5209 .vendor = "ST",
5210 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005211 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005212 .manufacture_id = ST_ID,
5213 .model_id = ST_M29F002B,
5214 .total_size = 256,
5215 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005216 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005217 .tested = TEST_UNTESTED,
5218 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005219 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005220 .block_erasers =
5221 {
5222 {
5223 .eraseblocks = {
5224 {16 * 1024, 1},
5225 {8 * 1024, 2},
5226 {32 * 1024, 1},
5227 {64 * 1024, 3},
5228 },
5229 .block_erase = erase_sector_jedec,
5230 }, {
5231 .eraseblocks = { {256 * 1024, 1} },
5232 .block_erase = erase_chip_block_jedec,
5233 }
5234 },
Sean Nelson35727f72010-01-28 23:55:12 +00005235 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005236 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005237 },
5238
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005239 {
5240 .vendor = "ST",
5241 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005242 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005243 .manufacture_id = ST_ID,
5244 .model_id = ST_M29F002T,
5245 .total_size = 256,
5246 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005247 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
5248 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005249 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005250 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005251 .block_erasers =
5252 {
5253 {
5254 .eraseblocks = {
5255 {64 * 1024, 3},
5256 {32 * 1024, 1},
5257 {8 * 1024, 2},
5258 {16 * 1024, 1},
5259 },
5260 .block_erase = erase_sector_jedec,
5261 }, {
5262 .eraseblocks = { {256 * 1024, 1} },
5263 .block_erase = erase_chip_block_jedec,
5264 }
5265 },
Sean Nelson35727f72010-01-28 23:55:12 +00005266 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005267 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005268 },
5269
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005270 {
5271 .vendor = "ST",
5272 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005273 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005274 .manufacture_id = ST_ID,
5275 .model_id = ST_M29F040B,
5276 .total_size = 512,
5277 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005278 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5279 .tested = TEST_UNTESTED,
5280 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005281 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005282 .block_erasers =
5283 {
5284 {
5285 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00005286 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005287 }, {
5288 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005289 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005290 }
5291 },
Sean Nelson35727f72010-01-28 23:55:12 +00005292 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005293 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005294 },
5295
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005296 {
Sean Nelson35727f72010-01-28 23:55:12 +00005297 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005298 .vendor = "ST",
5299 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005300 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005301 .manufacture_id = ST_ID,
5302 .model_id = ST_M29F400BT,
5303 .total_size = 512,
5304 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005305 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005306 .tested = TEST_UNTESTED,
5307 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005308 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005309 .block_erasers =
5310 {
5311 {
5312 .eraseblocks = {
5313 {64 * 1024, 7},
5314 {32 * 1024, 1},
5315 {8 * 1024, 2},
5316 {16 * 1024, 1},
5317 },
5318 .block_erase = block_erase_m29f400bt,
5319 }, {
5320 .eraseblocks = { {512 * 1024, 1} },
5321 .block_erase = block_erase_chip_m29f400bt,
5322 }
5323 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005324 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005325 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005326 },
5327
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005328 {
5329 .vendor = "ST",
5330 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005331 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005332 .manufacture_id = ST_ID,
5333 .model_id = ST_M29W010B,
5334 .total_size = 128,
5335 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005336 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005337 .tested = TEST_UNTESTED,
5338 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005339 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005340 .block_erasers =
5341 {
5342 {
5343 .eraseblocks = { {16 * 1024, 8}, },
5344 .block_erase = erase_sector_jedec,
5345 }, {
5346 .eraseblocks = { {128 * 1024, 1} },
5347 .block_erase = erase_chip_block_jedec,
5348 }
5349 },
Sean Nelson35727f72010-01-28 23:55:12 +00005350 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005351 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005352 },
5353
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005354 {
5355 .vendor = "ST",
5356 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005357 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005358 .manufacture_id = ST_ID,
5359 .model_id = ST_M29W040B,
5360 .total_size = 512,
5361 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005362 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005363 .tested = TEST_UNTESTED,
5364 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005365 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005366 .block_erasers =
5367 {
5368 {
5369 .eraseblocks = { {64 * 1024, 8}, },
5370 .block_erase = erase_sector_jedec,
5371 }, {
5372 .eraseblocks = { {512 * 1024, 1} },
5373 .block_erase = erase_chip_block_jedec,
5374 }
5375 },
Sean Nelson35727f72010-01-28 23:55:12 +00005376 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005377 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005378 },
5379
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005380 {
5381 .vendor = "ST",
5382 .name = "M29W512B",
5383 .bustype = CHIP_BUSTYPE_PARALLEL,
5384 .manufacture_id = ST_ID,
5385 .model_id = ST_M29W512B,
5386 .total_size = 64,
5387 .page_size = 64 * 1024,
5388 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5389 .tested = TEST_OK_PREW,
5390 .probe = probe_jedec,
5391 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005392 .block_erasers =
5393 {
5394 {
5395 .eraseblocks = { {64 * 1024, 1} },
5396 .block_erase = erase_chip_block_jedec,
5397 }
5398 },
5399 .write = write_jedec_1,
5400 .read = read_memmapped,
5401 },
5402
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005403 {
5404 .vendor = "ST",
5405 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00005406 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005407 .manufacture_id = ST_ID,
5408 .model_id = ST_M50FLW040A,
5409 .total_size = 512,
5410 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005411 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005412 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005413 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005414 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005415 .block_erasers =
5416 {
5417 {
Sean Nelson329bde72010-01-19 16:39:19 +00005418 .eraseblocks = {
5419 {4 * 1024, 16}, /* sector */
5420 {64 * 1024, 5}, /* block */
5421 {4 * 1024, 16}, /* sector */
5422 {4 * 1024, 16}, /* sector */
5423 },
5424 .block_erase = NULL,
5425 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005426 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005427 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005428 }, {
5429 .eraseblocks = { {512 * 1024, 1} },
5430 .block_erase = erase_chip_stm50flw0x0x,
5431 }
5432 },
Sean Nelson28accc22010-03-19 18:47:06 +00005433 .unlock = unlock_stm50flw0x0x,
5434 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005435 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005436 },
5437
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005438 {
5439 .vendor = "ST",
5440 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005441 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005442 .manufacture_id = ST_ID,
5443 .model_id = ST_M50FLW040B,
5444 .total_size = 512,
5445 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005446 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005447 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005448 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005449 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005450 .block_erasers =
5451 {
5452 {
Sean Nelson329bde72010-01-19 16:39:19 +00005453 .eraseblocks = {
5454 {4 * 1024, 16}, /* sector */
5455 {4 * 1024, 16}, /* sector */
5456 {64 * 1024, 5}, /* block */
5457 {4 * 1024, 16}, /* sector */
5458 },
5459 .block_erase = NULL,
5460 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005461 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005462 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005463 }, {
5464 .eraseblocks = { {512 * 1024, 1} },
5465 .block_erase = erase_chip_stm50flw0x0x,
5466 }
5467 },
Sean Nelson28accc22010-03-19 18:47:06 +00005468 .unlock = unlock_stm50flw0x0x,
5469 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005470 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005471 },
5472
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005473 {
5474 .vendor = "ST",
5475 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005476 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005477 .manufacture_id = ST_ID,
5478 .model_id = ST_M50FLW080A,
5479 .total_size = 1024,
5480 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005481 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00005482 .tested = TEST_UNTESTED,
5483 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005484 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005485 .block_erasers =
5486 {
5487 {
Sean Nelson329bde72010-01-19 16:39:19 +00005488 .eraseblocks = {
5489 {4 * 1024, 16}, /* sector */
5490 {64 * 1024, 13}, /* block */
5491 {4 * 1024, 16}, /* sector */
5492 {4 * 1024, 16}, /* sector */
5493 },
5494 .block_erase = NULL,
5495 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005496 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005497 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005498 }, {
5499 .eraseblocks = { {1024 * 1024, 1} },
5500 .block_erase = erase_chip_stm50flw0x0x,
5501 }
5502 },
Sean Nelson28accc22010-03-19 18:47:06 +00005503 .unlock = unlock_stm50flw0x0x,
5504 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005505 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005506 },
5507
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005508 {
5509 .vendor = "ST",
5510 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005511 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005512 .manufacture_id = ST_ID,
5513 .model_id = ST_M50FLW080B,
5514 .total_size = 1024,
5515 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005516 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005517 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005518 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005519 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005520 .block_erasers =
5521 {
5522 {
Sean Nelson329bde72010-01-19 16:39:19 +00005523 .eraseblocks = {
5524 {4 * 1024, 16}, /* sector */
5525 {4 * 1024, 16}, /* sector */
5526 {64 * 1024, 13}, /* block */
5527 {4 * 1024, 16}, /* sector */
5528 },
5529 .block_erase = NULL,
5530 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005531 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005532 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005533 }, {
5534 .eraseblocks = { {1024 * 1024, 1} },
5535 .block_erase = erase_chip_stm50flw0x0x,
5536 }
5537 },
Sean Nelson28accc22010-03-19 18:47:06 +00005538 .unlock = unlock_stm50flw0x0x,
5539 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005540 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005541 },
5542
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005543 {
5544 .vendor = "ST",
5545 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005546 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005547 .manufacture_id = ST_ID,
5548 .model_id = ST_M50FW002,
5549 .total_size = 256,
5550 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005551 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005552 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005553 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005554 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005555 .block_erasers =
5556 {
5557 {
5558 .eraseblocks = {
5559 {64 * 1024, 3},
5560 {32 * 1024, 1},
5561 {8 * 1024, 2},
5562 {16 * 1024, 1},
5563 },
Sean Nelson28accc22010-03-19 18:47:06 +00005564 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005565 }, {
5566 .eraseblocks = { {256 * 1024, 1} },
5567 .block_erase = erase_chip_stm50flw0x0x,
5568 }
5569 },
Sean Nelson28accc22010-03-19 18:47:06 +00005570 .unlock = unlock_stm50flw0x0x,
5571 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005572 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005573 },
5574
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005575 {
5576 .vendor = "ST",
5577 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005578 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005579 .manufacture_id = ST_ID,
5580 .model_id = ST_M50FW016,
5581 .total_size = 2048,
5582 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005583 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005584 .tested = TEST_UNTESTED,
5585 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005586 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005587 .block_erasers =
5588 {
5589 {
5590 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005591 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005592 }, {
5593 .eraseblocks = { {2 * 1024 * 1024, 1} },
5594 .block_erase = erase_chip_stm50flw0x0x,
5595 }
5596 },
Sean Nelson28accc22010-03-19 18:47:06 +00005597 .unlock = unlock_stm50flw0x0x,
5598 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005599 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005600 },
5601
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005602 {
5603 .vendor = "ST",
5604 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005605 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005606 .manufacture_id = ST_ID,
5607 .model_id = ST_M50FW040,
5608 .total_size = 512,
5609 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005610 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005611 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005612 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005613 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005614 .block_erasers =
5615 {
5616 {
5617 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005618 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005619 }, {
5620 .eraseblocks = { {512 * 1024, 1} },
5621 .block_erase = erase_chip_stm50flw0x0x,
5622 }
5623 },
Sean Nelson28accc22010-03-19 18:47:06 +00005624 .unlock = unlock_stm50flw0x0x,
5625 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005626 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005627 },
5628
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005629 {
5630 .vendor = "ST",
5631 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005632 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005633 .manufacture_id = ST_ID,
5634 .model_id = ST_M50FW080,
5635 .total_size = 1024,
5636 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005637 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005638 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005639 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005640 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005641 .block_erasers =
5642 {
5643 {
5644 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005645 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005646 }, {
5647 .eraseblocks = { {1024 * 1024, 1} },
5648 .block_erase = erase_chip_stm50flw0x0x,
5649 }
5650 },
Sean Nelson28accc22010-03-19 18:47:06 +00005651 .unlock = unlock_stm50flw0x0x,
5652 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005653 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005654 },
5655
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005656 {
5657 .vendor = "ST",
5658 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005659 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005660 .manufacture_id = ST_ID,
5661 .model_id = ST_M50LPW116,
5662 .total_size = 2048,
5663 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005664 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005665 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005666 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005667 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005668 .block_erasers =
5669 {
5670 {
5671 .eraseblocks = {
5672 {4 * 1024, 16},
5673 {64 * 1024, 30},
5674 {32 * 1024, 1},
5675 {8 * 1024, 2},
5676 {16 * 1024, 1},
5677 },
Sean Nelson28accc22010-03-19 18:47:06 +00005678 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005679 }, {
5680 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005681 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005682 }
5683 },
Sean Nelson28accc22010-03-19 18:47:06 +00005684 .unlock = unlock_stm50flw0x0x,
5685 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005686 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005687 },
5688
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005689 {
5690 .vendor = "SyncMOS",
5691 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005692 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005693 .manufacture_id = SYNCMOS_ID,
5694 .model_id = S29C31004T,
5695 .total_size = 512,
5696 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005697 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005698 .tested = TEST_UNTESTED,
5699 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005700 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005701 .block_erasers =
5702 {
5703 {
5704 .eraseblocks = { {1 * 1024, 512} },
5705 .block_erase = erase_sector_jedec,
5706 }, {
5707 .eraseblocks = { {512 * 1024, 1} },
5708 .block_erase = erase_chip_block_jedec,
5709 },
5710 },
Sean Nelson35727f72010-01-28 23:55:12 +00005711 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005712 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005713 },
5714
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005715 {
5716 .vendor = "SyncMOS",
5717 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005718 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005719 .manufacture_id = SYNCMOS_ID,
5720 .model_id = S29C51001T,
5721 .total_size = 128,
5722 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005723 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005724 .tested = TEST_UNTESTED,
5725 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005726 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005727 .block_erasers =
5728 {
5729 {
5730 .eraseblocks = { {512, 256} },
5731 .block_erase = erase_sector_jedec,
5732 }, {
5733 .eraseblocks = { {128 * 1024, 1} },
5734 .block_erase = erase_chip_block_jedec,
5735 },
5736 },
Sean Nelson35727f72010-01-28 23:55:12 +00005737 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005738 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005739 },
5740
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005741 {
5742 .vendor = "SyncMOS",
5743 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005744 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005745 .manufacture_id = SYNCMOS_ID,
5746 .model_id = S29C51002T,
5747 .total_size = 256,
5748 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005749 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005750 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005751 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005752 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005753 .block_erasers =
5754 {
5755 {
5756 .eraseblocks = { {512, 512} },
5757 .block_erase = erase_sector_jedec,
5758 }, {
5759 .eraseblocks = { {256 * 1024, 1} },
5760 .block_erase = erase_chip_block_jedec,
5761 },
5762 },
Sean Nelson35727f72010-01-28 23:55:12 +00005763 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005764 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005765 },
5766
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005767 {
5768 .vendor = "SyncMOS",
5769 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005770 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005771 .manufacture_id = SYNCMOS_ID,
5772 .model_id = S29C51004T,
5773 .total_size = 512,
5774 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005775 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005776 .tested = TEST_UNTESTED,
5777 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005778 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005779 .block_erasers =
5780 {
5781 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005782 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005783 .block_erase = erase_sector_jedec,
5784 }, {
5785 .eraseblocks = { {512 * 1024, 1} },
5786 .block_erase = erase_chip_block_jedec,
5787 },
5788 },
Sean Nelson35727f72010-01-28 23:55:12 +00005789 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005790 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005791 },
5792
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005793 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005794 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005795 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005796 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005797 .manufacture_id = TI_OLD_ID,
5798 .model_id = TI_TMS29F002RB,
5799 .total_size = 256,
5800 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005801 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005802 .tested = TEST_UNTESTED,
5803 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005804 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005805 .block_erasers =
5806 {
5807 {
5808 .eraseblocks = {
5809 {16 * 1024, 1},
5810 {8 * 1024, 2},
5811 {32 * 1024, 1},
5812 {64 * 1024, 3},
5813 },
5814 .block_erase = erase_sector_jedec,
5815 }, {
5816 .eraseblocks = { {256 * 1024, 1} },
5817 .block_erase = erase_chip_block_jedec,
5818 },
5819 },
Sean Nelson35727f72010-01-28 23:55:12 +00005820 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005821 .read = read_memmapped,
5822 },
5823
5824 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005825 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005826 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005827 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005828 .manufacture_id = TI_OLD_ID,
5829 .model_id = TI_TMS29F002RT,
5830 .total_size = 256,
5831 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005832 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005833 .tested = TEST_UNTESTED,
5834 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005835 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005836 .block_erasers =
5837 {
5838 {
5839 .eraseblocks = {
5840 {64 * 1024, 3},
5841 {32 * 1024, 1},
5842 {8 * 1024, 2},
5843 {16 * 1024, 1},
5844 },
5845 .block_erase = erase_sector_jedec,
5846 }, {
5847 .eraseblocks = { {256 * 1024, 1} },
5848 .block_erase = erase_chip_block_jedec,
5849 },
5850 },
Sean Nelson35727f72010-01-28 23:55:12 +00005851 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005852 .read = read_memmapped,
5853 },
5854
5855 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005856 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00005857 .name = "W25Q80",
5858 .bustype = CHIP_BUSTYPE_SPI,
5859 .manufacture_id = WINBOND_NEX_ID,
5860 .model_id = W_25Q80,
5861 .total_size = 1024,
5862 .page_size = 256,
5863 .tested = TEST_UNTESTED,
5864 .probe = probe_spi_rdid,
5865 .probe_timing = TIMING_ZERO,
5866 .block_erasers =
5867 {
5868 {
5869 .eraseblocks = { {4 * 1024, 256} },
5870 .block_erase = spi_block_erase_20,
5871 }, {
5872 .eraseblocks = { {32 * 1024, 32} },
5873 .block_erase = spi_block_erase_52,
5874 }, {
5875 .eraseblocks = { {64 * 1024, 16} },
5876 .block_erase = spi_block_erase_d8,
5877 }, {
5878 .eraseblocks = { {1024 * 1024, 1} },
5879 .block_erase = spi_block_erase_60,
5880 }, {
5881 .eraseblocks = { {1024 * 1024, 1} },
5882 .block_erase = spi_block_erase_c7,
5883 }
5884 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005885 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00005886 .write = spi_chip_write_256,
5887 .read = spi_chip_read,
5888 },
5889
5890 {
5891 .vendor = "Winbond",
5892 .name = "W25Q16",
5893 .bustype = CHIP_BUSTYPE_SPI,
5894 .manufacture_id = WINBOND_NEX_ID,
5895 .model_id = W_25Q16,
5896 .total_size = 2048,
5897 .page_size = 256,
5898 .tested = TEST_UNTESTED,
5899 .probe = probe_spi_rdid,
5900 .probe_timing = TIMING_ZERO,
5901 .block_erasers =
5902 {
5903 {
5904 .eraseblocks = { {4 * 1024, 512} },
5905 .block_erase = spi_block_erase_20,
5906 }, {
5907 .eraseblocks = { {32 * 1024, 64} },
5908 .block_erase = spi_block_erase_52,
5909 }, {
5910 .eraseblocks = { {64 * 1024, 32} },
5911 .block_erase = spi_block_erase_d8,
5912 }, {
5913 .eraseblocks = { {2 * 1024 * 1024, 1} },
5914 .block_erase = spi_block_erase_60,
5915 }, {
5916 .eraseblocks = { {2 * 1024 * 1024, 1} },
5917 .block_erase = spi_block_erase_c7,
5918 }
5919 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005920 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00005921 .write = spi_chip_write_256,
5922 .read = spi_chip_read,
5923 },
5924
5925 {
5926 .vendor = "Winbond",
5927 .name = "W25Q32",
5928 .bustype = CHIP_BUSTYPE_SPI,
5929 .manufacture_id = WINBOND_NEX_ID,
5930 .model_id = W_25Q32,
5931 .total_size = 4096,
5932 .page_size = 256,
5933 .tested = TEST_UNTESTED,
5934 .probe = probe_spi_rdid,
5935 .probe_timing = TIMING_ZERO,
5936 .block_erasers =
5937 {
5938 {
5939 .eraseblocks = { {4 * 1024, 1024} },
5940 .block_erase = spi_block_erase_20,
5941 }, {
5942 .eraseblocks = { {32 * 1024, 128} },
5943 .block_erase = spi_block_erase_52,
5944 }, {
5945 .eraseblocks = { {64 * 1024, 64} },
5946 .block_erase = spi_block_erase_d8,
5947 }, {
5948 .eraseblocks = { {4 * 1024 * 1024, 1} },
5949 .block_erase = spi_block_erase_60,
5950 }, {
5951 .eraseblocks = { {4 * 1024 * 1024, 1} },
5952 .block_erase = spi_block_erase_c7,
5953 }
5954 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005955 .unlock = spi_disable_blockprotect,
Rudolf Marekce1c7982010-04-20 19:34:31 +00005956 .write = spi_chip_write_256,
5957 .read = spi_chip_read,
5958 },
5959
5960 {
5961 .vendor = "Winbond",
David Hendricksc4acec92010-06-24 11:39:57 +00005962 .name = "W25Q64",
5963 .bustype = CHIP_BUSTYPE_SPI,
5964 .manufacture_id = WINBOND_NEX_ID,
5965 .model_id = W_25Q64,
5966 .total_size = 8192,
5967 .page_size = 256,
5968 .tested = TEST_OK_PRW,
5969 .probe = probe_spi_rdid,
5970 .probe_timing = TIMING_ZERO,
5971 .block_erasers =
5972 {
5973 {
5974 .eraseblocks = { {4 * 1024, 2048} },
5975 .block_erase = spi_block_erase_20,
5976 }, {
5977 .eraseblocks = { {32 * 1024, 256} },
5978 .block_erase = spi_block_erase_52,
5979 }, {
5980 .eraseblocks = { {64 * 1024, 128} },
5981 .block_erase = spi_block_erase_d8,
5982 }, {
5983 .eraseblocks = { {8 * 1024 * 1024, 1} },
5984 .block_erase = spi_block_erase_60,
5985 }, {
5986 .eraseblocks = { {8 * 1024 * 1024, 1} },
5987 .block_erase = spi_block_erase_c7,
5988 }
5989 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00005990 .unlock = spi_disable_blockprotect,
David Hendricksc4acec92010-06-24 11:39:57 +00005991 .write = spi_chip_write_256,
5992 .read = spi_chip_read,
5993 },
5994
5995 {
5996 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005997 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005998 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005999 .manufacture_id = WINBOND_NEX_ID,
6000 .model_id = W_25X10,
6001 .total_size = 128,
6002 .page_size = 256,
6003 .tested = TEST_UNTESTED,
6004 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006005 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006006 .block_erasers =
6007 {
6008 {
6009 .eraseblocks = { {4 * 1024, 32} },
6010 .block_erase = spi_block_erase_20,
6011 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006012 .eraseblocks = { {64 * 1024, 2} },
6013 .block_erase = spi_block_erase_d8,
6014 }, {
6015 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006016 .block_erase = spi_block_erase_c7,
6017 }
6018 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006019 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006020 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006021 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006022 },
6023
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006024 {
6025 .vendor = "Winbond",
6026 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006027 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006028 .manufacture_id = WINBOND_NEX_ID,
6029 .model_id = W_25X20,
6030 .total_size = 256,
6031 .page_size = 256,
6032 .tested = TEST_UNTESTED,
6033 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006034 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006035 .block_erasers =
6036 {
6037 {
6038 .eraseblocks = { {4 * 1024, 64} },
6039 .block_erase = spi_block_erase_20,
6040 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006041 .eraseblocks = { {64 * 1024, 4} },
6042 .block_erase = spi_block_erase_d8,
6043 }, {
6044 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006045 .block_erase = spi_block_erase_c7,
6046 }
6047 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006048 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006049 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006050 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006051 },
6052
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006053 {
6054 .vendor = "Winbond",
6055 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006056 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006057 .manufacture_id = WINBOND_NEX_ID,
6058 .model_id = W_25X40,
6059 .total_size = 512,
6060 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006061 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006062 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006063 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006064 .block_erasers =
6065 {
6066 {
6067 .eraseblocks = { {4 * 1024, 128} },
6068 .block_erase = spi_block_erase_20,
6069 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006070 .eraseblocks = { {64 * 1024, 8} },
6071 .block_erase = spi_block_erase_d8,
6072 }, {
6073 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006074 .block_erase = spi_block_erase_c7,
6075 }
6076 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006077 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006078 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006079 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006080 },
6081
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006082 {
6083 .vendor = "Winbond",
6084 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006085 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006086 .manufacture_id = WINBOND_NEX_ID,
6087 .model_id = W_25X80,
6088 .total_size = 1024,
6089 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006090 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006091 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006092 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006093 .block_erasers =
6094 {
6095 {
6096 .eraseblocks = { {4 * 1024, 256} },
6097 .block_erase = spi_block_erase_20,
6098 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006099 .eraseblocks = { {64 * 1024, 16} },
6100 .block_erase = spi_block_erase_d8,
6101 }, {
6102 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006103 .block_erase = spi_block_erase_c7,
6104 }
6105 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006106 .unlock = spi_disable_blockprotect,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00006107 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006108 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00006109 },
6110
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006111 {
6112 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00006113 .name = "W25x16",
6114 .bustype = CHIP_BUSTYPE_SPI,
6115 .manufacture_id = WINBOND_NEX_ID,
6116 .model_id = W_25X16,
6117 .total_size = 2048,
6118 .page_size = 256,
6119 .tested = TEST_OK_PR,
6120 .probe = probe_spi_rdid,
6121 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006122 .block_erasers =
6123 {
6124 {
6125 .eraseblocks = { {4 * 1024, 512} },
6126 .block_erase = spi_block_erase_20,
6127 }, {
6128 .eraseblocks = { {32 * 1024, 64} },
6129 .block_erase = spi_block_erase_52,
6130 }, {
6131 .eraseblocks = { {64 * 1024, 32} },
6132 .block_erase = spi_block_erase_d8,
6133 }, {
6134 .eraseblocks = { {2 * 1024 * 1024, 1} },
6135 .block_erase = spi_block_erase_60,
6136 }, {
6137 .eraseblocks = { {2 * 1024 * 1024, 1} },
6138 .block_erase = spi_block_erase_c7,
6139 }
6140 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006141 .unlock = spi_disable_blockprotect,
Hector Martina721ae22009-07-11 19:39:11 +00006142 .write = spi_chip_write_256,
6143 .read = spi_chip_read,
6144 },
6145
6146 {
6147 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00006148 .name = "W25x32",
6149 .bustype = CHIP_BUSTYPE_SPI,
6150 .manufacture_id = WINBOND_NEX_ID,
6151 .model_id = W_25X32,
6152 .total_size = 4096,
6153 .page_size = 256,
6154 .tested = TEST_OK_PROBE,
6155 .probe = probe_spi_rdid,
6156 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006157 .block_erasers =
6158 {
6159 {
6160 .eraseblocks = { {4 * 1024, 1024} },
6161 .block_erase = spi_block_erase_20,
6162 }, {
6163 .eraseblocks = { {32 * 1024, 128} },
6164 .block_erase = spi_block_erase_52,
6165 }, {
6166 .eraseblocks = { {64 * 1024, 64} },
6167 .block_erase = spi_block_erase_d8,
6168 }, {
6169 .eraseblocks = { {4 * 1024 * 1024, 1} },
6170 .block_erase = spi_block_erase_60,
6171 }, {
6172 .eraseblocks = { {4 * 1024 * 1024, 1} },
6173 .block_erase = spi_block_erase_c7,
6174 }
6175 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006176 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00006177 .write = spi_chip_write_256,
6178 .read = spi_chip_read,
6179 },
6180
6181 {
6182 .vendor = "Winbond",
6183 .name = "W25x64",
6184 .bustype = CHIP_BUSTYPE_SPI,
6185 .manufacture_id = WINBOND_NEX_ID,
6186 .model_id = W_25X64,
6187 .total_size = 8192,
6188 .page_size = 256,
6189 .tested = TEST_UNTESTED,
6190 .probe = probe_spi_rdid,
6191 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006192 .block_erasers =
6193 {
6194 {
6195 .eraseblocks = { {4 * 1024, 2048} },
6196 .block_erase = spi_block_erase_20,
6197 }, {
6198 .eraseblocks = { {32 * 1024, 256} },
6199 .block_erase = spi_block_erase_52,
6200 }, {
6201 .eraseblocks = { {64 * 1024, 128} },
6202 .block_erase = spi_block_erase_d8,
6203 }, {
6204 .eraseblocks = { {8 * 1024 * 1024, 1} },
6205 .block_erase = spi_block_erase_60,
6206 }, {
6207 .eraseblocks = { {8 * 1024 * 1024, 1} },
6208 .block_erase = spi_block_erase_c7,
6209 }
6210 },
Carl-Daniel Hailfinger29a1c662010-07-14 20:21:22 +00006211 .unlock = spi_disable_blockprotect,
Zheng Bao1db2b752009-11-26 11:05:01 +00006212 .write = spi_chip_write_256,
6213 .read = spi_chip_read,
6214 },
6215
6216 {
6217 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006218 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006219 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006220 .manufacture_id = WINBOND_ID,
6221 .model_id = W_29C011,
6222 .total_size = 128,
6223 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006224 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006225 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006226 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006227 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006228 .block_erasers =
6229 {
6230 {
6231 .eraseblocks = { {128 * 1024, 1} },
6232 .block_erase = erase_chip_block_jedec,
6233 }
6234 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006235 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006236 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006237 },
6238
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006239 {
6240 .vendor = "Winbond",
6241 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00006242 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006243 .manufacture_id = WINBOND_ID,
6244 .model_id = W_29C020C,
6245 .total_size = 256,
6246 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006247 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006248 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006249 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006250 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006251 .block_erasers =
6252 {
6253 {
6254 .eraseblocks = { {256 * 1024, 1} },
6255 .block_erase = erase_chip_block_jedec,
6256 }
6257 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006258 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006259 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006260 },
6261
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006262 {
6263 .vendor = "Winbond",
6264 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00006265 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006266 .manufacture_id = WINBOND_ID,
6267 .model_id = W_29C040P,
6268 .total_size = 512,
6269 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00006270 .feature_bits = FEATURE_LONG_RESET,
6271 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006272 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006273 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006274 .block_erasers =
6275 {
6276 {
6277 .eraseblocks = { {512 * 1024, 1} },
6278 .block_erase = erase_chip_block_jedec,
6279 }
6280 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006281 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006282 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006283 },
6284
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006285 {
6286 .vendor = "Winbond",
6287 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00006288 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006289 .manufacture_id = WINBOND_ID,
6290 .model_id = W_29C011,
6291 .total_size = 128,
6292 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006293 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006294 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006295 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00006296 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006297 .block_erasers =
6298 {
6299 {
6300 .eraseblocks = { {128 * 1024, 1} },
6301 .block_erase = erase_chip_block_jedec,
6302 }
6303 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006304 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006305 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006306 },
6307
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006308 {
6309 .vendor = "Winbond",
6310 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006311 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006312 .manufacture_id = WINBOND_ID,
6313 .model_id = W_39V040A,
6314 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006315 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006316 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00006317 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006318 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006319 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006320 .block_erasers =
6321 {
6322 {
6323 .eraseblocks = { {64 * 1024, 8} },
6324 .block_erase = erase_sector_jedec,
6325 }, {
6326 .eraseblocks = { {512 * 1024, 1} },
6327 .block_erase = erase_chip_block_jedec,
6328 }
6329 },
Sean Nelson35727f72010-01-28 23:55:12 +00006330 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006331 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006332 },
6333
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006334 {
6335 .vendor = "Winbond",
6336 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006337 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006338 .manufacture_id = WINBOND_ID,
6339 .model_id = W_39V040B,
6340 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006341 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006342 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00006343 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006344 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006345 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006346 .block_erasers =
6347 {
6348 {
6349 .eraseblocks = { {64 * 1024, 8} },
6350 .block_erase = erase_sector_jedec,
6351 }, {
6352 .eraseblocks = { {512 * 1024, 1} },
6353 .block_erase = erase_chip_block_jedec,
6354 }
6355 },
Sean Nelson35727f72010-01-28 23:55:12 +00006356 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006357 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006358 },
6359
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006360 {
6361 .vendor = "Winbond",
6362 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006363 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006364 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006365 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006366 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006367 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006368 .feature_bits = FEATURE_EITHER_RESET,
6369 .tested = TEST_UNTESTED,
6370 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006371 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006372 .block_erasers =
6373 {
6374 {
6375 .eraseblocks = { {64 * 1024, 8} },
6376 .block_erase = erase_sector_jedec,
6377 }, {
6378 .eraseblocks = { {512 * 1024, 1} },
6379 .block_erase = erase_chip_block_jedec,
6380 }
6381 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006382 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00006383 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006384 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006385 },
6386
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006387 {
6388 .vendor = "Winbond",
6389 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006390 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006391 .manufacture_id = WINBOND_ID,
6392 .model_id = W_39V040FA,
6393 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006394 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00006395 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00006396 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006397 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006398 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006399 .block_erasers =
6400 {
6401 {
6402 .eraseblocks = { {4 * 1024, 128} },
6403 .block_erase = erase_block_jedec,
6404 }, {
6405 .eraseblocks = { {64 * 1024, 8} },
6406 .block_erase = erase_sector_jedec,
6407 }, {
6408 .eraseblocks = { {512 * 1024, 1} },
6409 .block_erase = erase_chip_block_jedec,
6410 }
6411 },
Michael Karcherc9b63412010-05-30 16:55:18 +00006412 .printlock = printlock_sst_fwhub,
6413 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006414 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006415 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006416 },
6417
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006418 {
6419 .vendor = "Winbond",
6420 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006421 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006422 .manufacture_id = WINBOND_ID,
6423 .model_id = W_39V080A,
6424 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006425 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006426 .feature_bits = FEATURE_EITHER_RESET,
6427 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006428 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006429 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006430 .block_erasers =
6431 {
6432 {
6433 .eraseblocks = { {64 * 1024, 16} },
6434 .block_erase = erase_sector_jedec,
6435 }, {
6436 .eraseblocks = { {1024 * 1024, 1} },
6437 .block_erase = erase_chip_block_jedec,
6438 }
6439 },
Sean Nelson35727f72010-01-28 23:55:12 +00006440 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006441 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006442 },
6443
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006444 {
6445 .vendor = "Winbond",
6446 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00006447 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006448 .manufacture_id = WINBOND_ID,
6449 .model_id = W_49F002U,
6450 .total_size = 256,
6451 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006452 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006453 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006454 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006455 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006456 .block_erasers =
6457 {
6458 {
6459 .eraseblocks = {
6460 {128 * 1024, 1},
6461 {96 * 1024, 1},
6462 {8 * 1024, 2},
6463 {16 * 1024, 1},
6464 },
6465 .block_erase = erase_sector_jedec,
6466 }, {
6467 .eraseblocks = { {256 * 1024, 1} },
6468 .block_erase = erase_chip_block_jedec,
6469 }
6470 },
Sean Nelson35727f72010-01-28 23:55:12 +00006471 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006472 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006473 },
6474
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006475 {
6476 .vendor = "Winbond",
6477 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006478 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006479 .manufacture_id = WINBOND_ID,
6480 .model_id = W_49V002A,
6481 .total_size = 256,
6482 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006483 .feature_bits = FEATURE_EITHER_RESET,
6484 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006485 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006486 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006487 .block_erasers =
6488 {
6489 {
6490 .eraseblocks = {
6491 {64 * 1024, 3},
6492 {32 * 1024, 1},
6493 {8 * 1024, 2},
6494 {16 * 1024, 1},
6495 },
6496 .block_erase = erase_sector_jedec,
6497 }, {
6498 .eraseblocks = { {256 * 1024, 1} },
6499 .block_erase = erase_chip_block_jedec,
6500 }
6501 },
Sean Nelson35727f72010-01-28 23:55:12 +00006502 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006503 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006504 },
6505
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006506 {
6507 .vendor = "Winbond",
6508 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006509 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006510 .manufacture_id = WINBOND_ID,
6511 .model_id = W_49V002FA,
6512 .total_size = 256,
6513 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006514 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00006515 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006516 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006517 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006518 .block_erasers =
6519 {
6520 {
6521 .eraseblocks = {
6522 {64 * 1024, 3},
6523 {32 * 1024, 1},
6524 {8 * 1024, 2},
6525 {16 * 1024, 1},
6526 },
6527 .block_erase = erase_sector_jedec,
6528 }, {
6529 .eraseblocks = { {256 * 1024, 1} },
6530 .block_erase = erase_chip_block_jedec,
6531 }
6532 },
Sean Nelson35727f72010-01-28 23:55:12 +00006533 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006534 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006535 },
6536
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006537 {
6538 .vendor = "Winbond",
6539 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006540 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006541 .manufacture_id = WINBOND_ID,
6542 .model_id = W_39V080FA,
6543 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006544 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006545 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006546 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006547 .probe = probe_jedec,
6548 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006549 .block_erasers =
6550 {
6551 {
6552 .eraseblocks = { {64 * 1024, 16}, },
6553 .block_erase = erase_sector_jedec,
6554 }, {
6555 .eraseblocks = { {1024 * 1024, 1} },
6556 .block_erase = erase_chip_block_jedec,
6557 }
6558 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006559 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006560 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006561 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006562 },
6563
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006564 {
6565 .vendor = "Winbond",
6566 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006567 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006568 .manufacture_id = WINBOND_ID,
6569 .model_id = W_39V080FA_DM,
6570 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006571 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006572 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006573 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006574 .probe = probe_jedec,
6575 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006576 .block_erasers =
6577 {
6578 {
6579 .eraseblocks = { {64 * 1024, 8}, },
6580 .block_erase = erase_sector_jedec,
6581 }, {
6582 .eraseblocks = { {512 * 1024, 1} },
6583 .block_erase = erase_chip_block_jedec,
6584 }
6585 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006586 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006587 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006588 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006589 },
6590
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006591 {
6592 .vendor = "Atmel",
6593 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006594 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006595 .manufacture_id = ATMEL_ID,
6596 .model_id = GENERIC_DEVICE_ID,
6597 .total_size = 0,
6598 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006599 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006600 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006601 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006602 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006603 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006604 },
6605
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006606 {
6607 .vendor = "EON",
6608 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006609 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006610 .manufacture_id = EON_ID_NOPREFIX,
6611 .model_id = GENERIC_DEVICE_ID,
6612 .total_size = 0,
6613 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006614 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006615 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006616 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006617 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006618 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006619 },
6620
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006621 {
6622 .vendor = "Macronix",
6623 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006624 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006625 .manufacture_id = MX_ID,
6626 .model_id = GENERIC_DEVICE_ID,
6627 .total_size = 0,
6628 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006629 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006630 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006631 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006632 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006633 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006634 },
6635
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006636 {
6637 .vendor = "PMC",
6638 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006639 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006640 .manufacture_id = PMC_ID,
6641 .model_id = GENERIC_DEVICE_ID,
6642 .total_size = 0,
6643 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006644 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006645 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006646 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006647 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006648 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006649 },
6650
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006651 {
6652 .vendor = "SST",
6653 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006654 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006655 .manufacture_id = SST_ID,
6656 .model_id = GENERIC_DEVICE_ID,
6657 .total_size = 0,
6658 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006659 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006660 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006661 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006662 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006663 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006664 },
6665
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006666 {
6667 .vendor = "ST",
6668 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006669 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006670 .manufacture_id = ST_ID,
6671 .model_id = GENERIC_DEVICE_ID,
6672 .total_size = 0,
6673 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006674 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006675 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006676 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006677 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006678 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006679 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006680
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006681 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006682 .vendor = "Sanyo",
6683 .name = "unknown Sanyo SPI chip",
6684 .bustype = CHIP_BUSTYPE_SPI,
6685 .manufacture_id = SANYO_ID,
6686 .model_id = GENERIC_DEVICE_ID,
6687 .total_size = 0,
6688 .page_size = 256,
6689 .tested = TEST_BAD_PREW,
6690 .probe = probe_spi_rdid,
6691 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006692 .write = NULL,
6693 .read = NULL,
6694 },
6695
6696 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006697 .vendor = "Generic",
6698 .name = "unknown SPI chip (RDID)",
6699 .bustype = CHIP_BUSTYPE_SPI,
6700 .manufacture_id = GENERIC_MANUF_ID,
6701 .model_id = GENERIC_DEVICE_ID,
6702 .total_size = 0,
6703 .page_size = 256,
6704 .tested = TEST_BAD_PREW,
6705 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006706 .write = NULL,
6707 },
6708 {
6709 .vendor = "Generic",
6710 .name = "unknown SPI chip (REMS)",
6711 .bustype = CHIP_BUSTYPE_SPI,
6712 .manufacture_id = GENERIC_MANUF_ID,
6713 .model_id = GENERIC_DEVICE_ID,
6714 .total_size = 0,
6715 .page_size = 256,
6716 .tested = TEST_BAD_PREW,
6717 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006718 .write = NULL,
6719 },
6720
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006721 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006722};