blob: 62cd2ae390cedd3a6c757cad2eda40467d74c4ff [file] [log] [blame]
Ollie Lho184a4042005-11-26 21:55:36 +00001/*
Uwe Hermannd1107642007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
Ollie Lho184a4042005-11-26 21:55:36 +00003 *
Uwe Hermannd22a1d42007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
Stefan Reinauer4c390c82008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
Sean Nelsonc57a9202010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
Uwe Hermannd1107642007-08-29 17:52:32 +00009 *
Stefan Reinauerce532972007-05-23 17:20:56 +000010 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000014 *
Stefan Reinauerce532972007-05-23 17:20:56 +000015 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000019 *
Stefan Reinauerce532972007-05-23 17:20:56 +000020 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000026#include "flashchips.h"
Sean Nelson14ba6682010-02-26 05:48:29 +000027#include "chipdrivers.h"
Ollie Lho184a4042005-11-26 21:55:36 +000028
Uwe Hermannfc425e82008-03-16 02:06:25 +000029/**
Uwe Hermanna9720402009-05-21 15:55:46 +000030 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000031 *
32 * Please keep the list sorted by vendor name and chip name, so that
33 * the output of 'flashrom -L' is alphabetically sorted.
34 */
Ollie Lho184a4042005-11-26 21:55:36 +000035struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000036
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000037 /*
38 * .vendor = Vendor name
39 * .name = Chip name
40 * .bustype = Supported flash bus types (Parallel, LPC...)
41 * .manufacture_id = Manufacturer chip ID
42 * .model_id = Model chip ID
43 * .total_size = Total size in (binary) kbytes
44 * .page_size = Page or eraseblock(?) size in bytes
45 * .tested = Test status
46 * .probe = Probe function
47 * .probe_timing = Probe function delay
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000048 * .block_erasers[] = Array of erase layouts and erase functions
49 * {
50 * .eraseblocks[] = Array of { blocksize, blockcount }
51 * .block_erase = Block erase function
52 * }
Sean Nelson6e0b9122010-02-19 00:52:10 +000053 * .printlock = Chip lock status function
54 * .unlock = Chip unlock function
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000055 * .write = Chip write function
56 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000057 */
58
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000059 {
60 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000061 .name = "Am29F010A/B",
62 .bustype = CHIP_BUSTYPE_PARALLEL,
63 .manufacture_id = AMD_ID,
64 .model_id = AM_29F010B, /* Same as Am29F010A */
65 .total_size = 128,
66 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000067 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
68 .tested = TEST_UNTESTED,
69 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000070 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000071 .block_erasers =
72 {
73 {
74 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000075 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000076 }, {
77 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000078 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000079 },
80 },
Sean Nelson35727f72010-01-28 23:55:12 +000081 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000082 .read = read_memmapped,
83 },
84
85 {
86 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000087 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000088 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000089 .manufacture_id = AMD_ID,
90 .model_id = AM_29F002BB,
91 .total_size = 256,
92 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000093 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000094 .tested = TEST_UNTESTED,
95 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000096 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000097 .block_erasers =
98 {
99 {
100 .eraseblocks = {
101 {16 * 1024, 1},
102 {8 * 1024, 2},
103 {32 * 1024, 1},
104 {64 * 1024, 3},
105 },
106 .block_erase = erase_sector_jedec,
107 }, {
108 .eraseblocks = { {256 * 1024, 1} },
109 .block_erase = erase_chip_block_jedec,
110 },
111 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000112 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000113 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000114 },
115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000116 {
117 .vendor = "AMD",
118 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000119 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000120 .manufacture_id = AMD_ID,
121 .model_id = AM_29F002BT,
122 .total_size = 256,
123 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000124 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
125 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000126 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000127 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000128 .block_erasers =
129 {
130 {
131 .eraseblocks = {
132 {64 * 1024, 3},
133 {32 * 1024, 1},
134 {8 * 1024, 2},
135 {16 * 1024, 1},
136 },
137 .block_erase = erase_sector_jedec,
138 }, {
139 .eraseblocks = { {256 * 1024, 1} },
140 .block_erase = erase_chip_block_jedec,
141 },
142 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000143 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000144 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000145 },
146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000147 {
148 .vendor = "AMD",
149 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000150 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 .manufacture_id = AMD_ID,
152 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000153 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000154 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000155 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000156 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000157 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000158 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000159 .block_erasers =
160 {
161 {
162 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000163 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000164 }, {
165 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000166 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000167 },
168 },
Sean Nelson35727f72010-01-28 23:55:12 +0000169 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000170 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000171 },
172
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000173 {
174 .vendor = "AMD",
175 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000176 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000177 .manufacture_id = AMD_ID,
178 .model_id = AM_29F040B,
179 .total_size = 512,
180 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000181 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
182 .tested = TEST_UNTESTED,
183 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000184 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000185 .block_erasers =
186 {
187 {
188 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000189 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000190 }, {
191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000192 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000193 },
194 },
Sean Nelson35727f72010-01-28 23:55:12 +0000195 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000196 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000197 },
198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000199 {
200 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000201 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000202 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000203 .manufacture_id = AMD_ID,
204 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000205 .total_size = 1024,
206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000208 .tested = TEST_UNTESTED,
209 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000210 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000211 .block_erasers =
212 {
213 {
214 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000215 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000216 }, {
217 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000218 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000219 },
220 },
Sean Nelson35727f72010-01-28 23:55:12 +0000221 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000222 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000223 },
224
225 {
226 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000227 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000228 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000229 .manufacture_id = AMD_ID,
230 .model_id = AM_29LV040B,
231 .total_size = 512,
232 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000233 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000234 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000235 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000236 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000237 .block_erasers =
238 {
239 {
240 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000241 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000242 }, {
243 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000244 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000245 },
246 },
Sean Nelson35727f72010-01-28 23:55:12 +0000247 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000248 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000249 },
250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000251 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000252 .vendor = "AMD",
253 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000254 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000255 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000256 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000257 .total_size = 1024,
258 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000259 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000260 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000261 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000262 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000263 .block_erasers =
264 {
265 {
266 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000267 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000268 }, {
269 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000270 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000271 },
272 },
Sean Nelson35727f72010-01-28 23:55:12 +0000273 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000274 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000275 },
276
277 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000278 .vendor = "ASD",
279 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +0000280 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000281 .manufacture_id = ASD_ID,
282 .model_id = ASD_AE49F2008,
283 .total_size = 256,
284 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000285 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000286 .tested = TEST_UNTESTED,
287 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000288 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +0000289 .block_erasers =
290 {
291 {
292 .eraseblocks = {
293 {128 * 1024, 1},
294 {96 * 1024, 1},
295 {8 * 1024, 2},
296 {16 * 1024, 1},
297 },
298 .block_erase = erase_sector_jedec,
299 }, {
300 .eraseblocks = { {256 * 1024, 1} },
301 .block_erase = erase_chip_block_jedec,
302 }
303 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000304 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000305 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000306 },
307
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000308 {
309 .vendor = "Atmel",
310 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000311 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000312 .manufacture_id = ATMEL_ID,
313 .model_id = AT_25DF021,
314 .total_size = 256,
315 .page_size = 256,
316 .tested = TEST_UNTESTED,
317 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000318 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000319 .block_erasers =
320 {
321 {
322 .eraseblocks = { {4 * 1024, 64} },
323 .block_erase = spi_block_erase_20,
324 }, {
325 .eraseblocks = { {32 * 1024, 8} },
326 .block_erase = spi_block_erase_52,
327 }, {
328 .eraseblocks = { {64 * 1024, 4} },
329 .block_erase = spi_block_erase_d8,
330 }, {
331 .eraseblocks = { {256 * 1024, 1} },
332 .block_erase = spi_block_erase_60,
333 }, {
334 .eraseblocks = { {256 * 1024, 1} },
335 .block_erase = spi_block_erase_c7,
336 }
337 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000338 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000339 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000340 },
341
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000342 {
343 .vendor = "Atmel",
344 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000345 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000346 .manufacture_id = ATMEL_ID,
347 .model_id = AT_25DF041A,
348 .total_size = 512,
349 .page_size = 256,
350 .tested = TEST_UNTESTED,
351 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000352 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000353 .block_erasers =
354 {
355 {
356 .eraseblocks = { {4 * 1024, 128} },
357 .block_erase = spi_block_erase_20,
358 }, {
359 .eraseblocks = { {32 * 1024, 16} },
360 .block_erase = spi_block_erase_52,
361 }, {
362 .eraseblocks = { {64 * 1024, 8} },
363 .block_erase = spi_block_erase_d8,
364 }, {
365 .eraseblocks = { {512 * 1024, 1} },
366 .block_erase = spi_block_erase_60,
367 }, {
368 .eraseblocks = { {512 * 1024, 1} },
369 .block_erase = spi_block_erase_c7,
370 }
371 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000372 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000373 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000374 },
375
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000376 {
377 .vendor = "Atmel",
378 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000379 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000380 .manufacture_id = ATMEL_ID,
381 .model_id = AT_25DF081,
382 .total_size = 1024,
383 .page_size = 256,
384 .tested = TEST_UNTESTED,
385 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000386 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000387 .block_erasers =
388 {
389 {
390 .eraseblocks = { {4 * 1024, 256} },
391 .block_erase = spi_block_erase_20,
392 }, {
393 .eraseblocks = { {32 * 1024, 32} },
394 .block_erase = spi_block_erase_52,
395 }, {
396 .eraseblocks = { {64 * 1024, 16} },
397 .block_erase = spi_block_erase_d8,
398 }, {
399 .eraseblocks = { {1024 * 1024, 1} },
400 .block_erase = spi_block_erase_60,
401 }, {
402 .eraseblocks = { {1024 * 1024, 1} },
403 .block_erase = spi_block_erase_c7,
404 }
405 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000406 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000407 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000408 },
409
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000410 {
411 .vendor = "Atmel",
412 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000413 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000414 .manufacture_id = ATMEL_ID,
415 .model_id = AT_25DF161,
416 .total_size = 2048,
417 .page_size = 256,
418 .tested = TEST_UNTESTED,
419 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000420 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000421 .block_erasers =
422 {
423 {
424 .eraseblocks = { {4 * 1024, 512} },
425 .block_erase = spi_block_erase_20,
426 }, {
427 .eraseblocks = { {32 * 1024, 64} },
428 .block_erase = spi_block_erase_52,
429 }, {
430 .eraseblocks = { {64 * 1024, 32} },
431 .block_erase = spi_block_erase_d8,
432 }, {
433 .eraseblocks = { {2 * 1024 * 1024, 1} },
434 .block_erase = spi_block_erase_60,
435 }, {
436 .eraseblocks = { {2 * 1024 * 1024, 1} },
437 .block_erase = spi_block_erase_c7,
438 }
439 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000440 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000441 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000442 },
443
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000444 {
445 .vendor = "Atmel",
446 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000447 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000448 .manufacture_id = ATMEL_ID,
449 .model_id = AT_25DF321,
450 .total_size = 4096,
451 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000452 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000453 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000454 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000455 .block_erasers =
456 {
457 {
458 .eraseblocks = { {4 * 1024, 1024} },
459 .block_erase = spi_block_erase_20,
460 }, {
461 .eraseblocks = { {32 * 1024, 128} },
462 .block_erase = spi_block_erase_52,
463 }, {
464 .eraseblocks = { {64 * 1024, 64} },
465 .block_erase = spi_block_erase_d8,
466 }, {
467 .eraseblocks = { {4 * 1024 * 1024, 1} },
468 .block_erase = spi_block_erase_60,
469 }, {
470 .eraseblocks = { {4 * 1024 * 1024, 1} },
471 .block_erase = spi_block_erase_c7,
472 }
473 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000474 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000475 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000476 },
477
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000478 {
479 .vendor = "Atmel",
480 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000481 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000482 .manufacture_id = ATMEL_ID,
483 .model_id = AT_25DF321A,
484 .total_size = 4096,
485 .page_size = 256,
486 .tested = TEST_UNTESTED,
487 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000488 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000489 .block_erasers =
490 {
491 {
492 .eraseblocks = { {4 * 1024, 1024} },
493 .block_erase = spi_block_erase_20,
494 }, {
495 .eraseblocks = { {32 * 1024, 128} },
496 .block_erase = spi_block_erase_52,
497 }, {
498 .eraseblocks = { {64 * 1024, 64} },
499 .block_erase = spi_block_erase_d8,
500 }, {
501 .eraseblocks = { {4 * 1024 * 1024, 1} },
502 .block_erase = spi_block_erase_60,
503 }, {
504 .eraseblocks = { {4 * 1024 * 1024, 1} },
505 .block_erase = spi_block_erase_c7,
506 }
507 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000508 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000509 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000510 },
511
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000512 {
513 .vendor = "Atmel",
514 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000515 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000516 .manufacture_id = ATMEL_ID,
517 .model_id = AT_25DF641,
518 .total_size = 8192,
519 .page_size = 256,
520 .tested = TEST_UNTESTED,
521 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000522 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000523 .block_erasers =
524 {
525 {
526 .eraseblocks = { {4 * 1024, 2048} },
527 .block_erase = spi_block_erase_20,
528 }, {
529 .eraseblocks = { {32 * 1024, 256} },
530 .block_erase = spi_block_erase_52,
531 }, {
532 .eraseblocks = { {64 * 1024, 128} },
533 .block_erase = spi_block_erase_d8,
534 }, {
535 .eraseblocks = { {8 * 1024 * 1024, 1} },
536 .block_erase = spi_block_erase_60,
537 }, {
538 .eraseblocks = { {8 * 1024 * 1024, 1} },
539 .block_erase = spi_block_erase_c7,
540 }
541 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000542 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000543 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000544 },
545
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000546 {
547 .vendor = "Atmel",
548 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000549 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000550 .manufacture_id = ATMEL_ID,
551 .model_id = AT_25F512B,
552 .total_size = 64,
553 .page_size = 256,
554 .tested = TEST_UNTESTED,
555 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000556 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000557 .block_erasers =
558 {
559 {
560 .eraseblocks = { {4 * 1024, 16} },
561 .block_erase = spi_block_erase_20,
562 }, {
563 .eraseblocks = { {32 * 1024, 2} },
564 .block_erase = spi_block_erase_52,
565 }, {
566 .eraseblocks = { {32 * 1024, 2} },
567 .block_erase = spi_block_erase_d8,
568 }, {
569 .eraseblocks = { {64 * 1024, 1} },
570 .block_erase = spi_block_erase_60,
571 }, {
572 .eraseblocks = { {64 * 1024, 1} },
573 .block_erase = spi_block_erase_c7,
574 }
575 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000576 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000577 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000578 },
579
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000580 {
581 .vendor = "Atmel",
582 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000583 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000584 .manufacture_id = ATMEL_ID,
585 .model_id = AT_25FS010,
586 .total_size = 128,
587 .page_size = 256,
588 .tested = TEST_UNTESTED,
589 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000590 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000591 .block_erasers =
592 {
593 {
594 .eraseblocks = { {4 * 1024, 32} },
595 .block_erase = spi_block_erase_20,
596 }, {
597 .eraseblocks = { {32 * 1024, 4} },
598 .block_erase = spi_block_erase_52,
599 }, {
600 .eraseblocks = { {32 * 1024, 4} },
601 .block_erase = spi_block_erase_d8,
602 }, {
603 .eraseblocks = { {128 * 1024, 1} },
604 .block_erase = spi_block_erase_60,
605 }, {
606 .eraseblocks = { {128 * 1024, 1} },
607 .block_erase = spi_block_erase_c7,
608 }
609 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000610 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000611 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000612 },
613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000614 {
615 .vendor = "Atmel",
616 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000617 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000618 .manufacture_id = ATMEL_ID,
619 .model_id = AT_25FS040,
620 .total_size = 512,
621 .page_size = 256,
622 .tested = TEST_UNTESTED,
623 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000624 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000625 .block_erasers =
626 {
627 {
628 .eraseblocks = { {4 * 1024, 128} },
629 .block_erase = spi_block_erase_20,
630 }, {
631 .eraseblocks = { {64 * 1024, 8} },
632 .block_erase = spi_block_erase_52,
633 }, {
634 .eraseblocks = { {64 * 1024, 8} },
635 .block_erase = spi_block_erase_d8,
636 }, {
637 .eraseblocks = { {512 * 1024, 1} },
638 .block_erase = spi_block_erase_60,
639 }, {
640 .eraseblocks = { {512 * 1024, 1} },
641 .block_erase = spi_block_erase_c7,
642 }
643 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000644 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000645 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000646 },
647
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000648 {
649 .vendor = "Atmel",
650 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000651 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000652 .manufacture_id = ATMEL_ID,
653 .model_id = AT_26DF041,
654 .total_size = 512,
655 .page_size = 256,
656 .tested = TEST_UNTESTED,
657 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000658 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000659 .block_erasers =
660 {
661 {
662 .eraseblocks = { {4 * 1024, 128} },
663 .block_erase = spi_block_erase_20,
664 }
665 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000666 .write = NULL /* Incompatible Page write */,
667 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000668 },
669
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000670 {
671 .vendor = "Atmel",
672 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000673 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000674 .manufacture_id = ATMEL_ID,
675 .model_id = AT_26DF081A,
676 .total_size = 1024,
677 .page_size = 256,
678 .tested = TEST_UNTESTED,
679 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000680 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000681 .block_erasers =
682 {
683 {
684 .eraseblocks = { {4 * 1024, 256} },
685 .block_erase = spi_block_erase_20,
686 }, {
687 .eraseblocks = { {32 * 1024, 32} },
688 .block_erase = spi_block_erase_52,
689 }, {
690 .eraseblocks = { {64 * 1024, 16} },
691 .block_erase = spi_block_erase_d8,
692 }, {
693 .eraseblocks = { {1024 * 1024, 1} },
694 .block_erase = spi_block_erase_60,
695 }, {
696 .eraseblocks = { {1024 * 1024, 1} },
697 .block_erase = spi_block_erase_c7,
698 }
699 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000700 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000701 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000702 },
703
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000704 {
705 .vendor = "Atmel",
706 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000707 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000708 .manufacture_id = ATMEL_ID,
709 .model_id = AT_26DF161,
710 .total_size = 2048,
711 .page_size = 256,
712 .tested = TEST_UNTESTED,
713 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000714 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000715 .block_erasers =
716 {
717 {
718 .eraseblocks = { {4 * 1024, 512} },
719 .block_erase = spi_block_erase_20,
720 }, {
721 .eraseblocks = { {32 * 1024, 64} },
722 .block_erase = spi_block_erase_52,
723 }, {
724 .eraseblocks = { {64 * 1024, 32} },
725 .block_erase = spi_block_erase_d8,
726 }, {
727 .eraseblocks = { {2 * 1024 * 1024, 1} },
728 .block_erase = spi_block_erase_60,
729 }, {
730 .eraseblocks = { {2 * 1024 * 1024, 1} },
731 .block_erase = spi_block_erase_c7,
732 }
733 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000734 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000735 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000736 },
737
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000738 {
739 .vendor = "Atmel",
740 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000741 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000742 .manufacture_id = ATMEL_ID,
743 .model_id = AT_26DF161A,
744 .total_size = 2048,
745 .page_size = 256,
746 .tested = TEST_UNTESTED,
747 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000748 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000749 .block_erasers =
750 {
751 {
752 .eraseblocks = { {4 * 1024, 512} },
753 .block_erase = spi_block_erase_20,
754 }, {
755 .eraseblocks = { {32 * 1024, 64} },
756 .block_erase = spi_block_erase_52,
757 }, {
758 .eraseblocks = { {64 * 1024, 32} },
759 .block_erase = spi_block_erase_d8,
760 }, {
761 .eraseblocks = { {2 * 1024 * 1024, 1} },
762 .block_erase = spi_block_erase_60,
763 }, {
764 .eraseblocks = { {2 * 1024 * 1024, 1} },
765 .block_erase = spi_block_erase_c7,
766 }
767 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000768 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000769 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000770 },
771
772 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000773 /*{
774 .vendor = "Atmel",
775 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000776 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000777 .manufacture_id = ATMEL_ID,
778 .model_id = AT_26DF321,
779 .total_size = 4096,
780 .page_size = 256,
781 .tested = TEST_UNTESTED,
782 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000783 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000784 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000785 .read = spi_chip_read,
786 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000787
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000788 {
789 .vendor = "Atmel",
790 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000791 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000792 .manufacture_id = ATMEL_ID,
793 .model_id = AT_26F004,
794 .total_size = 512,
795 .page_size = 256,
796 .tested = TEST_UNTESTED,
797 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000798 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000799 .block_erasers =
800 {
801 {
802 .eraseblocks = { {4 * 1024, 128} },
803 .block_erase = spi_block_erase_20,
804 }, {
805 .eraseblocks = { {32 * 1024, 16} },
806 .block_erase = spi_block_erase_52,
807 }, {
808 .eraseblocks = { {64 * 1024, 8} },
809 .block_erase = spi_block_erase_d8,
810 }, {
811 .eraseblocks = { {512 * 1024, 1} },
812 .block_erase = spi_block_erase_60,
813 }, {
814 .eraseblocks = { {512 * 1024, 1} },
815 .block_erase = spi_block_erase_c7,
816 }
817 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000818 .write = NULL /* Incompatible Page write */,
819 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000820 },
821
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000822 {
823 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000824 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000825 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000826 .manufacture_id = ATMEL_ID,
827 .model_id = AT_29C512,
828 .total_size = 64,
829 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000830 .feature_bits = FEATURE_LONG_RESET,
831 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000832 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000833 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000834 .block_erasers =
835 {
836 {
837 .eraseblocks = { {64 * 1024, 1} },
838 .block_erase = erase_chip_block_jedec,
839 }
840 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000841 .write = write_jedec,
842 .read = read_memmapped,
843
844 },
845
846 {
847 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000848 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000849 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000850 .manufacture_id = ATMEL_ID,
851 .model_id = AT_29C010A,
852 .total_size = 128,
853 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000854 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +0000855 .tested = TEST_OK_PRW,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000856 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000857 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000858 .block_erasers =
859 {
860 {
861 .eraseblocks = { {128 * 1024, 1} },
862 .block_erase = erase_chip_block_jedec,
863 }
864 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000865 .write = write_jedec, /* FIXME */
866 .read = read_memmapped,
867 },
868
869 {
870 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000871 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000872 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000873 .manufacture_id = ATMEL_ID,
874 .model_id = AT_29C020,
875 .total_size = 256,
876 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000877 .feature_bits = FEATURE_LONG_RESET,
878 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000879 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000880 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000881 .block_erasers =
882 {
883 {
884 .eraseblocks = { {256 * 1024, 1} },
885 .block_erase = erase_chip_block_jedec,
886 }
887 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000888 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000889 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000890 },
891
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000892 {
893 .vendor = "Atmel",
894 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000895 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000896 .manufacture_id = ATMEL_ID,
897 .model_id = AT_29C040A,
898 .total_size = 512,
899 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000900 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000901 .tested = TEST_UNTESTED,
902 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000903 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000904 .block_erasers =
905 {
906 {
907 .eraseblocks = { {512 * 1024, 1} },
908 .block_erase = erase_chip_block_jedec,
909 }
910 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000911 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000912 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000913 },
914
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000915 {
916 .vendor = "Atmel",
917 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000918 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000919 .manufacture_id = ATMEL_ID,
920 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000921 .total_size = 16896 /* No power of two sizes */,
922 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000923 .tested = TEST_BAD_READ,
924 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000925 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000926 .write = NULL /* Incompatible Page write */,
927 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000928 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000929
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000930 {
931 .vendor = "Atmel",
932 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000933 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000934 .manufacture_id = ATMEL_ID,
935 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000936 .total_size = 128 /* Size can only be determined from status register */,
937 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000938 .tested = TEST_BAD_READ,
939 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000940 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000941 .write = NULL,
942 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000943 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000944
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000945 {
946 .vendor = "Atmel",
947 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000948 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000949 .manufacture_id = ATMEL_ID,
950 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000951 .total_size = 256 /* Size can only be determined from status register */,
952 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000953 .tested = TEST_BAD_READ,
954 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000955 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000956 .write = NULL,
957 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000958 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000959
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000960 {
961 .vendor = "Atmel",
962 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000963 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000964 .manufacture_id = ATMEL_ID,
965 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000966 .total_size = 512 /* Size can only be determined from status register */,
967 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000968 .tested = TEST_BAD_READ,
969 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000970 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000971 .write = NULL,
972 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000973 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000974
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000975 {
976 .vendor = "Atmel",
977 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000978 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000979 .manufacture_id = ATMEL_ID,
980 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000981 .total_size = 1024 /* Size can only be determined from status register */,
982 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000983 .tested = TEST_BAD_READ,
984 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000985 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000986 .write = NULL,
987 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000988 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000990 {
991 .vendor = "Atmel",
992 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000993 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000994 .manufacture_id = ATMEL_ID,
995 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000996 .total_size = 2048 /* Size can only be determined from status register */,
997 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000998 .tested = TEST_BAD_READ,
999 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001000 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001001 .write = NULL,
1002 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001003 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001004
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001005 {
1006 .vendor = "Atmel",
1007 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001008 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001009 .manufacture_id = ATMEL_ID,
1010 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001011 .total_size = 4224 /* No power of two sizes */,
1012 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001013 .tested = TEST_BAD_READ,
1014 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001015 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001016 .write = NULL,
1017 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001018 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001019
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001020 {
1021 .vendor = "Atmel",
1022 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001023 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001024 .manufacture_id = ATMEL_ID,
1025 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001026 .total_size = 4096 /* Size can only be determined from status register */,
1027 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001028 .tested = TEST_BAD_READ,
1029 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001030 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001031 .write = NULL,
1032 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001033 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001034
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001035 {
1036 .vendor = "Atmel",
1037 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001038 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001039 .manufacture_id = ATMEL_ID,
1040 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001041 .total_size = 8192 /* Size can only be determined from status register */,
1042 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001043 .tested = TEST_BAD_READ,
1044 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001045 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001046 .write = NULL,
1047 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001048 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001049
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001050 {
1051 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001052 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001053 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001054 .manufacture_id = ATMEL_ID,
1055 .model_id = AT_49BV512,
1056 .total_size = 64,
1057 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001058 .feature_bits = FEATURE_EITHER_RESET,
1059 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001060 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001061 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001062 .block_erasers =
1063 {
1064 {
1065 .eraseblocks = { {64 * 1024, 1} },
1066 .block_erase = erase_chip_block_jedec,
1067 }
1068 },
Sean Nelson35727f72010-01-28 23:55:12 +00001069 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001070 .read = read_memmapped,
1071 },
1072
1073 {
1074 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001075 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001076 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001077 .manufacture_id = ATMEL_ID,
1078 .model_id = AT_49F002N,
1079 .total_size = 256,
1080 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001081 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001082 .tested = TEST_UNTESTED,
1083 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001084 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001085 .block_erasers =
1086 {
1087 {
1088 .eraseblocks = {
1089 {16 * 1024, 1},
1090 {8 * 1024, 2},
1091 {96 * 1024, 1},
1092 {128 * 1024, 1},
1093 },
1094 .block_erase = erase_sector_jedec,
1095 }, {
1096 .eraseblocks = { {256 * 1024, 1} },
1097 .block_erase = erase_chip_block_jedec,
1098 }
1099 },
Sean Nelson35727f72010-01-28 23:55:12 +00001100 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001101 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001102 },
1103
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001104 {
1105 .vendor = "Atmel",
1106 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001107 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001108 .manufacture_id = ATMEL_ID,
1109 .model_id = AT_49F002NT,
1110 .total_size = 256,
1111 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001112 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001113 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001114 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001115 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001116 .block_erasers =
1117 {
1118 {
1119 .eraseblocks = {
1120 {128 * 1024, 1},
1121 {96 * 1024, 1},
1122 {8 * 1024, 2},
1123 {16 * 1024, 1},
1124 },
1125 .block_erase = erase_sector_jedec,
1126 }, {
1127 .eraseblocks = { {256 * 1024, 1} },
1128 .block_erase = erase_chip_block_jedec,
1129 }
1130 },
Sean Nelson35727f72010-01-28 23:55:12 +00001131 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001132 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001133 },
1134
Sean Nelson54596372010-01-09 05:30:14 +00001135 /* The next two chip definitions have top/bottom boot blocks, but has no
1136 device differenciation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001137 {
1138 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001139 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001140 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001141 .manufacture_id = AMIC_ID,
1142 .model_id = AMIC_A25L40P,
1143 .total_size = 512,
1144 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001145 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001146 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001147 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001148 .block_erasers =
1149 {
1150 {
1151 .eraseblocks = {
1152 {64 * 1024, 7},
1153 {32 * 1024, 1},
1154 {16 * 1024, 1},
1155 {8 * 1024, 1},
1156 {4 * 1024, 2},
1157 },
1158 .block_erase = spi_block_erase_d8,
1159 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001160 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001161 .block_erase = spi_block_erase_c7,
1162 }
1163 },
1164 .write = spi_chip_write_256,
1165 .read = spi_chip_read,
1166 },
1167
1168 {
1169 .vendor = "AMIC",
1170 .name = "A25L40PU",
1171 .bustype = CHIP_BUSTYPE_SPI,
1172 .manufacture_id = AMIC_ID,
1173 .model_id = AMIC_A25L40P,
1174 .total_size = 512,
1175 .page_size = 256,
1176 .tested = TEST_OK_PRW,
1177 .probe = probe_spi_rdid4,
1178 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001179 .block_erasers =
1180 {
1181 {
1182 .eraseblocks = {
1183 {4 * 1024, 2},
1184 {8 * 1024, 1},
1185 {16 * 1024, 1},
1186 {32 * 1024, 1},
1187 {64 * 1024, 7},
1188 },
1189 .block_erase = spi_block_erase_d8,
1190 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001192 .block_erase = spi_block_erase_c7,
1193 }
1194 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001195 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001196 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001197 },
1198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001199 {
1200 .vendor = "AMIC",
1201 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001202 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001203 .manufacture_id = AMIC_ID_NOPREFIX,
1204 .model_id = AMIC_A29002B,
1205 .total_size = 256,
1206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001208 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001209 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001210 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001211 .block_erasers =
1212 {
1213 {
1214 .eraseblocks = {
1215 {16 * 1024, 1},
1216 {8 * 1024, 2},
1217 {32 * 1024, 1},
1218 {64 * 1024, 3},
1219 },
Sean Nelson35727f72010-01-28 23:55:12 +00001220 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001221 }, {
1222 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001223 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001224 },
1225 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001226 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001227 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001228 },
1229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001230 {
1231 .vendor = "AMIC",
1232 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001233 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001234 .manufacture_id = AMIC_ID_NOPREFIX,
1235 .model_id = AMIC_A29002T,
1236 .total_size = 256,
1237 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001238 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001239 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00001240 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001241 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001242 .block_erasers =
1243 {
1244 {
1245 .eraseblocks = {
1246 {64 * 1024, 3},
1247 {32 * 1024, 1},
1248 {8 * 1024, 2},
1249 {16 * 1024, 1},
1250 },
Sean Nelson35727f72010-01-28 23:55:12 +00001251 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001252 }, {
1253 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001254 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001255 },
1256 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001257 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001258 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001259 },
1260
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001261 {
1262 .vendor = "AMIC",
1263 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001264 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001265 .manufacture_id = AMIC_ID_NOPREFIX,
1266 .model_id = AMIC_A29040B,
1267 .total_size = 512,
1268 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001269 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1270 .tested = TEST_UNTESTED,
1271 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001272 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001273 .block_erasers =
1274 {
1275 {
1276 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001277 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001278 }, {
1279 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001280 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001281 },
1282 },
Sean Nelson35727f72010-01-28 23:55:12 +00001283 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001284 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001285 },
1286
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001287 {
1288 .vendor = "AMIC",
1289 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001290 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001291 .manufacture_id = AMIC_ID_NOPREFIX,
1292 .model_id = AMIC_A49LF040A,
1293 .total_size = 512,
1294 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001295 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
1296 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00001297 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001298 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson54596372010-01-09 05:30:14 +00001299 .block_erasers =
1300 {
1301 {
1302 .eraseblocks = { {64 * 1024, 8} },
1303 .block_erase = erase_block_jedec,
1304 }, {
1305 .eraseblocks = { {512 * 1024, 1} },
1306 .block_erase = erase_chip_block_jedec,
1307 }
1308 },
Sean Nelson36172342010-02-27 18:01:15 +00001309 .unlock = unlock_49fl00x,
1310 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001311 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001312 },
1313
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001314 {
1315 .vendor = "EMST",
1316 .name = "F49B002UA",
Urja Rannikko161b8852009-06-05 08:47:37 +00001317 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001318 .manufacture_id = EMST_ID,
1319 .model_id = EMST_F49B002UA,
1320 .total_size = 256,
1321 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00001322 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001323 .tested = TEST_UNTESTED,
1324 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001325 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00001326 .block_erasers =
1327 {
1328 {
1329 .eraseblocks = {
1330 {128 * 1024, 1},
1331 {96 * 1024, 1},
1332 {8 * 1024, 2},
1333 {16 * 1024, 1},
1334 },
1335 .block_erase = erase_sector_jedec,
1336 }, {
1337 .eraseblocks = { {256 * 1024, 1} },
1338 .block_erase = erase_chip_block_jedec,
1339 }
1340 },
Sean Nelson35727f72010-01-28 23:55:12 +00001341 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001342 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001343 },
1344
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001345 {
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001346 .vendor = "Eon",
1347 .name = "EN25B05",
1348 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001349 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001350 .model_id = EN_25B05,
1351 .total_size = 64,
1352 .page_size = 256,
1353 .tested = TEST_UNTESTED,
1354 .probe = probe_spi_rdid,
1355 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001356 .block_erasers =
1357 {
1358 {
1359 .eraseblocks = {
1360 {4 * 1024, 2},
1361 {8 * 1024, 1},
1362 {16 * 1024, 1},
1363 {32 * 1024, 1},
1364 },
1365 .block_erase = spi_block_erase_d8,
1366 }, {
1367 .eraseblocks = { {64 * 1024, 1} },
1368 .block_erase = spi_block_erase_c7,
1369 }
1370 },
1371 .write = spi_chip_write_256,
1372 .read = spi_chip_read,
1373 },
1374
1375 {
1376 .vendor = "Eon",
1377 .name = "EN25B05T",
1378 .bustype = CHIP_BUSTYPE_SPI,
1379 .manufacture_id = EON_ID_NOPREFIX,
1380 .model_id = EN_25B05,
1381 .total_size = 64,
1382 .page_size = 256,
1383 .tested = TEST_UNTESTED,
1384 .probe = probe_spi_rdid,
1385 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001386 .block_erasers =
1387 {
1388 {
1389 .eraseblocks = {
1390 {32 * 1024, 1},
1391 {16 * 1024, 1},
1392 {8 * 1024, 1},
1393 {4 * 1024, 2},
1394 },
1395 .block_erase = spi_block_erase_d8,
1396 }, {
1397 .eraseblocks = { {64 * 1024, 1} },
1398 .block_erase = spi_block_erase_c7,
1399 }
1400 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001401 .write = spi_chip_write_256,
1402 .read = spi_chip_read,
1403 },
1404
1405 {
1406 .vendor = "Eon",
1407 .name = "EN25B10",
1408 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001409 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001410 .model_id = EN_25B10,
1411 .total_size = 128,
1412 .page_size = 256,
1413 .tested = TEST_UNTESTED,
1414 .probe = probe_spi_rdid,
1415 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001416 .block_erasers =
1417 {
1418 {
1419 .eraseblocks = {
1420 {4 * 1024, 2},
1421 {8 * 1024, 1},
1422 {16 * 1024, 1},
1423 {32 * 1024, 3},
1424 },
1425 .block_erase = spi_block_erase_d8,
1426 }, {
1427 .eraseblocks = { {128 * 1024, 1} },
1428 .block_erase = spi_block_erase_c7,
1429 }
1430 },
1431 .write = spi_chip_write_256,
1432 .read = spi_chip_read,
1433 },
1434
1435 {
1436 .vendor = "Eon",
1437 .name = "EN25B10T",
1438 .bustype = CHIP_BUSTYPE_SPI,
1439 .manufacture_id = EON_ID_NOPREFIX,
1440 .model_id = EN_25B10,
1441 .total_size = 128,
1442 .page_size = 256,
1443 .tested = TEST_UNTESTED,
1444 .probe = probe_spi_rdid,
1445 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001446 .block_erasers =
1447 {
1448 {
1449 .eraseblocks = {
1450 {32 * 1024, 3},
1451 {16 * 1024, 1},
1452 {8 * 1024, 1},
1453 {4 * 1024, 2},
1454 },
1455 .block_erase = spi_block_erase_d8,
1456 }, {
1457 .eraseblocks = { {128 * 1024, 1} },
1458 .block_erase = spi_block_erase_c7,
1459 }
1460 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001461 .write = spi_chip_write_256,
1462 .read = spi_chip_read,
1463 },
1464
1465 {
1466 .vendor = "Eon",
1467 .name = "EN25B20",
1468 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001469 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001470 .model_id = EN_25B20,
1471 .total_size = 256,
1472 .page_size = 256,
1473 .tested = TEST_UNTESTED,
1474 .probe = probe_spi_rdid,
1475 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001476 .block_erasers =
1477 {
1478 {
1479 .eraseblocks = {
1480 {4 * 1024, 2},
1481 {8 * 1024, 1},
1482 {16 * 1024, 1},
1483 {32 * 1024, 1},
1484 {64 * 1024, 3}
1485 },
1486 .block_erase = spi_block_erase_d8,
1487 }, {
1488 .eraseblocks = { {256 * 1024, 1} },
1489 .block_erase = spi_block_erase_c7,
1490 }
1491 },
1492 .write = spi_chip_write_256,
1493 .read = spi_chip_read,
1494 },
1495
1496 {
1497 .vendor = "Eon",
1498 .name = "EN25B20T",
1499 .bustype = CHIP_BUSTYPE_SPI,
1500 .manufacture_id = EON_ID_NOPREFIX,
1501 .model_id = EN_25B20,
1502 .total_size = 256,
1503 .page_size = 256,
1504 .tested = TEST_UNTESTED,
1505 .probe = probe_spi_rdid,
1506 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001507 .block_erasers =
1508 {
1509 {
1510 .eraseblocks = {
1511 {64 * 1024, 3},
1512 {32 * 1024, 1},
1513 {16 * 1024, 1},
1514 {8 * 1024, 1},
1515 {4 * 1024, 2},
1516 },
1517 .block_erase = spi_block_erase_d8,
1518 }, {
1519 .eraseblocks = { {256 * 1024, 1} },
1520 .block_erase = spi_block_erase_c7,
1521 }
1522 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001523 .write = spi_chip_write_256,
1524 .read = spi_chip_read,
1525 },
1526
1527 {
1528 .vendor = "Eon",
1529 .name = "EN25B40",
1530 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001531 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001532 .model_id = EN_25B40,
1533 .total_size = 512,
1534 .page_size = 256,
1535 .tested = TEST_UNTESTED,
1536 .probe = probe_spi_rdid,
1537 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001538 .block_erasers =
1539 {
1540 {
1541 .eraseblocks = {
1542 {4 * 1024, 2},
1543 {8 * 1024, 1},
1544 {16 * 1024, 1},
1545 {32 * 1024, 1},
1546 {64 * 1024, 7}
1547 },
1548 .block_erase = spi_block_erase_d8,
1549 }, {
1550 .eraseblocks = { {512 * 1024, 1} },
1551 .block_erase = spi_block_erase_c7,
1552 }
1553 },
1554 .write = spi_chip_write_256,
1555 .read = spi_chip_read,
1556 },
1557
1558 {
1559 .vendor = "Eon",
1560 .name = "EN25B40T",
1561 .bustype = CHIP_BUSTYPE_SPI,
1562 .manufacture_id = EON_ID_NOPREFIX,
1563 .model_id = EN_25B40,
1564 .total_size = 512,
1565 .page_size = 256,
1566 .tested = TEST_UNTESTED,
1567 .probe = probe_spi_rdid,
1568 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001569 .block_erasers =
1570 {
1571 {
1572 .eraseblocks = {
1573 {64 * 1024, 7},
1574 {32 * 1024, 1},
1575 {16 * 1024, 1},
1576 {8 * 1024, 1},
1577 {4 * 1024, 2},
1578 },
1579 .block_erase = spi_block_erase_d8,
1580 }, {
1581 .eraseblocks = { {512 * 1024, 1} },
1582 .block_erase = spi_block_erase_c7,
1583 }
1584 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001585 .write = spi_chip_write_256,
1586 .read = spi_chip_read,
1587 },
1588
1589 {
1590 .vendor = "Eon",
1591 .name = "EN25B80",
1592 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001593 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001594 .model_id = EN_25B80,
1595 .total_size = 1024,
1596 .page_size = 256,
1597 .tested = TEST_UNTESTED,
1598 .probe = probe_spi_rdid,
1599 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001600 .block_erasers =
1601 {
1602 {
1603 .eraseblocks = {
1604 {4 * 1024, 2},
1605 {8 * 1024, 1},
1606 {16 * 1024, 1},
1607 {32 * 1024, 1},
1608 {64 * 1024, 15}
1609 },
1610 .block_erase = spi_block_erase_d8,
1611 }, {
1612 .eraseblocks = { {1024 * 1024, 1} },
1613 .block_erase = spi_block_erase_c7,
1614 }
1615 },
1616 .write = spi_chip_write_256,
1617 .read = spi_chip_read,
1618 },
1619
1620 {
1621 .vendor = "Eon",
1622 .name = "EN25B80T",
1623 .bustype = CHIP_BUSTYPE_SPI,
1624 .manufacture_id = EON_ID_NOPREFIX,
1625 .model_id = EN_25B80,
1626 .total_size = 1024,
1627 .page_size = 256,
1628 .tested = TEST_UNTESTED,
1629 .probe = probe_spi_rdid,
1630 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001631 .block_erasers =
1632 {
1633 {
1634 .eraseblocks = {
1635 {64 * 1024, 15},
1636 {32 * 1024, 1},
1637 {16 * 1024, 1},
1638 {8 * 1024, 1},
1639 {4 * 1024, 2},
1640 },
1641 .block_erase = spi_block_erase_d8,
1642 }, {
1643 .eraseblocks = { {1024 * 1024, 1} },
1644 .block_erase = spi_block_erase_c7,
1645 }
1646 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001647 .write = spi_chip_write_256,
1648 .read = spi_chip_read,
1649 },
1650
1651 {
1652 .vendor = "Eon",
1653 .name = "EN25B16",
1654 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001655 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001656 .model_id = EN_25B16,
1657 .total_size = 2048,
1658 .page_size = 256,
1659 .tested = TEST_UNTESTED,
1660 .probe = probe_spi_rdid,
1661 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001662 .block_erasers =
1663 {
1664 {
1665 .eraseblocks = {
1666 {4 * 1024, 2},
1667 {8 * 1024, 1},
1668 {16 * 1024, 1},
1669 {32 * 1024, 1},
1670 {64 * 1024, 31},
1671 },
1672 .block_erase = spi_block_erase_d8,
1673 }, {
1674 .eraseblocks = { {2 * 1024 * 1024, 1} },
1675 .block_erase = spi_block_erase_c7,
1676 }
1677 },
1678 .write = spi_chip_write_256,
1679 .read = spi_chip_read,
1680 },
1681
1682 {
1683 .vendor = "Eon",
1684 .name = "EN25B16T",
1685 .bustype = CHIP_BUSTYPE_SPI,
1686 .manufacture_id = EON_ID_NOPREFIX,
1687 .model_id = EN_25B16,
1688 .total_size = 2048,
1689 .page_size = 256,
1690 .tested = TEST_UNTESTED,
1691 .probe = probe_spi_rdid,
1692 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001693 .block_erasers =
1694 {
1695 {
1696 .eraseblocks = {
1697 {64 * 1024, 31},
1698 {32 * 1024, 1},
1699 {16 * 1024, 1},
1700 {8 * 1024, 1},
1701 {4 * 1024, 2},
1702 },
1703 .block_erase = spi_block_erase_d8,
1704 }, {
1705 .eraseblocks = { {2 * 1024 * 1024, 1} },
1706 .block_erase = spi_block_erase_c7,
1707 }
1708 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001709 .write = spi_chip_write_256,
1710 .read = spi_chip_read,
1711 },
1712
1713 {
1714 .vendor = "Eon",
1715 .name = "EN25B32",
1716 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001717 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001718 .model_id = EN_25B32,
1719 .total_size = 4096,
1720 .page_size = 256,
1721 .tested = TEST_UNTESTED,
1722 .probe = probe_spi_rdid,
1723 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001724 .block_erasers =
1725 {
1726 {
1727 .eraseblocks = {
1728 {4 * 1024, 2},
1729 {8 * 1024, 1},
1730 {16 * 1024, 1},
1731 {32 * 1024, 1},
1732 {64 * 1024, 63},
1733 },
1734 .block_erase = spi_block_erase_d8,
1735 }, {
1736 .eraseblocks = { {4 * 1024 * 1024, 1} },
1737 .block_erase = spi_block_erase_c7,
1738 }
1739 },
1740 .write = spi_chip_write_256,
1741 .read = spi_chip_read,
1742 },
1743
1744 {
1745 .vendor = "Eon",
1746 .name = "EN25B32T",
1747 .bustype = CHIP_BUSTYPE_SPI,
1748 .manufacture_id = EON_ID_NOPREFIX,
1749 .model_id = EN_25B32,
1750 .total_size = 4096,
1751 .page_size = 256,
1752 .tested = TEST_UNTESTED,
1753 .probe = probe_spi_rdid,
1754 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001755 .block_erasers =
1756 {
1757 {
1758 .eraseblocks = {
1759 {64 * 1024, 63},
1760 {32 * 1024, 1},
1761 {16 * 1024, 1},
1762 {8 * 1024, 1},
1763 {4 * 1024, 2},
1764 },
1765 .block_erase = spi_block_erase_d8,
1766 }, {
1767 .eraseblocks = { {4 * 1024 * 1024, 1} },
1768 .block_erase = spi_block_erase_c7,
1769 }
1770 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001771 .write = spi_chip_write_256,
1772 .read = spi_chip_read,
1773 },
1774
1775 {
1776 .vendor = "Eon",
1777 .name = "EN25B64",
1778 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001779 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001780 .model_id = EN_25B64,
1781 .total_size = 8192,
1782 .page_size = 256,
1783 .tested = TEST_UNTESTED,
1784 .probe = probe_spi_rdid,
1785 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001786 .block_erasers =
1787 {
1788 {
1789 .eraseblocks = {
1790 {4 * 1024, 2},
1791 {8 * 1024, 1},
1792 {16 * 1024, 1},
1793 {32 * 1024, 1},
1794 {64 * 1024, 127},
1795 },
1796 .block_erase = spi_block_erase_d8,
1797 }, {
1798 .eraseblocks = { {8 * 1024 * 1024, 1} },
1799 .block_erase = spi_block_erase_c7,
1800 }
1801 },
1802 .write = spi_chip_write_256,
1803 .read = spi_chip_read,
1804 },
1805
1806 {
1807 .vendor = "Eon",
1808 .name = "EN25B64T",
1809 .bustype = CHIP_BUSTYPE_SPI,
1810 .manufacture_id = EON_ID_NOPREFIX,
1811 .model_id = EN_25B64,
1812 .total_size = 8192,
1813 .page_size = 256,
1814 .tested = TEST_UNTESTED,
1815 .probe = probe_spi_rdid,
1816 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001817 .block_erasers =
1818 {
1819 {
1820 .eraseblocks = {
1821 {64 * 1024, 127},
1822 {32 * 1024, 1},
1823 {16 * 1024, 1},
1824 {8 * 1024, 1},
1825 {4 * 1024, 2},
1826 },
1827 .block_erase = spi_block_erase_d8,
1828 }, {
1829 .eraseblocks = { {8 * 1024 * 1024, 1} },
1830 .block_erase = spi_block_erase_c7,
1831 }
1832 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001833 .write = spi_chip_write_256,
1834 .read = spi_chip_read,
1835 },
1836
1837 {
1838 .vendor = "Eon",
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001839 .name = "EN25D16",
1840 .bustype = CHIP_BUSTYPE_SPI,
1841 .manufacture_id = EON_ID_NOPREFIX,
1842 .model_id = EN_25D16,
1843 .total_size = 2048,
1844 .page_size = 256,
1845 .tested = TEST_UNTESTED,
1846 .probe = probe_spi_rdid,
1847 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001848 .block_erasers =
1849 {
1850 {
1851 .eraseblocks = { {4 * 1024, 512} },
1852 .block_erase = spi_block_erase_20,
1853 }, {
1854 .eraseblocks = { {64 * 1024, 32} },
1855 .block_erase = spi_block_erase_d8,
1856 }, {
1857 .eraseblocks = { {64 * 1024, 32} },
1858 .block_erase = spi_block_erase_52,
1859 }, {
1860 .eraseblocks = { {2 * 1024 * 1024, 1} },
1861 .block_erase = spi_block_erase_60,
1862 }, {
1863 .eraseblocks = { {2 * 1024 * 1024, 1} },
1864 .block_erase = spi_block_erase_c7,
1865 }
1866 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001867 .write = spi_chip_write_256,
1868 .read = spi_chip_read,
1869 },
1870
1871 {
1872 .vendor = "Eon",
1873 .name = "EN25F05",
1874 .bustype = CHIP_BUSTYPE_SPI,
1875 .manufacture_id = EON_ID_NOPREFIX,
1876 .model_id = EN_25F05,
1877 .total_size = 64,
1878 .page_size = 256,
1879 .tested = TEST_UNTESTED,
1880 .probe = probe_spi_rdid,
1881 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001882 .block_erasers =
1883 {
1884 {
1885 .eraseblocks = { {4 * 1024, 16} },
1886 .block_erase = spi_block_erase_20,
1887 }, {
1888 .eraseblocks = { {32 * 1024, 2} },
1889 .block_erase = spi_block_erase_d8,
1890 }, {
1891 .eraseblocks = { {32 * 1024, 2} },
1892 .block_erase = spi_block_erase_52,
1893 }, {
1894 .eraseblocks = { {64 * 1024, 1} },
1895 .block_erase = spi_block_erase_60,
1896 }, {
1897 .eraseblocks = { {64 * 1024, 1} },
1898 .block_erase = spi_block_erase_c7,
1899 }
1900 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001901 .write = spi_chip_write_256,
1902 .read = spi_chip_read,
1903 },
1904
1905 {
1906 .vendor = "Eon",
1907 .name = "EN25F10",
1908 .bustype = CHIP_BUSTYPE_SPI,
1909 .manufacture_id = EON_ID_NOPREFIX,
1910 .model_id = EN_25F10,
1911 .total_size = 128,
1912 .page_size = 256,
1913 .tested = TEST_UNTESTED,
1914 .probe = probe_spi_rdid,
1915 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001916 .block_erasers =
1917 {
1918 {
1919 .eraseblocks = { {4 * 1024, 32} },
1920 .block_erase = spi_block_erase_20,
1921 }, {
1922 .eraseblocks = { {32 * 1024, 4} },
1923 .block_erase = spi_block_erase_d8,
1924 }, {
1925 .eraseblocks = { {32 * 1024, 4} },
1926 .block_erase = spi_block_erase_52,
1927 }, {
1928 .eraseblocks = { {128 * 1024, 1} },
1929 .block_erase = spi_block_erase_60,
1930 }, {
1931 .eraseblocks = { {128 * 1024, 1} },
1932 .block_erase = spi_block_erase_c7,
1933 }
1934 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001935 .write = spi_chip_write_256,
1936 .read = spi_chip_read,
1937 },
1938
1939 {
1940 .vendor = "Eon",
1941 .name = "EN25F20",
1942 .bustype = CHIP_BUSTYPE_SPI,
1943 .manufacture_id = EON_ID_NOPREFIX,
1944 .model_id = EN_25F20,
1945 .total_size = 256,
1946 .page_size = 256,
1947 .tested = TEST_UNTESTED,
1948 .probe = probe_spi_rdid,
1949 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001950 .block_erasers =
1951 {
1952 {
1953 .eraseblocks = { {4 * 1024, 64} },
1954 .block_erase = spi_block_erase_20,
1955 }, {
1956 .eraseblocks = { {64 * 1024, 4} },
1957 .block_erase = spi_block_erase_d8,
1958 }, {
1959 .eraseblocks = { {64 * 1024, 4} },
1960 .block_erase = spi_block_erase_52,
1961 }, {
1962 .eraseblocks = { {256 * 1024, 1} },
1963 .block_erase = spi_block_erase_60,
1964 }, {
1965 .eraseblocks = { {256 * 1024, 1} },
1966 .block_erase = spi_block_erase_c7,
1967 }
1968 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001969 .write = spi_chip_write_256,
1970 .read = spi_chip_read,
1971 },
1972
1973 {
1974 .vendor = "Eon",
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001975 .name = "EN25F40",
1976 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00001977 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001978 .model_id = EN_25F40,
1979 .total_size = 512,
1980 .page_size = 256,
Carl-Daniel Hailfingerfaaa2b22009-06-22 10:06:28 +00001981 .tested = TEST_OK_PROBE,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00001982 .probe = probe_spi_rdid,
1983 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001984 .block_erasers =
1985 {
1986 {
Sean Nelson54596372010-01-09 05:30:14 +00001987 .eraseblocks = { {4 * 1024, 128} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001988 .block_erase = spi_block_erase_20,
1989 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001990 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001991 .block_erase = spi_block_erase_d8,
1992 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001993 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001994 .block_erase = spi_block_erase_60,
1995 }, {
Sean Nelson54596372010-01-09 05:30:14 +00001996 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson6b11ad22009-12-23 17:05:59 +00001997 .block_erase = spi_block_erase_c7,
1998 },
1999 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002000 .write = spi_chip_write_256,
2001 .read = spi_chip_read,
2002 },
2003
2004 {
2005 .vendor = "Eon",
2006 .name = "EN25F80",
2007 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002008 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002009 .model_id = EN_25F80,
2010 .total_size = 1024,
2011 .page_size = 256,
2012 .tested = TEST_UNTESTED,
2013 .probe = probe_spi_rdid,
2014 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002015 .block_erasers =
2016 {
2017 {
2018 .eraseblocks = { {4 * 1024, 256} },
2019 .block_erase = spi_block_erase_20,
2020 }, {
2021 .eraseblocks = { {64 * 1024, 16} },
2022 .block_erase = spi_block_erase_d8,
2023 }, {
2024 .eraseblocks = { {1024 * 1024, 1} },
2025 .block_erase = spi_block_erase_60,
2026 }, {
2027 .eraseblocks = { {1024 * 1024, 1} },
2028 .block_erase = spi_block_erase_c7,
2029 }
2030 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002031 .write = spi_chip_write_256,
2032 .read = spi_chip_read,
2033 },
2034
2035 {
2036 .vendor = "Eon",
2037 .name = "EN25F16",
2038 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002039 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002040 .model_id = EN_25F16,
2041 .total_size = 2048,
2042 .page_size = 256,
2043 .tested = TEST_UNTESTED,
2044 .probe = probe_spi_rdid,
2045 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002046 .block_erasers =
2047 {
2048 {
2049 .eraseblocks = { {4 * 1024, 512} },
2050 .block_erase = spi_block_erase_20,
2051 }, {
2052 .eraseblocks = { {64 * 1024, 32} },
2053 .block_erase = spi_block_erase_d8,
2054 }, {
2055 .eraseblocks = { {2 * 1024 * 1024, 1} },
2056 .block_erase = spi_block_erase_60,
2057 }, {
2058 .eraseblocks = { {2 * 1024 * 1024, 1} },
2059 .block_erase = spi_block_erase_c7,
2060 }
2061 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002062 .write = spi_chip_write_256,
2063 .read = spi_chip_read,
2064 },
2065
2066 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002067 .vendor = "Eon",
2068 .name = "EN25F32",
2069 .bustype = CHIP_BUSTYPE_SPI,
2070 .manufacture_id = EON_ID_NOPREFIX,
2071 .model_id = EN_25F32,
2072 .total_size = 4096,
2073 .page_size = 256,
2074 .tested = TEST_UNTESTED,
2075 .probe = probe_spi_rdid,
2076 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002077 .block_erasers =
2078 {
2079 {
2080 .eraseblocks = { {4 * 1024, 1024} },
2081 .block_erase = spi_block_erase_20,
2082 }, {
2083 .eraseblocks = { {64 * 1024, 64} },
2084 .block_erase = spi_block_erase_d8,
2085 }, {
2086 .eraseblocks = { {4 * 1024 * 1024, 1} },
2087 .block_erase = spi_block_erase_60,
2088 }, {
2089 .eraseblocks = { {4 * 1024 * 1024, 1} },
2090 .block_erase = spi_block_erase_c7,
2091 }
2092 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002093 .write = spi_chip_write_256,
2094 .read = spi_chip_read,
2095 },
2096
2097 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002098 .vendor = "Eon",
2099 .name = "EN29F010",
2100 .bustype = CHIP_BUSTYPE_PARALLEL,
2101 .manufacture_id = EON_ID,
2102 .model_id = EN_29F010,
2103 .total_size = 128,
2104 .page_size = 128,
2105 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2106 .tested = TEST_OK_PREW,
2107 .probe = probe_jedec,
2108 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2109 .block_erasers =
2110 {
2111 {
2112 .eraseblocks = { {16 * 1024, 8} },
2113 .block_erase = erase_sector_jedec,
2114 },
2115 {
2116 .eraseblocks = { {128 * 1024, 1} },
2117 .block_erase = erase_chip_block_jedec,
2118 },
2119 },
2120 .write = write_jedec_1,
2121 .read = read_memmapped,
2122 },
2123
2124 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002125 .vendor = "EON",
2126 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002127 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002128 .manufacture_id = EON_ID,
2129 .model_id = EN_29F002B,
2130 .total_size = 256,
2131 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002132 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002133 .tested = TEST_UNTESTED,
2134 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002135 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002136 .block_erasers =
2137 {
2138 {
2139 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002140 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002141 {8 * 1024, 2},
2142 {32 * 1024, 1},
2143 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002144 },
2145 .block_erase = erase_sector_jedec,
2146 }, {
2147 .eraseblocks = { {256 * 1024, 1} },
2148 .block_erase = erase_chip_block_jedec,
2149 },
2150 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002151 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002152 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002153 },
2154
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002155 {
2156 .vendor = "EON",
2157 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002158 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002159 .manufacture_id = EON_ID,
2160 .model_id = EN_29F002T,
2161 .total_size = 256,
2162 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002163 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002164 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002165 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002166 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002167 .block_erasers =
2168 {
2169 {
2170 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002171 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002172 {32 * 1024, 1},
2173 {8 * 1024, 2},
2174 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002175 },
2176 .block_erase = erase_sector_jedec,
2177 }, {
2178 .eraseblocks = { {256 * 1024, 1} },
2179 .block_erase = erase_chip_block_jedec,
2180 },
2181 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002182 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002183 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002184 },
2185
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002186 {
2187 .vendor = "Fujitsu",
2188 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002189 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002190 .manufacture_id = FUJITSU_ID,
2191 .model_id = MBM29F004BC,
2192 .total_size = 512,
2193 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002194 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002195 .tested = TEST_UNTESTED,
2196 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002197 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002198 .block_erasers =
2199 {
2200 {
2201 .eraseblocks = {
2202 {16 * 1024, 1},
2203 {8 * 1024, 2},
2204 {32 * 1024, 1},
2205 {64 * 1024, 7},
2206 },
Sean Nelson35727f72010-01-28 23:55:12 +00002207 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002208 }, {
2209 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002210 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002211 },
2212 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002214 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002215 },
2216
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002217 {
2218 .vendor = "Fujitsu",
2219 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002220 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002221 .manufacture_id = FUJITSU_ID,
2222 .model_id = MBM29F004TC,
2223 .total_size = 512,
2224 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002225 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002226 .tested = TEST_UNTESTED,
2227 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002228 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002229 .block_erasers =
2230 {
2231 {
2232 .eraseblocks = {
2233 {64 * 1024, 7},
2234 {32 * 1024, 1},
2235 {8 * 1024, 2},
2236 {16 * 1024, 1},
2237 },
Sean Nelson35727f72010-01-28 23:55:12 +00002238 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002239 }, {
2240 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002241 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002242 },
2243 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002244 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002245 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002246 },
2247
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002248 {
Sean Nelson35727f72010-01-28 23:55:12 +00002249 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002250 .vendor = "Fujitsu",
2251 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002252 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002253 .manufacture_id = FUJITSU_ID,
2254 .model_id = MBM29F400BC,
2255 .total_size = 512,
2256 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002257 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002258 .tested = TEST_UNTESTED,
2259 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002260 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002261 .block_erasers =
2262 {
2263 {
2264 .eraseblocks = {
2265 {16 * 1024, 1},
2266 {8 * 1024, 2},
2267 {32 * 1024, 1},
2268 {64 * 1024, 7},
2269 },
2270 .block_erase = block_erase_m29f400bt,
2271 }, {
2272 .eraseblocks = { {512 * 1024, 1} },
2273 .block_erase = block_erase_chip_m29f400bt,
2274 },
2275 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002276 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002277 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002278 },
2279
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002280 {
2281 .vendor = "Fujitsu",
2282 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002283 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002284 .manufacture_id = FUJITSU_ID,
2285 .model_id = MBM29F400TC,
2286 .total_size = 512,
2287 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002288 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002289 .tested = TEST_UNTESTED,
2290 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002291 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002292 .block_erasers =
2293 {
2294 {
2295 .eraseblocks = {
2296 {64 * 1024, 7},
2297 {32 * 1024, 1},
2298 {8 * 1024, 2},
2299 {16 * 1024, 1},
2300 },
2301 .block_erase = block_erase_m29f400bt,
2302 }, {
2303 .eraseblocks = { {512 * 1024, 1} },
2304 .block_erase = block_erase_chip_m29f400bt,
2305 },
2306 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002307 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002308 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002309 },
2310
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002311 {
2312 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002313 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002314 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002315 .manufacture_id = INTEL_ID,
2316 .model_id = P28F001BXB,
2317 .total_size = 128,
2318 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelson35727f72010-01-28 23:55:12 +00002319 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002320 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002321 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002322 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002323 .block_erasers =
2324 {
2325 {
2326 .eraseblocks = {
2327 {8 * 1024, 1},
2328 {4 * 1024, 2},
2329 {112 * 1024, 1},
2330 },
Sean Nelson28accc22010-03-19 18:47:06 +00002331 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002332 },
2333 },
Sean Nelson28accc22010-03-19 18:47:06 +00002334 .unlock = unlock_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002335 .write = NULL,
2336 .read = read_memmapped,
2337 },
2338
2339 {
2340 .vendor = "Intel",
2341 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002342 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002343 .manufacture_id = INTEL_ID,
2344 .model_id = P28F001BXT,
2345 .total_size = 128,
2346 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelson35727f72010-01-28 23:55:12 +00002347 .feature_bits = 0,
2348 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002349 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002350 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002351 .block_erasers =
2352 {
2353 {
2354 .eraseblocks = {
2355 {112 * 1024, 1},
2356 {4 * 1024, 2},
2357 {8 * 1024, 1},
2358 },
Sean Nelson28accc22010-03-19 18:47:06 +00002359 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002360 },
2361 },
Sean Nelson28accc22010-03-19 18:47:06 +00002362 .unlock = unlock_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002363 .write = NULL,
2364 .read = read_memmapped,
2365 },
2366
2367 {
2368 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002369 .name = "28F004S5",
2370 .bustype = CHIP_BUSTYPE_PARALLEL,
2371 .manufacture_id = INTEL_ID,
2372 .model_id = E_28F004S5,
2373 .total_size = 512,
2374 .page_size = 256,
2375 .tested = TEST_UNTESTED,
2376 .probe = probe_82802ab,
2377 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002378 .block_erasers =
2379 {
2380 {
2381 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002382 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002383 },
2384 },
Sean Nelson28accc22010-03-19 18:47:06 +00002385 .unlock = unlock_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002386 .write = write_82802ab,
2387 .read = read_memmapped,
2388 },
2389
2390 {
2391 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002392 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002393 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002394 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002395 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002396 .total_size = 512,
2397 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002398 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002399 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002400 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002401 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002402 .block_erasers =
2403 {
2404 {
2405 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002406 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002407 },
2408 },
Sean Nelson28accc22010-03-19 18:47:06 +00002409 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002410 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002411 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002412 },
2413
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002414 {
2415 .vendor = "Intel",
2416 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002417 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002418 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002419 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002420 .total_size = 1024,
2421 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002422 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002423 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002424 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002425 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002426 .block_erasers =
2427 {
2428 {
2429 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00002430 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002431 },
2432 },
Sean Nelson28accc22010-03-19 18:47:06 +00002433 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002434 .write = write_82802ab,
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 {
2439 .vendor = "Macronix",
2440 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002441 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002442 .manufacture_id = MX_ID,
2443 .model_id = MX_25L512,
2444 .total_size = 64,
2445 .page_size = 256,
2446 .tested = TEST_UNTESTED,
2447 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002448 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002449 .block_erasers =
2450 {
2451 {
2452 .eraseblocks = { {4 * 1024, 16} },
2453 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002454 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002455 .eraseblocks = { {64 * 1024, 1} },
2456 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002457 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002458 .eraseblocks = { {64 * 1024, 1} },
2459 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002460 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002461 .eraseblocks = { {64 * 1024, 1} },
2462 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002463 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002464 .eraseblocks = { {64 * 1024, 1} },
2465 .block_erase = spi_block_erase_c7,
2466 },
2467 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002468 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002469 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002470 },
2471
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002472 {
2473 .vendor = "Macronix",
2474 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002475 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002476 .manufacture_id = MX_ID,
2477 .model_id = MX_25L1005,
2478 .total_size = 128,
2479 .page_size = 256,
2480 .tested = TEST_UNTESTED,
2481 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002482 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002483 .block_erasers =
2484 {
2485 {
2486 .eraseblocks = { {4 * 1024, 32} },
2487 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002488 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002489 .eraseblocks = { {64 * 1024, 2} },
2490 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002491 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002492 .eraseblocks = { {128 * 1024, 1} },
2493 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002494 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002495 .eraseblocks = { {128 * 1024, 1} },
2496 .block_erase = spi_block_erase_c7,
2497 },
2498 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002499 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002500 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002501 },
2502
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002503 {
2504 .vendor = "Macronix",
2505 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002506 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002507 .manufacture_id = MX_ID,
2508 .model_id = MX_25L2005,
2509 .total_size = 256,
2510 .page_size = 256,
2511 .tested = TEST_UNTESTED,
2512 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002513 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002514 .block_erasers =
2515 {
2516 {
2517 .eraseblocks = { {4 * 1024, 64} },
2518 .block_erase = spi_block_erase_20,
2519 }, {
2520 .eraseblocks = { {64 * 1024, 4} },
2521 .block_erase = spi_block_erase_52,
2522 }, {
2523 .eraseblocks = { {64 * 1024, 4} },
2524 .block_erase = spi_block_erase_d8,
2525 }, {
2526 .eraseblocks = { {256 * 1024, 1} },
2527 .block_erase = spi_block_erase_60,
2528 }, {
2529 .eraseblocks = { {256 * 1024, 1} },
2530 .block_erase = spi_block_erase_c7,
2531 },
2532 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002533 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002534 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002535 },
2536
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002537 {
2538 .vendor = "Macronix",
2539 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002540 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002541 .manufacture_id = MX_ID,
2542 .model_id = MX_25L4005,
2543 .total_size = 512,
2544 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002545 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002546 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002547 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002548 .block_erasers =
2549 {
2550 {
2551 .eraseblocks = { {4 * 1024, 128} },
2552 .block_erase = spi_block_erase_20,
2553 }, {
2554 .eraseblocks = { {64 * 1024, 8} },
2555 .block_erase = spi_block_erase_52,
2556 }, {
2557 .eraseblocks = { {64 * 1024, 8} },
2558 .block_erase = spi_block_erase_d8,
2559 }, {
2560 .eraseblocks = { {512 * 1024, 1} },
2561 .block_erase = spi_block_erase_60,
2562 }, {
2563 .eraseblocks = { {512 * 1024, 1} },
2564 .block_erase = spi_block_erase_c7,
2565 },
2566 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002567 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002568 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002569 },
2570
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002571 {
2572 .vendor = "Macronix",
2573 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002574 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002575 .manufacture_id = MX_ID,
2576 .model_id = MX_25L8005,
2577 .total_size = 1024,
2578 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002579 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002580 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002581 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002582 .block_erasers =
2583 {
2584 {
2585 .eraseblocks = { {4 * 1024, 256} },
2586 .block_erase = spi_block_erase_20,
2587 }, {
2588 .eraseblocks = { {64 * 1024, 16} },
2589 .block_erase = spi_block_erase_52,
2590 }, {
2591 .eraseblocks = { {64 * 1024, 16} },
2592 .block_erase = spi_block_erase_d8,
2593 }, {
2594 .eraseblocks = { {1024 * 1024, 1} },
2595 .block_erase = spi_block_erase_60,
2596 }, {
2597 .eraseblocks = { {1024 * 1024, 1} },
2598 .block_erase = spi_block_erase_c7,
2599 },
2600 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002601 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002602 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002603 },
2604
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002605 {
2606 .vendor = "Macronix",
2607 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002608 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002609 .manufacture_id = MX_ID,
2610 .model_id = MX_25L1605,
2611 .total_size = 2048,
2612 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002613 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002614 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002615 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002616 .block_erasers =
2617 {
2618 {
2619 .eraseblocks = { {4 * 1024, 512} },
2620 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2621 }, {
2622 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2623 .block_erase = spi_block_erase_52,
2624 }, {
2625 .eraseblocks = { {64 * 1024, 32} },
2626 .block_erase = spi_block_erase_d8,
2627 }, {
2628 .eraseblocks = { {2 * 1024 * 1024, 1} },
2629 .block_erase = spi_block_erase_60,
2630 }, {
2631 .eraseblocks = { {2 * 1024 * 1024, 1} },
2632 .block_erase = spi_block_erase_c7,
2633 },
2634 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002635 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002636 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002637 },
2638
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002639 {
2640 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002641 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002642 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002643 .manufacture_id = MX_ID,
2644 .model_id = MX_25L1635D,
2645 .total_size = 2048,
2646 .page_size = 256,
2647 .tested = TEST_UNTESTED,
2648 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002649 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002650 .block_erasers =
2651 {
2652 {
2653 .eraseblocks = { {4 * 1024, 512} },
2654 .block_erase = spi_block_erase_20,
2655 }, {
2656 .eraseblocks = { {64 * 1024, 32} },
2657 .block_erase = spi_block_erase_d8,
2658 }, {
2659 .eraseblocks = { {2 * 1024 * 1024, 1} },
2660 .block_erase = spi_block_erase_60,
2661 }, {
2662 .eraseblocks = { {2 * 1024 * 1024, 1} },
2663 .block_erase = spi_block_erase_c7,
2664 }
2665 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002666 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002667 .read = spi_chip_read,
2668 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002669
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002670 {
2671 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002672 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002673 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002674 .manufacture_id = MX_ID,
2675 .model_id = MX_25L3205,
2676 .total_size = 4096,
2677 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002678 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002679 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002680 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002681 .block_erasers =
2682 {
2683 {
2684 .eraseblocks = { {4 * 1024, 1024} },
2685 .block_erase = spi_block_erase_20,
2686 }, {
2687 .eraseblocks = { {4 * 1024, 1024} },
2688 .block_erase = spi_block_erase_d8,
2689 }, {
2690 .eraseblocks = { {4 * 1024 * 1024, 1} },
2691 .block_erase = spi_block_erase_60,
2692 }, {
2693 .eraseblocks = { {4 * 1024 * 1024, 1} },
2694 .block_erase = spi_block_erase_c7,
2695 },
2696 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002697 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002698 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002699 },
2700
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002701 {
2702 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002703 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002704 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002705 .manufacture_id = MX_ID,
2706 .model_id = MX_25L3235D,
2707 .total_size = 4096,
2708 .page_size = 256,
2709 .tested = TEST_UNTESTED,
2710 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002711 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002712 .block_erasers =
2713 {
2714 {
2715 .eraseblocks = { {4 * 1024, 1024} },
2716 .block_erase = spi_block_erase_20,
2717 }, {
2718 .eraseblocks = { {64 * 1024, 64} },
2719 .block_erase = spi_block_erase_d8,
2720 }, {
2721 .eraseblocks = { {4 * 1024 * 1024, 1} },
2722 .block_erase = spi_block_erase_60,
2723 }, {
2724 .eraseblocks = { {4 * 1024 * 1024, 1} },
2725 .block_erase = spi_block_erase_c7,
2726 }
2727 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002728 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002729 .read = spi_chip_read,
2730 },
2731
2732 {
2733 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002734 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002735 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002736 .manufacture_id = MX_ID,
2737 .model_id = MX_25L6405,
2738 .total_size = 8192,
2739 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002740 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002741 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002742 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002743 .block_erasers =
2744 {
2745 {
2746 .eraseblocks = { {64 * 1024, 128} },
2747 .block_erase = spi_block_erase_20,
2748 }, {
2749 .eraseblocks = { {64 * 1024, 128} },
2750 .block_erase = spi_block_erase_d8,
2751 }, {
2752 .eraseblocks = { {8 * 1024 * 1024, 1} },
2753 .block_erase = spi_block_erase_60,
2754 }, {
2755 .eraseblocks = { {8 * 1024 * 1024, 1} },
2756 .block_erase = spi_block_erase_c7,
2757 }
2758 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002759 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002760 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002761 },
2762
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002763 {
2764 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002765 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002766 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002767 .manufacture_id = MX_ID,
2768 .model_id = MX_25L12805,
2769 .total_size = 16384,
2770 .page_size = 256,
2771 .tested = TEST_UNTESTED,
2772 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002773 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002774 .block_erasers =
2775 {
2776 {
2777 .eraseblocks = { {4 * 1024, 4096} },
2778 .block_erase = spi_block_erase_20,
2779 }, {
2780 .eraseblocks = { {64 * 1024, 256} },
2781 .block_erase = spi_block_erase_d8,
2782 }, {
2783 .eraseblocks = { {16 * 1024 * 1024, 1} },
2784 .block_erase = spi_block_erase_60,
2785 }, {
2786 .eraseblocks = { {16 * 1024 * 1024, 1} },
2787 .block_erase = spi_block_erase_c7,
2788 }
2789 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002790 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002791 .read = spi_chip_read,
2792 },
2793
2794 {
2795 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002796 .name = "MX29F001B",
2797 .bustype = CHIP_BUSTYPE_PARALLEL,
2798 .manufacture_id = MX_ID,
2799 .model_id = MX_29F001B,
2800 .total_size = 128,
2801 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002802 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2803 .tested = TEST_UNTESTED,
2804 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002805 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002806 .block_erasers =
2807 {
2808 {
2809 .eraseblocks = {
2810 {8 * 1024, 1},
2811 {4 * 1024, 2},
2812 {8 * 1024, 2},
2813 {32 * 1024, 1},
2814 {64 * 1024, 1},
2815 },
Sean Nelson35727f72010-01-28 23:55:12 +00002816 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002817 }, {
2818 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002819 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002820 }
2821 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002822 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002823 .read = read_memmapped,
2824 },
2825
2826 {
2827 .vendor = "Macronix",
2828 .name = "MX29F001T",
2829 .bustype = CHIP_BUSTYPE_PARALLEL,
2830 .manufacture_id = MX_ID,
2831 .model_id = MX_29F001T,
2832 .total_size = 128,
2833 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002834 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2835 .tested = TEST_UNTESTED,
2836 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002837 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002838 .block_erasers =
2839 {
2840 {
2841 .eraseblocks = {
2842 {64 * 1024, 1},
2843 {32 * 1024, 1},
2844 {8 * 1024, 2},
2845 {4 * 1024, 2},
2846 {8 * 1024, 1},
2847 },
Sean Nelson35727f72010-01-28 23:55:12 +00002848 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002849 }, {
2850 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002851 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002852 }
2853 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002854 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002855 .read = read_memmapped,
2856 },
2857
2858 {
2859 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002860 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002861 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002862 .manufacture_id = MX_ID,
2863 .model_id = MX_29F002B,
2864 .total_size = 256,
2865 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002866 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002867 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002868 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002869 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002870 .block_erasers =
2871 {
2872 {
2873 .eraseblocks = {
2874 {16 * 1024, 1},
2875 {8 * 1024, 2},
2876 {32 * 1024, 1},
2877 {64 * 1024, 3},
2878 },
Sean Nelson35727f72010-01-28 23:55:12 +00002879 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002880 }, {
2881 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002882 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002883 },
2884 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002885 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002886 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002887 },
2888
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002889 {
2890 .vendor = "Macronix",
2891 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002892 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002893 .manufacture_id = MX_ID,
2894 .model_id = MX_29F002T,
2895 .total_size = 256,
2896 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002897 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002898 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00002899 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002900 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002901 .block_erasers =
2902 {
2903 {
2904 .eraseblocks = {
2905 {64 * 1024, 3},
2906 {32 * 1024, 1},
2907 {8 * 1024, 2},
2908 {16 * 1024, 1},
2909 },
Sean Nelson35727f72010-01-28 23:55:12 +00002910 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002911 }, {
2912 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002913 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002914 },
2915 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002916 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002917 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002918 },
2919
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002920 {
2921 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002922 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002923 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002924 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002925 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002926 .total_size = 512,
2927 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002928 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2929 .tested = TEST_UNTESTED,
2930 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002931 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002932 .block_erasers =
2933 {
2934 {
2935 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00002936 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002937 }, {
2938 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002939 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002940 },
2941 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002942 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002943 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002944 },
2945
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002946 {
2947 .vendor = "Numonyx",
2948 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002949 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002950 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002951 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002952 .total_size = 128,
2953 .page_size = 256,
2954 .tested = TEST_UNTESTED,
2955 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002956 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002957 .block_erasers =
2958 {
2959 {
2960 .eraseblocks = { {4 * 1024, 32} },
2961 .block_erase = spi_block_erase_20,
2962 }, {
2963 .eraseblocks = { {64 * 1024, 2} },
2964 .block_erase = spi_block_erase_d8,
2965 }, {
2966 .eraseblocks = { {128 * 1024, 1} },
2967 .block_erase = spi_block_erase_c7,
2968 }
2969 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002970 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002971 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002972 },
2973
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002974 {
2975 .vendor = "Numonyx",
2976 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002977 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002978 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002979 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002980 .total_size = 256,
2981 .page_size = 256,
2982 .tested = TEST_UNTESTED,
2983 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002984 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002985 .block_erasers =
2986 {
2987 {
2988 .eraseblocks = { {4 * 1024, 64} },
2989 .block_erase = spi_block_erase_20,
2990 }, {
2991 .eraseblocks = { {64 * 1024, 4} },
2992 .block_erase = spi_block_erase_d8,
2993 }, {
2994 .eraseblocks = { {256 * 1024, 1} },
2995 .block_erase = spi_block_erase_c7,
2996 }
2997 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002998 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002999 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003000 },
3001
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003002 {
3003 .vendor = "Numonyx",
3004 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003005 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003006 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003007 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003008 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003009 .page_size = 256,
3010 .tested = TEST_UNTESTED,
3011 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003012 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003013 .block_erasers =
3014 {
3015 {
3016 .eraseblocks = { {4 * 1024, 128} },
3017 .block_erase = spi_block_erase_20,
3018 }, {
3019 .eraseblocks = { {64 * 1024, 8} },
3020 .block_erase = spi_block_erase_d8,
3021 }, {
3022 .eraseblocks = { {512 * 1024, 1} },
3023 .block_erase = spi_block_erase_c7,
3024 }
3025 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003026 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003027 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003028 },
3029
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003030 {
3031 .vendor = "Numonyx",
3032 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003033 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003034 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003035 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003036 .total_size = 1024,
3037 .page_size = 256,
3038 .tested = TEST_OK_PREW,
3039 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003040 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003041 .block_erasers =
3042 {
3043 {
3044 .eraseblocks = { {4 * 1024, 256} },
3045 .block_erase = spi_block_erase_20,
3046 }, {
3047 .eraseblocks = { {64 * 1024, 16} },
3048 .block_erase = spi_block_erase_d8,
3049 }, {
3050 .eraseblocks = { {1024 * 1024, 1} },
3051 .block_erase = spi_block_erase_c7,
3052 }
3053 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003054 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003055 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003056 },
3057
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003058 {
3059 .vendor = "Numonyx",
3060 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003061 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003062 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003063 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003064 .total_size = 2048,
3065 .page_size = 256,
3066 .tested = TEST_UNTESTED,
3067 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003068 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003069 .block_erasers =
3070 {
3071 {
3072 .eraseblocks = { {4 * 1024, 512} },
3073 .block_erase = spi_block_erase_20,
3074 }, {
3075 .eraseblocks = { {64 * 1024, 32} },
3076 .block_erase = spi_block_erase_d8,
3077 }, {
3078 .eraseblocks = { {2 * 1024 * 1024, 1} },
3079 .block_erase = spi_block_erase_c7,
3080 }
3081 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003082 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003083 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003084 },
3085
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003086 {
3087 .vendor = "PMC",
3088 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003089 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003090 .manufacture_id = PMC_ID,
3091 .model_id = PMC_25LV010,
3092 .total_size = 128,
3093 .page_size = 256,
3094 .tested = TEST_UNTESTED,
3095 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003096 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003097 .block_erasers =
3098 {
3099 {
3100 .eraseblocks = { {4 * 1024, 32} },
3101 .block_erase = spi_block_erase_d7,
3102 }, {
3103 .eraseblocks = { {32 * 1024, 4} },
3104 .block_erase = spi_block_erase_d8,
3105 }, {
3106 .eraseblocks = { {128 * 1024, 1} },
3107 .block_erase = spi_block_erase_c7,
3108 }
3109 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003110 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003111 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003112 },
3113
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003114 {
3115 .vendor = "PMC",
3116 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003117 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003118 .manufacture_id = PMC_ID,
3119 .model_id = PMC_25LV016B,
3120 .total_size = 2048,
3121 .page_size = 256,
3122 .tested = TEST_UNTESTED,
3123 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003124 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003125 .block_erasers =
3126 {
3127 {
3128 .eraseblocks = { {4 * 1024, 512} },
3129 .block_erase = spi_block_erase_d7,
3130 }, {
3131 .eraseblocks = { {4 * 1024, 512} },
3132 .block_erase = spi_block_erase_20,
3133 }, {
3134 .eraseblocks = { {64 * 1024, 32} },
3135 .block_erase = spi_block_erase_d8,
3136 }, {
3137 .eraseblocks = { {2 * 1024 * 1024, 1} },
3138 .block_erase = spi_block_erase_60,
3139 }, {
3140 .eraseblocks = { {2 * 1024 * 1024, 1} },
3141 .block_erase = spi_block_erase_c7,
3142 }
3143 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003144 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003145 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003146 },
3147
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003148 {
3149 .vendor = "PMC",
3150 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003151 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003152 .manufacture_id = PMC_ID,
3153 .model_id = PMC_25LV020,
3154 .total_size = 256,
3155 .page_size = 256,
3156 .tested = TEST_UNTESTED,
3157 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003158 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003159 .block_erasers =
3160 {
3161 {
3162 .eraseblocks = { {4 * 1024, 64} },
3163 .block_erase = spi_block_erase_d7,
3164 }, {
3165 .eraseblocks = { {64 * 1024, 4} },
3166 .block_erase = spi_block_erase_d8,
3167 }, {
3168 .eraseblocks = { {256 * 1024, 1} },
3169 .block_erase = spi_block_erase_c7,
3170 }
3171 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003172 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003173 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003174 },
3175
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003176 {
3177 .vendor = "PMC",
3178 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003179 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003180 .manufacture_id = PMC_ID,
3181 .model_id = PMC_25LV040,
3182 .total_size = 512,
3183 .page_size = 256,
3184 .tested = TEST_UNTESTED,
3185 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003186 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003187 .block_erasers =
3188 {
3189 {
3190 .eraseblocks = { {4 * 1024, 128} },
3191 .block_erase = spi_block_erase_d7,
3192 }, {
3193 .eraseblocks = { {64 * 1024, 8} },
3194 .block_erase = spi_block_erase_d8,
3195 }, {
3196 .eraseblocks = { {512 * 1024, 1} },
3197 .block_erase = spi_block_erase_c7,
3198 }
3199 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003200 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003201 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003202 },
3203
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003204 {
3205 .vendor = "PMC",
3206 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003207 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003208 .manufacture_id = PMC_ID,
3209 .model_id = PMC_25LV080B,
3210 .total_size = 1024,
3211 .page_size = 256,
3212 .tested = TEST_UNTESTED,
3213 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003214 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003215 .block_erasers =
3216 {
3217 {
3218 .eraseblocks = { {4 * 1024, 256} },
3219 .block_erase = spi_block_erase_d7,
3220 }, {
3221 .eraseblocks = { {4 * 1024, 256} },
3222 .block_erase = spi_block_erase_20,
3223 }, {
3224 .eraseblocks = { {64 * 1024, 16} },
3225 .block_erase = spi_block_erase_d8,
3226 }, {
3227 .eraseblocks = { {1024 * 1024, 1} },
3228 .block_erase = spi_block_erase_60,
3229 }, {
3230 .eraseblocks = { {1024 * 1024, 1} },
3231 .block_erase = spi_block_erase_c7,
3232 }
3233 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003234 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003235 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003236 },
3237
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003238 {
3239 .vendor = "PMC",
3240 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003241 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003242 .manufacture_id = PMC_ID,
3243 .model_id = PMC_25LV512,
3244 .total_size = 64,
3245 .page_size = 256,
3246 .tested = TEST_UNTESTED,
3247 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003248 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003249 .block_erasers =
3250 {
3251 {
3252 .eraseblocks = { {4 * 1024, 16} },
3253 .block_erase = spi_block_erase_d7,
3254 }, {
3255 .eraseblocks = { {32 * 1024, 2} },
3256 .block_erase = spi_block_erase_d8,
3257 }, {
3258 .eraseblocks = { {64 * 1024, 1} },
3259 .block_erase = spi_block_erase_c7,
3260 }
3261 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003262 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003263 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003264 },
3265
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003266 {
3267 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003268 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003269 .bustype = CHIP_BUSTYPE_PARALLEL,
3270 .manufacture_id = PMC_ID_NOPREFIX,
3271 .model_id = PMC_29F002T,
3272 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003273 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003274 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3275 .tested = TEST_UNTESTED,
3276 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003277 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003278 .block_erasers =
3279 {
3280 {
3281 .eraseblocks = {
3282 {128 * 1024, 1},
3283 {96 * 1024, 1},
3284 {8 * 1024, 2},
3285 {16 * 1024, 1},
3286 },
Sean Nelson35727f72010-01-28 23:55:12 +00003287 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003288 }, {
3289 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003290 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003291 },
3292 },
Sean Nelson35727f72010-01-28 23:55:12 +00003293 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003294 .read = read_memmapped,
3295 },
3296
3297 {
3298 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003299 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003300 .bustype = CHIP_BUSTYPE_PARALLEL,
3301 .manufacture_id = PMC_ID_NOPREFIX,
3302 .model_id = PMC_29F002B,
3303 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003304 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003305 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003306 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003307 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003308 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003309 .block_erasers =
3310 {
3311 {
3312 .eraseblocks = {
3313 {16 * 1024, 1},
3314 {8 * 1024, 2},
3315 {96 * 1024, 1},
3316 {128 * 1024, 1},
3317 },
Sean Nelson35727f72010-01-28 23:55:12 +00003318 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003319 }, {
3320 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003321 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003322 },
3323 },
Sean Nelson35727f72010-01-28 23:55:12 +00003324 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003325 .read = read_memmapped,
3326 },
3327
3328 {
3329 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003330 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003331 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003332 .manufacture_id = PMC_ID_NOPREFIX,
3333 .model_id = PMC_39F010,
3334 .total_size = 128,
3335 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003336 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3337 .tested = TEST_UNTESTED,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003338 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003339 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003340 .block_erasers =
3341 {
3342 {
3343 .eraseblocks = { {4 * 1024, 32} },
3344 .block_erase = erase_sector_jedec,
3345 }, {
3346 .eraseblocks = { {64 * 1024, 2} },
3347 .block_erase = erase_block_jedec,
3348 }, {
3349 .eraseblocks = { {128 * 1024, 1} },
3350 .block_erase = erase_chip_block_jedec,
3351 }
3352 },
Sean Nelson35727f72010-01-28 23:55:12 +00003353 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003354 .read = read_memmapped,
3355 },
3356
3357 {
3358 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003359 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003360 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003361 .manufacture_id = PMC_ID_NOPREFIX,
3362 .model_id = PMC_49FL002,
3363 .total_size = 256,
3364 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003365 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00003366 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003367 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003368 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003369 .block_erasers =
3370 {
3371 {
3372 .eraseblocks = { {4 * 1024, 64} },
3373 .block_erase = erase_sector_jedec,
3374 }, {
3375 .eraseblocks = { {16 * 1024, 16} },
3376 .block_erase = erase_block_jedec,
3377 }, {
3378 .eraseblocks = { {256 * 1024, 1} },
3379 .block_erase = erase_chip_block_jedec,
3380 }
3381 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003382 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003383 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003384 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003385 },
3386
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003387 {
3388 .vendor = "PMC",
3389 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003390 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003391 .manufacture_id = PMC_ID_NOPREFIX,
3392 .model_id = PMC_49FL004,
3393 .total_size = 512,
3394 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003395 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3396 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003397 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003398 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003399 .block_erasers =
3400 {
3401 {
3402 .eraseblocks = { {4 * 1024, 128} },
3403 .block_erase = erase_sector_jedec,
3404 }, {
3405 .eraseblocks = { {64 * 1024, 8} },
3406 .block_erase = erase_block_jedec,
3407 }, {
3408 .eraseblocks = { {512 * 1024, 1} },
3409 .block_erase = erase_chip_block_jedec,
3410 }
3411 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003412 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003413 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003414 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003415 },
3416
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003417 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003418 .vendor = "Sanyo",
3419 .name = "LF25FW203A",
3420 .bustype = CHIP_BUSTYPE_SPI,
3421 .manufacture_id = SANYO_ID,
3422 .model_id = SANYO_LE25FW203A,
3423 .total_size = 2048,
3424 .page_size = 256,
3425 .tested = TEST_UNTESTED,
3426 .probe = probe_spi_rdid,
3427 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003428 .block_erasers =
3429 {
3430 {
3431 .eraseblocks = { {64 * 1024, 32} },
3432 .block_erase = spi_block_erase_d8,
3433 }, {
3434 .eraseblocks = { {2 * 1024 * 1024, 1} },
3435 .block_erase = spi_block_erase_c7,
3436 }
3437 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003438 .write = spi_chip_write_256,
3439 .read = spi_chip_read,
3440 },
3441
3442 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003443 .vendor = "Sharp",
3444 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003445 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003446 .manufacture_id = SHARP_ID,
3447 .model_id = SHARP_LHF00L04,
3448 .total_size = 1024,
3449 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003450 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003451 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003452 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003453 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003454 .block_erasers =
3455 {
3456 {
3457 .eraseblocks = {
3458 {64 * 1024, 15},
3459 {8 * 1024, 8}
3460 },
Sean Nelson28accc22010-03-19 18:47:06 +00003461 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003462 }, {
3463 .eraseblocks = {
3464 {1024 * 1024, 1}
3465 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003466 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003467 },
3468 },
Sean Nelson28accc22010-03-19 18:47:06 +00003469 .unlock = unlock_82802ab,
3470 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003471 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003472 },
3473
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003474 {
3475 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003476 .name = "S25FL008A",
3477 .bustype = CHIP_BUSTYPE_SPI,
3478 .manufacture_id = SPANSION_ID,
3479 .model_id = SPANSION_S25FL008A,
3480 .total_size = 1024,
3481 .page_size = 256,
3482 .tested = TEST_OK_PREW,
3483 .probe = probe_spi_rdid,
3484 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003485 .block_erasers =
3486 {
3487 {
3488 .eraseblocks = { {64 * 1024, 16} },
3489 .block_erase = spi_block_erase_d8,
3490 }, {
3491 .eraseblocks = { {1024 * 1024, 1} },
3492 .block_erase = spi_block_erase_c7,
3493 }
3494 },
3495 .write = spi_chip_write_256,
3496 .read = spi_chip_read,
3497 },
3498
3499 {
3500 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003501 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003502 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003503 .manufacture_id = SPANSION_ID,
3504 .model_id = SPANSION_S25FL016A,
3505 .total_size = 2048,
3506 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003507 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003508 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003509 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003510 .block_erasers =
3511 {
3512 {
3513 .eraseblocks = { {64 * 1024, 32} },
3514 .block_erase = spi_block_erase_d8,
3515 }, {
3516 .eraseblocks = { {2 * 1024 * 1024, 1} },
3517 .block_erase = spi_block_erase_c7,
3518 }
3519 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003520 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003521 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003522 },
3523
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003524 {
3525 .vendor = "SST",
3526 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003527 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003528 .manufacture_id = SST_ID,
3529 .model_id = SST_25VF016B,
3530 .total_size = 2048,
3531 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003532 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003533 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003534 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003535 .block_erasers =
3536 {
3537 {
3538 .eraseblocks = { {4 * 1024, 512} },
3539 .block_erase = spi_block_erase_20,
3540 }, {
3541 .eraseblocks = { {32 * 1024, 64} },
3542 .block_erase = spi_block_erase_52,
3543 }, {
3544 .eraseblocks = { {64 * 1024, 32} },
3545 .block_erase = spi_block_erase_d8,
3546 }, {
3547 .eraseblocks = { {2 * 1024 * 1024, 1} },
3548 .block_erase = spi_block_erase_60,
3549 }, {
3550 .eraseblocks = { {2 * 1024 * 1024, 1} },
3551 .block_erase = spi_block_erase_c7,
3552 },
3553 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003554 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003555 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003556 },
3557
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003558 {
3559 .vendor = "SST",
3560 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003561 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003562 .manufacture_id = SST_ID,
3563 .model_id = SST_25VF032B,
3564 .total_size = 4096,
3565 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003566 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003567 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003568 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003569 .block_erasers =
3570 {
3571 {
3572 .eraseblocks = { {4 * 1024, 1024} },
3573 .block_erase = spi_block_erase_20,
3574 }, {
3575 .eraseblocks = { {32 * 1024, 128} },
3576 .block_erase = spi_block_erase_52,
3577 }, {
3578 .eraseblocks = { {64 * 1024, 64} },
3579 .block_erase = spi_block_erase_d8,
3580 }, {
3581 .eraseblocks = { {4 * 1024 * 1024, 1} },
3582 .block_erase = spi_block_erase_60,
3583 }, {
3584 .eraseblocks = { {4 * 1024 * 1024, 1} },
3585 .block_erase = spi_block_erase_c7,
3586 },
3587 },
3588 .write = spi_chip_write_1,
3589 .read = spi_chip_read,
3590 },
3591
3592 {
3593 .vendor = "SST",
3594 .name = "SST25VF040.REMS",
3595 .bustype = CHIP_BUSTYPE_SPI,
3596 .manufacture_id = SST_ID,
3597 .model_id = SST_25VF040_REMS,
3598 .total_size = 512,
3599 .page_size = 256,
3600 .tested = TEST_OK_PR,
3601 .probe = probe_spi_rems,
3602 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003603 .block_erasers =
3604 {
3605 {
3606 .eraseblocks = { {4 * 1024, 128} },
3607 .block_erase = spi_block_erase_20,
3608 }, {
3609 .eraseblocks = { {32 * 1024, 16} },
3610 .block_erase = spi_block_erase_52,
3611 }, {
3612 .eraseblocks = { {512 * 1024, 1} },
3613 .block_erase = spi_block_erase_60,
3614 },
3615 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003616 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003617 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003618 },
3619
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003620 {
3621 .vendor = "SST",
3622 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003623 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003624 .manufacture_id = SST_ID,
3625 .model_id = SST_25VF040B,
3626 .total_size = 512,
3627 .page_size = 256,
3628 .tested = TEST_UNTESTED,
3629 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003630 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003631 .block_erasers =
3632 {
3633 {
3634 .eraseblocks = { {4 * 1024, 128} },
3635 .block_erase = spi_block_erase_20,
3636 }, {
3637 .eraseblocks = { {32 * 1024, 16} },
3638 .block_erase = spi_block_erase_52,
3639 }, {
3640 .eraseblocks = { {64 * 1024, 8} },
3641 .block_erase = spi_block_erase_d8,
3642 }, {
3643 .eraseblocks = { {512 * 1024, 1} },
3644 .block_erase = spi_block_erase_60,
3645 }, {
3646 .eraseblocks = { {512 * 1024, 1} },
3647 .block_erase = spi_block_erase_c7,
3648 },
3649 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003650 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003651 .read = spi_chip_read,
3652 },
3653
3654 {
3655 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003656 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003657 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003658 .manufacture_id = SST_ID,
3659 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003660 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003661 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003662 .tested = TEST_OK_PR,
3663 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003664 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003665 .block_erasers =
3666 {
3667 {
3668 .eraseblocks = { {4 * 1024, 128} },
3669 .block_erase = spi_block_erase_20,
3670 }, {
3671 .eraseblocks = { {32 * 1024, 16} },
3672 .block_erase = spi_block_erase_52,
3673 }, {
3674 .eraseblocks = { {64 * 1024, 8} },
3675 .block_erase = spi_block_erase_d8,
3676 }, {
3677 .eraseblocks = { {512 * 1024, 1} },
3678 .block_erase = spi_block_erase_60,
3679 }, {
3680 .eraseblocks = { {512 * 1024, 1} },
3681 .block_erase = spi_block_erase_c7,
3682 },
3683 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003684 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003685 .read = spi_chip_read,
3686 },
3687
3688 {
3689 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003690 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003691 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003692 .manufacture_id = SST_ID,
3693 .model_id = SST_25VF080B,
3694 .total_size = 1024,
3695 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003696 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003697 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003698 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003699 .block_erasers =
3700 {
3701 {
3702 .eraseblocks = { {4 * 1024, 256} },
3703 .block_erase = spi_block_erase_20,
3704 }, {
3705 .eraseblocks = { {32 * 1024, 32} },
3706 .block_erase = spi_block_erase_52,
3707 }, {
3708 .eraseblocks = { {64 * 1024, 16} },
3709 .block_erase = spi_block_erase_d8,
3710 }, {
3711 .eraseblocks = { {1024 * 1024, 1} },
3712 .block_erase = spi_block_erase_60,
3713 }, {
3714 .eraseblocks = { {1024 * 1024, 1} },
3715 .block_erase = spi_block_erase_c7,
3716 },
3717 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003718 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003719 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003720 },
3721
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003722 {
3723 .vendor = "SST",
3724 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003725 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003726 .manufacture_id = SST_ID,
3727 .model_id = SST_28SF040,
3728 .total_size = 512,
3729 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003730 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003731 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003732 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003733 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003734 .block_erasers =
3735 {
3736 {
3737 .eraseblocks = { {128, 4096} },
3738 .block_erase = erase_sector_28sf040,
3739 }, {
3740 .eraseblocks = { {512 * 1024, 1} },
3741 .block_erase = erase_chip_28sf040,
3742 }
3743 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003744 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003745 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003746 },
3747
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003748 {
3749 .vendor = "SST",
3750 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003751 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003752 .manufacture_id = SST_ID,
3753 .model_id = SST_29EE010,
3754 .total_size = 128,
3755 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003756 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003757 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003758 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003759 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003760 .block_erasers =
3761 {
3762 {
3763 .eraseblocks = { {128 * 1024, 1} },
3764 .block_erase = erase_chip_block_jedec,
3765 }
3766 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003767 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003768 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003769 },
3770
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003771 {
3772 .vendor = "SST",
3773 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003774 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003775 .manufacture_id = SST_ID,
3776 .model_id = SST_29LE010,
3777 .total_size = 128,
3778 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003779 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003780 .tested = TEST_UNTESTED,
3781 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003782 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003783 .block_erasers =
3784 {
3785 {
3786 .eraseblocks = { {128 * 1024, 1} },
3787 .block_erase = erase_chip_block_jedec,
3788 }
3789 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003790 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003791 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003792 },
3793
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003794 {
3795 .vendor = "SST",
3796 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003797 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003798 .manufacture_id = SST_ID,
3799 .model_id = SST_29EE020A,
3800 .total_size = 256,
3801 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003802 .feature_bits = FEATURE_LONG_RESET,
3803 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003804 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003805 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003806 .block_erasers =
3807 {
3808 {
3809 .eraseblocks = { {256 * 1024, 1} },
3810 .block_erase = erase_chip_block_jedec,
3811 }
3812 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003813 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003814 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003815 },
3816
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003817 {
3818 .vendor = "SST",
3819 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003820 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003821 .manufacture_id = SST_ID,
3822 .model_id = SST_29LE020,
3823 .total_size = 256,
3824 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003825 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003826 .tested = TEST_UNTESTED,
3827 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003828 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003829 .block_erasers =
3830 {
3831 {
3832 .eraseblocks = { {256 * 1024, 1} },
3833 .block_erase = erase_chip_block_jedec,
3834 }
3835 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003836 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003837 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003838 },
3839
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003840 {
3841 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00003842 .name = "SST39SF512",
3843 .bustype = CHIP_BUSTYPE_PARALLEL,
3844 .manufacture_id = SST_ID,
3845 .model_id = SST_39SF512,
3846 .total_size = 64,
3847 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003848 .feature_bits = FEATURE_EITHER_RESET,
3849 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003850 .probe = probe_jedec,
3851 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00003852 .block_erasers =
3853 {
3854 {
3855 .eraseblocks = { {4 * 1024, 16} },
3856 .block_erase = erase_sector_jedec,
3857 }, {
3858 .eraseblocks = { {64 * 1024, 1} },
3859 .block_erase = erase_chip_block_jedec,
3860 }
3861 },
Sean Nelson35727f72010-01-28 23:55:12 +00003862 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003863 .read = read_memmapped,
3864 },
3865
3866 {
3867 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003868 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003869 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003870 .manufacture_id = SST_ID,
3871 .model_id = SST_39SF010,
3872 .total_size = 128,
3873 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003874 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003875 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003876 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003877 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003878 .block_erasers =
3879 {
3880 {
3881 .eraseblocks = { {4 * 1024, 32} },
3882 .block_erase = erase_sector_jedec,
3883 }, {
3884 .eraseblocks = { {128 * 1024, 1} },
3885 .block_erase = erase_chip_block_jedec,
3886 }
3887 },
Sean Nelson35727f72010-01-28 23:55:12 +00003888 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003889 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003890 },
3891
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003892 {
3893 .vendor = "SST",
3894 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003895 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003896 .manufacture_id = SST_ID,
3897 .model_id = SST_39SF020,
3898 .total_size = 256,
3899 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003900 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003901 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003902 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003903 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003904 .block_erasers =
3905 {
3906 {
3907 .eraseblocks = { {4 * 1024, 64} },
3908 .block_erase = erase_sector_jedec,
3909 }, {
3910 .eraseblocks = { {256 * 1024, 1} },
3911 .block_erase = erase_chip_block_jedec,
3912 }
3913 },
Sean Nelson35727f72010-01-28 23:55:12 +00003914 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003915 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003916 },
3917
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003918 {
3919 .vendor = "SST",
3920 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003921 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003922 .manufacture_id = SST_ID,
3923 .model_id = SST_39SF040,
3924 .total_size = 512,
3925 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003926 .feature_bits = FEATURE_EITHER_RESET,
3927 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003928 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003929 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003930 .block_erasers =
3931 {
3932 {
3933 .eraseblocks = { {4 * 1024, 128} },
3934 .block_erase = erase_sector_jedec,
3935 }, {
3936 .eraseblocks = { {512 * 1024, 1} },
3937 .block_erase = erase_chip_block_jedec,
3938 }
3939 },
Sean Nelson35727f72010-01-28 23:55:12 +00003940 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003941 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003942 },
3943
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003944 {
3945 .vendor = "SST",
3946 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00003947 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003948 .manufacture_id = SST_ID,
3949 .model_id = SST_39VF512,
3950 .total_size = 64,
3951 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003952 .feature_bits = FEATURE_EITHER_RESET,
3953 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003954 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003955 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00003956 .block_erasers =
3957 {
3958 {
3959 .eraseblocks = { {4 * 1024, 16} },
3960 .block_erase = erase_sector_jedec,
3961 }, {
3962 .eraseblocks = { {64 * 1024, 1} },
3963 .block_erase = erase_chip_block_jedec,
3964 }
3965 },
Sean Nelson35727f72010-01-28 23:55:12 +00003966 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003967 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003968 },
3969
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003970 {
3971 .vendor = "SST",
3972 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003973 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003974 .manufacture_id = SST_ID,
3975 .model_id = SST_39VF010,
3976 .total_size = 128,
3977 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003978 .feature_bits = FEATURE_EITHER_RESET,
3979 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003980 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003981 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003982 .block_erasers =
3983 {
3984 {
3985 .eraseblocks = { {4 * 1024, 32} },
3986 .block_erase = erase_sector_jedec,
3987 }, {
3988 .eraseblocks = { {128 * 1024, 1} },
3989 .block_erase = erase_chip_block_jedec,
3990 }
3991 },
Sean Nelson35727f72010-01-28 23:55:12 +00003992 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003993 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003994 },
3995
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003996 {
3997 .vendor = "SST",
3998 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003999 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004000 .manufacture_id = SST_ID,
4001 .model_id = SST_39VF020,
4002 .total_size = 256,
4003 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004004 .feature_bits = FEATURE_EITHER_RESET,
4005 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004006 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004007 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004008 .block_erasers =
4009 {
4010 {
4011 .eraseblocks = { {4 * 1024, 64} },
4012 .block_erase = erase_sector_jedec,
4013 }, {
4014 .eraseblocks = { {256 * 1024, 1} },
4015 .block_erase = erase_chip_block_jedec,
4016 }
4017 },
Sean Nelson35727f72010-01-28 23:55:12 +00004018 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004019 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004020 },
4021
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004022 {
4023 .vendor = "SST",
4024 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004025 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004026 .manufacture_id = SST_ID,
4027 .model_id = SST_39VF040,
4028 .total_size = 512,
4029 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004030 .feature_bits = FEATURE_EITHER_RESET,
4031 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004032 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004033 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004034 .block_erasers =
4035 {
4036 {
4037 .eraseblocks = { {4 * 1024, 128} },
4038 .block_erase = erase_sector_jedec,
4039 }, {
4040 .eraseblocks = { {512 * 1024, 1} },
4041 .block_erase = erase_chip_block_jedec,
4042 }
4043 },
Sean Nelson35727f72010-01-28 23:55:12 +00004044 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004045 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004046 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004047
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004048 {
4049 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004050 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004051 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004052 .manufacture_id = SST_ID,
4053 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004054 .total_size = 1024,
4055 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004056 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004057 .tested = TEST_UNTESTED,
4058 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004059 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004060 .block_erasers =
4061 {
4062 {
4063 .eraseblocks = { {4 * 1024, 256} },
4064 .block_erase = erase_sector_jedec,
4065 }, {
4066 .eraseblocks = { {64 * 1024, 16} },
4067 .block_erase = erase_block_jedec,
4068 }, {
4069 .eraseblocks = { {1024 * 1024, 1} },
4070 .block_erase = erase_chip_block_jedec,
4071 }
4072 },
Sean Nelson35727f72010-01-28 23:55:12 +00004073 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004074 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004075 },
4076
4077 {
4078 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004079 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004080 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004081 .manufacture_id = SST_ID,
4082 .model_id = SST_49LF002A,
4083 .total_size = 256,
4084 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004085 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004086 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004087 .probe = probe_jedec,
4088 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004089 .block_erasers =
4090 {
4091 {
4092 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004093 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004094 }, {
4095 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004096 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004097 }, {
4098 .eraseblocks = { {256 * 1024, 1} },
4099 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4100 }
4101 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004102 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004103 .printlock = printlock_sst_fwhub,
4104 .unlock = unlock_sst_fwhub,
4105 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004106 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004107 },
4108
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004109 {
4110 .vendor = "SST",
4111 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004112 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004113 .manufacture_id = SST_ID,
4114 .model_id = SST_49LF003A,
4115 .total_size = 384,
4116 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004117 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004118 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004119 .probe = probe_jedec,
4120 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004121 .block_erasers =
4122 {
4123 {
4124 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004125 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004126 }, {
4127 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004128 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004129 }, {
4130 .eraseblocks = { {384 * 1024, 1} },
4131 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4132 }
4133 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004134 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004135 .printlock = printlock_sst_fwhub,
4136 .unlock = unlock_sst_fwhub,
4137 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004138 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004139 },
4140
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004141 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004142 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4143 * and is only honored for 64k block erase, but not 4k sector erase.
4144 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004145 .vendor = "SST",
4146 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004147 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004148 .manufacture_id = SST_ID,
4149 .model_id = SST_49LF004A,
4150 .total_size = 512,
4151 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004152 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004153 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004154 .probe = probe_jedec,
4155 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004156 .block_erasers =
4157 {
4158 {
4159 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004160 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004161 }, {
4162 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004163 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004164 }, {
4165 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004166 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004167 },
4168 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004169 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004170 .printlock = printlock_sst_fwhub,
4171 .unlock = unlock_sst_fwhub,
4172 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004173 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004174 },
4175
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004176 {
4177 .vendor = "SST",
4178 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004179 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004180 .manufacture_id = SST_ID,
4181 .model_id = SST_49LF004C,
4182 .total_size = 512,
4183 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004184 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004185 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004186 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004187 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004188 .block_erasers =
4189 {
4190 {
4191 .eraseblocks = { {4 * 1024, 128} },
4192 .block_erase = erase_sector_49lfxxxc,
4193 }, {
4194 .eraseblocks = {
4195 {64 * 1024, 7},
4196 {32 * 1024, 1},
4197 {8 * 1024, 2},
4198 {16 * 1024, 1},
4199 },
4200 .block_erase = erase_block_49lfxxxc,
4201 }
4202 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004203 .write = write_49lfxxxc,
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 = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004210 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004211 .manufacture_id = SST_ID,
4212 .model_id = SST_49LF008A,
4213 .total_size = 1024,
4214 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004215 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004216 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004217 .probe = probe_jedec,
4218 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004219 .block_erasers =
4220 {
4221 {
4222 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004223 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004224 }, {
4225 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004226 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004227 }, {
4228 .eraseblocks = { {1024 * 1024, 1} },
4229 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4230 }
4231 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004232 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004233 .printlock = printlock_sst_fwhub,
4234 .unlock = unlock_sst_fwhub,
4235 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004236 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004237 },
4238
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004239 {
4240 .vendor = "SST",
4241 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004242 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004243 .manufacture_id = SST_ID,
4244 .model_id = SST_49LF008C,
4245 .total_size = 1024,
4246 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004247 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004248 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004249 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004250 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004251 .block_erasers =
4252 {
4253 {
4254 .eraseblocks = { {4 * 1024, 256} },
4255 .block_erase = erase_sector_49lfxxxc,
4256 }, {
4257 .eraseblocks = {
4258 {64 * 1024, 15},
4259 {32 * 1024, 1},
4260 {8 * 1024, 2},
4261 {16 * 1024, 1},
4262 },
4263 .block_erase = erase_block_49lfxxxc,
4264 }
4265 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004266 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004267 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004268 },
4269
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004270 {
4271 .vendor = "SST",
4272 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004273 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004274 .manufacture_id = SST_ID,
4275 .model_id = SST_49LF016C,
4276 .total_size = 2048,
4277 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004278 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004279 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004280 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004281 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004282 .block_erasers =
4283 {
4284 {
4285 .eraseblocks = { {4 * 1024, 512} },
4286 .block_erase = erase_sector_49lfxxxc,
4287 }, {
4288 .eraseblocks = {
4289 {64 * 1024, 31},
4290 {32 * 1024, 1},
4291 {8 * 1024, 2},
4292 {16 * 1024, 1},
4293 },
4294 .block_erase = erase_block_49lfxxxc,
4295 }
4296 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004297 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004298 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004299 },
4300
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004301 {
4302 .vendor = "SST",
4303 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004304 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004305 .manufacture_id = SST_ID,
4306 .model_id = SST_49LF020,
4307 .total_size = 256,
4308 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004309 .feature_bits = FEATURE_EITHER_RESET,
4310 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004311 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004312 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004313 .block_erasers =
4314 {
4315 {
4316 .eraseblocks = { {4 * 1024, 64} },
4317 .block_erase = erase_sector_jedec,
4318 }, {
4319 .eraseblocks = { {16 * 1024, 16} },
4320 .block_erase = erase_block_jedec,
4321 }, {
4322 .eraseblocks = { {256 * 1024, 1} },
4323 .block_erase = NULL,
4324 }
4325 },
Sean Nelson35727f72010-01-28 23:55:12 +00004326 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004327 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004328 },
4329
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004330 {
4331 .vendor = "SST",
4332 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004333 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004334 .manufacture_id = SST_ID,
4335 .model_id = SST_49LF020A,
4336 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004337 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004338 .feature_bits = FEATURE_EITHER_RESET,
4339 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004340 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004341 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004342 .block_erasers =
4343 {
4344 {
4345 .eraseblocks = { {4 * 1024, 64} },
4346 .block_erase = erase_sector_jedec,
4347 }, {
4348 .eraseblocks = { {16 * 1024, 16} },
4349 .block_erase = erase_block_jedec,
4350 }, {
4351 .eraseblocks = { {256 * 1024, 1} },
4352 .block_erase = NULL,
4353 }
4354 },
Sean Nelson35727f72010-01-28 23:55:12 +00004355 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004356 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004357 },
4358
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004359 {
4360 .vendor = "SST",
4361 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004362 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004363 .manufacture_id = SST_ID,
4364 .model_id = SST_49LF040,
4365 .total_size = 512,
4366 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004367 .feature_bits = FEATURE_EITHER_RESET,
4368 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004369 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004370 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004371 .block_erasers =
4372 {
4373 {
4374 .eraseblocks = { {4 * 1024, 128} },
4375 .block_erase = erase_sector_jedec,
4376 }, {
4377 .eraseblocks = { {64 * 1024, 8} },
4378 .block_erase = erase_block_jedec,
4379 }, {
4380 .eraseblocks = { {512 * 1024, 1} },
4381 .block_erase = NULL,
4382 }
4383 },
Sean Nelson35727f72010-01-28 23:55:12 +00004384 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004385 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004386 },
4387
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004388 {
4389 .vendor = "SST",
4390 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004391 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004392 .manufacture_id = SST_ID,
4393 .model_id = SST_49LF040B,
4394 .total_size = 512,
4395 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004396 .feature_bits = FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004397 .tested = TEST_UNTESTED,
4398 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004399 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004400 .block_erasers =
4401 {
4402 {
4403 .eraseblocks = { {4 * 1024, 128} },
4404 .block_erase = erase_sector_jedec,
4405 }, {
4406 .eraseblocks = { {64 * 1024, 8} },
4407 .block_erase = erase_block_jedec,
4408 }, {
4409 .eraseblocks = { {512 * 1024, 1} },
4410 .block_erase = NULL,
4411 }
4412 },
Sean Nelson35727f72010-01-28 23:55:12 +00004413 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004414 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004415 },
4416
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004417 {
4418 .vendor = "SST",
4419 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004420 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004421 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004422 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004423 .total_size = 1024,
4424 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004425 .feature_bits = FEATURE_EITHER_RESET,
4426 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004427 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004428 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004429 .block_erasers =
4430 {
4431 {
4432 .eraseblocks = { {4 * 1024, 256} },
4433 .block_erase = erase_sector_jedec,
4434 }, {
4435 .eraseblocks = { {64 * 1024, 16} },
4436 .block_erase = erase_block_jedec,
4437 }, {
4438 .eraseblocks = { {1024 * 1024, 1} },
4439 .block_erase = NULL,
4440 }
4441 },
Sean Nelson35727f72010-01-28 23:55:12 +00004442 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004443 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004444 },
4445
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004446 {
4447 .vendor = "SST",
4448 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004449 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004450 .manufacture_id = SST_ID,
4451 .model_id = SST_49LF160C,
4452 .total_size = 2048,
4453 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004454 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004455 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004456 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004457 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004458 .block_erasers =
4459 {
4460 {
4461 .eraseblocks = { {4 * 1024, 512} },
4462 .block_erase = erase_sector_49lfxxxc,
4463 }, {
4464 .eraseblocks = {
4465 {64 * 1024, 31},
4466 {32 * 1024, 1},
4467 {8 * 1024, 2},
4468 {16 * 1024, 1},
4469 },
4470 .block_erase = erase_block_49lfxxxc,
4471 }
4472 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004473 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004474 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004475 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004476 },
4477
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004478 {
4479 .vendor = "ST",
4480 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004481 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004482 .manufacture_id = ST_ID,
4483 .model_id = ST_M25P05A,
4484 .total_size = 64,
4485 .page_size = 256,
4486 .tested = TEST_UNTESTED,
4487 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004488 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004489 .block_erasers =
4490 {
4491 {
4492 .eraseblocks = { {32 * 1024, 2} },
4493 .block_erase = spi_block_erase_d8,
4494 }, {
4495 .eraseblocks = { {64 * 1024, 1} },
4496 .block_erase = spi_block_erase_c7,
4497 }
4498 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004499 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004500 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004501 },
4502
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004503 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4504 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
4505 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
4506 * only is successful if RDID does not work.
4507 */
4508 {
4509 .vendor = "ST",
4510 .name = "M25P05.RES",
4511 .bustype = CHIP_BUSTYPE_SPI,
4512 .manufacture_id = ST_ID,
4513 .model_id = ST_M25P05_RES,
4514 .total_size = 64,
4515 .page_size = 256,
4516 .tested = TEST_UNTESTED,
4517 .probe = probe_spi_res,
4518 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004519 .block_erasers =
4520 {
4521 {
4522 .eraseblocks = { {32 * 1024, 2} },
4523 .block_erase = spi_block_erase_d8,
4524 }, {
4525 .eraseblocks = { {64 * 1024, 1} },
4526 .block_erase = spi_block_erase_c7,
4527 }
4528 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004529 .write = spi_chip_write_1, /* 128 */
4530 .read = spi_chip_read,
4531 },
4532
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004533 {
4534 .vendor = "ST",
4535 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004536 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004537 .manufacture_id = ST_ID,
4538 .model_id = ST_M25P10A,
4539 .total_size = 128,
4540 .page_size = 256,
4541 .tested = TEST_UNTESTED,
4542 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004543 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004544 .block_erasers =
4545 {
4546 {
4547 .eraseblocks = { {32 * 1024, 4} },
4548 .block_erase = spi_block_erase_d8,
4549 }, {
4550 .eraseblocks = { {128 * 1024, 1} },
4551 .block_erase = spi_block_erase_c7,
4552 }
4553 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004554 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004555 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004556 },
4557
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004558 /* The ST M25P10 has the same problem as the M25P05. */
4559 {
4560 .vendor = "ST",
4561 .name = "M25P10.RES",
4562 .bustype = CHIP_BUSTYPE_SPI,
4563 .manufacture_id = ST_ID,
4564 .model_id = ST_M25P10_RES,
4565 .total_size = 128,
4566 .page_size = 256,
4567 .tested = TEST_UNTESTED,
4568 .probe = probe_spi_res,
4569 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004570 .block_erasers =
4571 {
4572 {
4573 .eraseblocks = { {32 * 1024, 4} },
4574 .block_erase = spi_block_erase_d8,
4575 }, {
4576 .eraseblocks = { {128 * 1024, 1} },
4577 .block_erase = spi_block_erase_c7,
4578 }
4579 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004580 .write = spi_chip_write_1, /* 128 */
4581 .read = spi_chip_read,
4582 },
4583
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004584 {
4585 .vendor = "ST",
4586 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004587 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004588 .manufacture_id = ST_ID,
4589 .model_id = ST_M25P20,
4590 .total_size = 256,
4591 .page_size = 256,
4592 .tested = TEST_UNTESTED,
4593 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004594 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004595 .block_erasers =
4596 {
4597 {
4598 .eraseblocks = { {64 * 1024, 4} },
4599 .block_erase = spi_block_erase_d8,
4600 }, {
4601 .eraseblocks = { {256 * 1024, 1} },
4602 .block_erase = spi_block_erase_c7,
4603 }
4604 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004605 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004606 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004607 },
4608
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004609 {
4610 .vendor = "ST",
4611 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004612 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004613 .manufacture_id = ST_ID,
4614 .model_id = ST_M25P40,
4615 .total_size = 512,
4616 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004617 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004618 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004619 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004620 .block_erasers =
4621 {
4622 {
4623 .eraseblocks = { {64 * 1024, 8} },
4624 .block_erase = spi_block_erase_d8,
4625 }, {
4626 .eraseblocks = { {512 * 1024, 1} },
4627 .block_erase = spi_block_erase_c7,
4628 }
4629 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004630 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004631 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004632 },
4633
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004634 {
4635 .vendor = "ST",
4636 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004637 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004638 .manufacture_id = ST_ID,
4639 .model_id = ST_M25P40_RES,
4640 .total_size = 512,
4641 .page_size = 256,
4642 .tested = TEST_UNTESTED,
4643 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004644 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004645 .block_erasers =
4646 {
4647 {
4648 .eraseblocks = { {64 * 1024, 8} },
4649 .block_erase = spi_block_erase_d8,
4650 }, {
4651 .eraseblocks = { {512 * 1024, 1} },
4652 .block_erase = spi_block_erase_c7,
4653 }
4654 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004655 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004656 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004657 },
4658
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004659 {
4660 .vendor = "ST",
4661 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004662 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004663 .manufacture_id = ST_ID,
4664 .model_id = ST_M25P80,
4665 .total_size = 1024,
4666 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004667 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004668 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004669 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004670 .block_erasers =
4671 {
4672 {
4673 .eraseblocks = { {64 * 1024, 16} },
4674 .block_erase = spi_block_erase_d8,
4675 }, {
4676 .eraseblocks = { {1024 * 1024, 1} },
4677 .block_erase = spi_block_erase_c7,
4678 }
4679 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004680 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004681 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004682 },
4683
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004684 {
4685 .vendor = "ST",
4686 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004687 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004688 .manufacture_id = ST_ID,
4689 .model_id = ST_M25P16,
4690 .total_size = 2048,
4691 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004692 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004693 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004694 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004695 .block_erasers =
4696 {
4697 {
4698 .eraseblocks = { {64 * 1024, 32} },
4699 .block_erase = spi_block_erase_d8,
4700 }, {
4701 .eraseblocks = { {2 * 1024 * 1024, 1} },
4702 .block_erase = spi_block_erase_c7,
4703 }
4704 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004705 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004706 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004707 },
4708
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004709 {
4710 .vendor = "ST",
4711 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004712 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004713 .manufacture_id = ST_ID,
4714 .model_id = ST_M25P32,
4715 .total_size = 4096,
4716 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004717 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004718 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004719 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004720 .block_erasers =
4721 {
4722 {
4723 .eraseblocks = { {64 * 1024, 64} },
4724 .block_erase = spi_block_erase_d8,
4725 }, {
4726 .eraseblocks = { {4 * 1024 * 1024, 1} },
4727 .block_erase = spi_block_erase_c7,
4728 }
4729 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004730 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004731 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004732 },
4733
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004734 {
4735 .vendor = "ST",
4736 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004737 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004738 .manufacture_id = ST_ID,
4739 .model_id = ST_M25P64,
4740 .total_size = 8192,
4741 .page_size = 256,
4742 .tested = TEST_UNTESTED,
4743 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004744 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004745 .block_erasers =
4746 {
4747 {
4748 .eraseblocks = { {64 * 1024, 128} },
4749 .block_erase = spi_block_erase_d8,
4750 }, {
4751 .eraseblocks = { {8 * 1024 * 1024, 1} },
4752 .block_erase = spi_block_erase_c7,
4753 }
4754 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004755 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004756 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004757 },
4758
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004759 {
4760 .vendor = "ST",
4761 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004762 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004763 .manufacture_id = ST_ID,
4764 .model_id = ST_M25P128,
4765 .total_size = 16384,
4766 .page_size = 256,
4767 .tested = TEST_UNTESTED,
4768 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004769 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004770 .block_erasers =
4771 {
4772 {
4773 .eraseblocks = { {256 * 1024, 64} },
4774 .block_erase = spi_block_erase_d8,
4775 }, {
4776 .eraseblocks = { {16 * 1024 * 1024, 1} },
4777 .block_erase = spi_block_erase_c7,
4778 }
4779 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004780 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004781 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004782 },
4783
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004784 {
4785 .vendor = "ST",
4786 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004787 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004788 .manufacture_id = ST_ID,
4789 .model_id = ST_M29F002B,
4790 .total_size = 256,
4791 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004792 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004793 .tested = TEST_UNTESTED,
4794 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004795 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004796 .block_erasers =
4797 {
4798 {
4799 .eraseblocks = {
4800 {16 * 1024, 1},
4801 {8 * 1024, 2},
4802 {32 * 1024, 1},
4803 {64 * 1024, 3},
4804 },
4805 .block_erase = erase_sector_jedec,
4806 }, {
4807 .eraseblocks = { {256 * 1024, 1} },
4808 .block_erase = erase_chip_block_jedec,
4809 }
4810 },
Sean Nelson35727f72010-01-28 23:55:12 +00004811 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004812 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004813 },
4814
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004815 {
4816 .vendor = "ST",
4817 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004818 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004819 .manufacture_id = ST_ID,
4820 .model_id = ST_M29F002T,
4821 .total_size = 256,
4822 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004823 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
4824 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004825 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004826 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004827 .block_erasers =
4828 {
4829 {
4830 .eraseblocks = {
4831 {64 * 1024, 3},
4832 {32 * 1024, 1},
4833 {8 * 1024, 2},
4834 {16 * 1024, 1},
4835 },
4836 .block_erase = erase_sector_jedec,
4837 }, {
4838 .eraseblocks = { {256 * 1024, 1} },
4839 .block_erase = erase_chip_block_jedec,
4840 }
4841 },
Sean Nelson35727f72010-01-28 23:55:12 +00004842 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004843 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004844 },
4845
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004846 {
4847 .vendor = "ST",
4848 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004849 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004850 .manufacture_id = ST_ID,
4851 .model_id = ST_M29F040B,
4852 .total_size = 512,
4853 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004854 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4855 .tested = TEST_UNTESTED,
4856 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004857 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004858 .block_erasers =
4859 {
4860 {
4861 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004862 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004863 }, {
4864 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004865 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004866 }
4867 },
Sean Nelson35727f72010-01-28 23:55:12 +00004868 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004869 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004870 },
4871
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004872 {
Sean Nelson35727f72010-01-28 23:55:12 +00004873 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004874 .vendor = "ST",
4875 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004876 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004877 .manufacture_id = ST_ID,
4878 .model_id = ST_M29F400BT,
4879 .total_size = 512,
4880 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004881 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004882 .tested = TEST_UNTESTED,
4883 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004884 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004885 .block_erasers =
4886 {
4887 {
4888 .eraseblocks = {
4889 {64 * 1024, 7},
4890 {32 * 1024, 1},
4891 {8 * 1024, 2},
4892 {16 * 1024, 1},
4893 },
4894 .block_erase = block_erase_m29f400bt,
4895 }, {
4896 .eraseblocks = { {512 * 1024, 1} },
4897 .block_erase = block_erase_chip_m29f400bt,
4898 }
4899 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004900 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004901 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004902 },
4903
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004904 {
4905 .vendor = "ST",
4906 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004907 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004908 .manufacture_id = ST_ID,
4909 .model_id = ST_M29W010B,
4910 .total_size = 128,
4911 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004912 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004913 .tested = TEST_UNTESTED,
4914 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004915 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004916 .block_erasers =
4917 {
4918 {
4919 .eraseblocks = { {16 * 1024, 8}, },
4920 .block_erase = erase_sector_jedec,
4921 }, {
4922 .eraseblocks = { {128 * 1024, 1} },
4923 .block_erase = erase_chip_block_jedec,
4924 }
4925 },
Sean Nelson35727f72010-01-28 23:55:12 +00004926 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004927 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004928 },
4929
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004930 {
4931 .vendor = "ST",
4932 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004933 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004934 .manufacture_id = ST_ID,
4935 .model_id = ST_M29W040B,
4936 .total_size = 512,
4937 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004938 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004939 .tested = TEST_UNTESTED,
4940 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004941 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004942 .block_erasers =
4943 {
4944 {
4945 .eraseblocks = { {64 * 1024, 8}, },
4946 .block_erase = erase_sector_jedec,
4947 }, {
4948 .eraseblocks = { {512 * 1024, 1} },
4949 .block_erase = erase_chip_block_jedec,
4950 }
4951 },
Sean Nelson35727f72010-01-28 23:55:12 +00004952 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004953 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004954 },
4955
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004956 {
4957 .vendor = "ST",
4958 .name = "M29W512B",
4959 .bustype = CHIP_BUSTYPE_PARALLEL,
4960 .manufacture_id = ST_ID,
4961 .model_id = ST_M29W512B,
4962 .total_size = 64,
4963 .page_size = 64 * 1024,
4964 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4965 .tested = TEST_OK_PREW,
4966 .probe = probe_jedec,
4967 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004968 .block_erasers =
4969 {
4970 {
4971 .eraseblocks = { {64 * 1024, 1} },
4972 .block_erase = erase_chip_block_jedec,
4973 }
4974 },
4975 .write = write_jedec_1,
4976 .read = read_memmapped,
4977 },
4978
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004979 {
4980 .vendor = "ST",
4981 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00004982 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004983 .manufacture_id = ST_ID,
4984 .model_id = ST_M50FLW040A,
4985 .total_size = 512,
4986 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004987 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004988 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004989 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004990 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004991 .block_erasers =
4992 {
4993 {
Sean Nelson329bde72010-01-19 16:39:19 +00004994 .eraseblocks = {
4995 {4 * 1024, 16}, /* sector */
4996 {64 * 1024, 5}, /* block */
4997 {4 * 1024, 16}, /* sector */
4998 {4 * 1024, 16}, /* sector */
4999 },
5000 .block_erase = NULL,
5001 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005002 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005003 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005004 }, {
5005 .eraseblocks = { {512 * 1024, 1} },
5006 .block_erase = erase_chip_stm50flw0x0x,
5007 }
5008 },
Sean Nelson28accc22010-03-19 18:47:06 +00005009 .unlock = unlock_stm50flw0x0x,
5010 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005011 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005012 },
5013
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005014 {
5015 .vendor = "ST",
5016 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005017 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005018 .manufacture_id = ST_ID,
5019 .model_id = ST_M50FLW040B,
5020 .total_size = 512,
5021 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005022 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005023 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005024 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005025 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005026 .block_erasers =
5027 {
5028 {
Sean Nelson329bde72010-01-19 16:39:19 +00005029 .eraseblocks = {
5030 {4 * 1024, 16}, /* sector */
5031 {4 * 1024, 16}, /* sector */
5032 {64 * 1024, 5}, /* block */
5033 {4 * 1024, 16}, /* sector */
5034 },
5035 .block_erase = NULL,
5036 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005037 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005038 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005039 }, {
5040 .eraseblocks = { {512 * 1024, 1} },
5041 .block_erase = erase_chip_stm50flw0x0x,
5042 }
5043 },
Sean Nelson28accc22010-03-19 18:47:06 +00005044 .unlock = unlock_stm50flw0x0x,
5045 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005046 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005047 },
5048
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005049 {
5050 .vendor = "ST",
5051 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005052 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005053 .manufacture_id = ST_ID,
5054 .model_id = ST_M50FLW080A,
5055 .total_size = 1024,
5056 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005057 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00005058 .tested = TEST_UNTESTED,
5059 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005060 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005061 .block_erasers =
5062 {
5063 {
Sean Nelson329bde72010-01-19 16:39:19 +00005064 .eraseblocks = {
5065 {4 * 1024, 16}, /* sector */
5066 {64 * 1024, 13}, /* block */
5067 {4 * 1024, 16}, /* sector */
5068 {4 * 1024, 16}, /* sector */
5069 },
5070 .block_erase = NULL,
5071 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005072 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005073 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005074 }, {
5075 .eraseblocks = { {1024 * 1024, 1} },
5076 .block_erase = erase_chip_stm50flw0x0x,
5077 }
5078 },
Sean Nelson28accc22010-03-19 18:47:06 +00005079 .unlock = unlock_stm50flw0x0x,
5080 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005081 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005082 },
5083
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005084 {
5085 .vendor = "ST",
5086 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005087 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005088 .manufacture_id = ST_ID,
5089 .model_id = ST_M50FLW080B,
5090 .total_size = 1024,
5091 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005092 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005093 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005094 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005095 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005096 .block_erasers =
5097 {
5098 {
Sean Nelson329bde72010-01-19 16:39:19 +00005099 .eraseblocks = {
5100 {4 * 1024, 16}, /* sector */
5101 {4 * 1024, 16}, /* sector */
5102 {64 * 1024, 13}, /* block */
5103 {4 * 1024, 16}, /* sector */
5104 },
5105 .block_erase = NULL,
5106 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005107 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005108 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005109 }, {
5110 .eraseblocks = { {1024 * 1024, 1} },
5111 .block_erase = erase_chip_stm50flw0x0x,
5112 }
5113 },
Sean Nelson28accc22010-03-19 18:47:06 +00005114 .unlock = unlock_stm50flw0x0x,
5115 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005116 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005117 },
5118
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005119 {
5120 .vendor = "ST",
5121 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005122 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005123 .manufacture_id = ST_ID,
5124 .model_id = ST_M50FW002,
5125 .total_size = 256,
5126 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005127 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005128 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005129 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005130 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005131 .block_erasers =
5132 {
5133 {
5134 .eraseblocks = {
5135 {64 * 1024, 3},
5136 {32 * 1024, 1},
5137 {8 * 1024, 2},
5138 {16 * 1024, 1},
5139 },
Sean Nelson28accc22010-03-19 18:47:06 +00005140 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005141 }, {
5142 .eraseblocks = { {256 * 1024, 1} },
5143 .block_erase = erase_chip_stm50flw0x0x,
5144 }
5145 },
Sean Nelson28accc22010-03-19 18:47:06 +00005146 .unlock = unlock_stm50flw0x0x,
5147 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005148 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005149 },
5150
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005151 {
5152 .vendor = "ST",
5153 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005154 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005155 .manufacture_id = ST_ID,
5156 .model_id = ST_M50FW016,
5157 .total_size = 2048,
5158 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005159 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005160 .tested = TEST_UNTESTED,
5161 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005162 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005163 .block_erasers =
5164 {
5165 {
5166 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005167 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005168 }, {
5169 .eraseblocks = { {2 * 1024 * 1024, 1} },
5170 .block_erase = erase_chip_stm50flw0x0x,
5171 }
5172 },
Sean Nelson28accc22010-03-19 18:47:06 +00005173 .unlock = unlock_stm50flw0x0x,
5174 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005175 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005176 },
5177
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005178 {
5179 .vendor = "ST",
5180 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005181 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005182 .manufacture_id = ST_ID,
5183 .model_id = ST_M50FW040,
5184 .total_size = 512,
5185 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005186 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005187 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005188 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005189 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005190 .block_erasers =
5191 {
5192 {
5193 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005194 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005195 }, {
5196 .eraseblocks = { {512 * 1024, 1} },
5197 .block_erase = erase_chip_stm50flw0x0x,
5198 }
5199 },
Sean Nelson28accc22010-03-19 18:47:06 +00005200 .unlock = unlock_stm50flw0x0x,
5201 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005202 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005203 },
5204
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005205 {
5206 .vendor = "ST",
5207 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005208 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005209 .manufacture_id = ST_ID,
5210 .model_id = ST_M50FW080,
5211 .total_size = 1024,
5212 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005213 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005214 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005215 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005216 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005217 .block_erasers =
5218 {
5219 {
5220 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005221 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005222 }, {
5223 .eraseblocks = { {1024 * 1024, 1} },
5224 .block_erase = erase_chip_stm50flw0x0x,
5225 }
5226 },
Sean Nelson28accc22010-03-19 18:47:06 +00005227 .unlock = unlock_stm50flw0x0x,
5228 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005229 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005230 },
5231
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005232 {
5233 .vendor = "ST",
5234 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005235 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005236 .manufacture_id = ST_ID,
5237 .model_id = ST_M50LPW116,
5238 .total_size = 2048,
5239 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005240 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005241 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005242 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005243 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005244 .block_erasers =
5245 {
5246 {
5247 .eraseblocks = {
5248 {4 * 1024, 16},
5249 {64 * 1024, 30},
5250 {32 * 1024, 1},
5251 {8 * 1024, 2},
5252 {16 * 1024, 1},
5253 },
Sean Nelson28accc22010-03-19 18:47:06 +00005254 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005255 }, {
5256 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005257 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005258 }
5259 },
Sean Nelson28accc22010-03-19 18:47:06 +00005260 .unlock = unlock_stm50flw0x0x,
5261 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005262 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005263 },
5264
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005265 {
5266 .vendor = "SyncMOS",
5267 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005268 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005269 .manufacture_id = SYNCMOS_ID,
5270 .model_id = S29C31004T,
5271 .total_size = 512,
5272 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005273 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005274 .tested = TEST_UNTESTED,
5275 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005276 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005277 .block_erasers =
5278 {
5279 {
5280 .eraseblocks = { {1 * 1024, 512} },
5281 .block_erase = erase_sector_jedec,
5282 }, {
5283 .eraseblocks = { {512 * 1024, 1} },
5284 .block_erase = erase_chip_block_jedec,
5285 },
5286 },
Sean Nelson35727f72010-01-28 23:55:12 +00005287 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005288 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005289 },
5290
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005291 {
5292 .vendor = "SyncMOS",
5293 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005294 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005295 .manufacture_id = SYNCMOS_ID,
5296 .model_id = S29C51001T,
5297 .total_size = 128,
5298 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005299 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005300 .tested = TEST_UNTESTED,
5301 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005302 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005303 .block_erasers =
5304 {
5305 {
5306 .eraseblocks = { {512, 256} },
5307 .block_erase = erase_sector_jedec,
5308 }, {
5309 .eraseblocks = { {128 * 1024, 1} },
5310 .block_erase = erase_chip_block_jedec,
5311 },
5312 },
Sean Nelson35727f72010-01-28 23:55:12 +00005313 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005314 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005315 },
5316
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005317 {
5318 .vendor = "SyncMOS",
5319 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005320 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005321 .manufacture_id = SYNCMOS_ID,
5322 .model_id = S29C51002T,
5323 .total_size = 256,
5324 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005325 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005326 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005327 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005328 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005329 .block_erasers =
5330 {
5331 {
5332 .eraseblocks = { {512, 512} },
5333 .block_erase = erase_sector_jedec,
5334 }, {
5335 .eraseblocks = { {256 * 1024, 1} },
5336 .block_erase = erase_chip_block_jedec,
5337 },
5338 },
Sean Nelson35727f72010-01-28 23:55:12 +00005339 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005340 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005341 },
5342
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005343 {
5344 .vendor = "SyncMOS",
5345 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005346 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005347 .manufacture_id = SYNCMOS_ID,
5348 .model_id = S29C51004T,
5349 .total_size = 512,
5350 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005351 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005352 .tested = TEST_UNTESTED,
5353 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005354 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005355 .block_erasers =
5356 {
5357 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005358 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005359 .block_erase = erase_sector_jedec,
5360 }, {
5361 .eraseblocks = { {512 * 1024, 1} },
5362 .block_erase = erase_chip_block_jedec,
5363 },
5364 },
Sean Nelson35727f72010-01-28 23:55:12 +00005365 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005366 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005367 },
5368
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005369 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005370 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005371 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005372 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005373 .manufacture_id = TI_OLD_ID,
5374 .model_id = TI_TMS29F002RB,
5375 .total_size = 256,
5376 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005377 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005378 .tested = TEST_UNTESTED,
5379 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005380 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005381 .block_erasers =
5382 {
5383 {
5384 .eraseblocks = {
5385 {16 * 1024, 1},
5386 {8 * 1024, 2},
5387 {32 * 1024, 1},
5388 {64 * 1024, 3},
5389 },
5390 .block_erase = erase_sector_jedec,
5391 }, {
5392 .eraseblocks = { {256 * 1024, 1} },
5393 .block_erase = erase_chip_block_jedec,
5394 },
5395 },
Sean Nelson35727f72010-01-28 23:55:12 +00005396 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005397 .read = read_memmapped,
5398 },
5399
5400 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005401 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005402 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005403 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005404 .manufacture_id = TI_OLD_ID,
5405 .model_id = TI_TMS29F002RT,
5406 .total_size = 256,
5407 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005408 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005409 .tested = TEST_UNTESTED,
5410 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005411 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005412 .block_erasers =
5413 {
5414 {
5415 .eraseblocks = {
5416 {64 * 1024, 3},
5417 {32 * 1024, 1},
5418 {8 * 1024, 2},
5419 {16 * 1024, 1},
5420 },
5421 .block_erase = erase_sector_jedec,
5422 }, {
5423 .eraseblocks = { {256 * 1024, 1} },
5424 .block_erase = erase_chip_block_jedec,
5425 },
5426 },
Sean Nelson35727f72010-01-28 23:55:12 +00005427 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005428 .read = read_memmapped,
5429 },
5430
5431 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005432 .vendor = "Winbond",
5433 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005434 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005435 .manufacture_id = WINBOND_NEX_ID,
5436 .model_id = W_25X10,
5437 .total_size = 128,
5438 .page_size = 256,
5439 .tested = TEST_UNTESTED,
5440 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005441 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005442 .block_erasers =
5443 {
5444 {
5445 .eraseblocks = { {4 * 1024, 32} },
5446 .block_erase = spi_block_erase_20,
5447 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005448 .eraseblocks = { {64 * 1024, 2} },
5449 .block_erase = spi_block_erase_d8,
5450 }, {
5451 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005452 .block_erase = spi_block_erase_c7,
5453 }
5454 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005455 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005456 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005457 },
5458
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005459 {
5460 .vendor = "Winbond",
5461 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005462 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005463 .manufacture_id = WINBOND_NEX_ID,
5464 .model_id = W_25X20,
5465 .total_size = 256,
5466 .page_size = 256,
5467 .tested = TEST_UNTESTED,
5468 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005469 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005470 .block_erasers =
5471 {
5472 {
5473 .eraseblocks = { {4 * 1024, 64} },
5474 .block_erase = spi_block_erase_20,
5475 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005476 .eraseblocks = { {64 * 1024, 4} },
5477 .block_erase = spi_block_erase_d8,
5478 }, {
5479 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005480 .block_erase = spi_block_erase_c7,
5481 }
5482 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005483 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005484 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005485 },
5486
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005487 {
5488 .vendor = "Winbond",
5489 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005490 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005491 .manufacture_id = WINBOND_NEX_ID,
5492 .model_id = W_25X40,
5493 .total_size = 512,
5494 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005495 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005496 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005497 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005498 .block_erasers =
5499 {
5500 {
5501 .eraseblocks = { {4 * 1024, 128} },
5502 .block_erase = spi_block_erase_20,
5503 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005504 .eraseblocks = { {64 * 1024, 8} },
5505 .block_erase = spi_block_erase_d8,
5506 }, {
5507 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005508 .block_erase = spi_block_erase_c7,
5509 }
5510 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005511 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005512 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005513 },
5514
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005515 {
5516 .vendor = "Winbond",
5517 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005518 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005519 .manufacture_id = WINBOND_NEX_ID,
5520 .model_id = W_25X80,
5521 .total_size = 1024,
5522 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005523 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005524 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005525 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005526 .block_erasers =
5527 {
5528 {
5529 .eraseblocks = { {4 * 1024, 256} },
5530 .block_erase = spi_block_erase_20,
5531 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005532 .eraseblocks = { {64 * 1024, 16} },
5533 .block_erase = spi_block_erase_d8,
5534 }, {
5535 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005536 .block_erase = spi_block_erase_c7,
5537 }
5538 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005539 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005540 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005541 },
5542
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005543 {
5544 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005545 .name = "W25x16",
5546 .bustype = CHIP_BUSTYPE_SPI,
5547 .manufacture_id = WINBOND_NEX_ID,
5548 .model_id = W_25X16,
5549 .total_size = 2048,
5550 .page_size = 256,
5551 .tested = TEST_OK_PR,
5552 .probe = probe_spi_rdid,
5553 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005554 .block_erasers =
5555 {
5556 {
5557 .eraseblocks = { {4 * 1024, 512} },
5558 .block_erase = spi_block_erase_20,
5559 }, {
5560 .eraseblocks = { {32 * 1024, 64} },
5561 .block_erase = spi_block_erase_52,
5562 }, {
5563 .eraseblocks = { {64 * 1024, 32} },
5564 .block_erase = spi_block_erase_d8,
5565 }, {
5566 .eraseblocks = { {2 * 1024 * 1024, 1} },
5567 .block_erase = spi_block_erase_60,
5568 }, {
5569 .eraseblocks = { {2 * 1024 * 1024, 1} },
5570 .block_erase = spi_block_erase_c7,
5571 }
5572 },
Hector Martina721ae22009-07-11 19:39:11 +00005573 .write = spi_chip_write_256,
5574 .read = spi_chip_read,
5575 },
5576
5577 {
5578 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005579 .name = "W25x32",
5580 .bustype = CHIP_BUSTYPE_SPI,
5581 .manufacture_id = WINBOND_NEX_ID,
5582 .model_id = W_25X32,
5583 .total_size = 4096,
5584 .page_size = 256,
5585 .tested = TEST_OK_PROBE,
5586 .probe = probe_spi_rdid,
5587 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005588 .block_erasers =
5589 {
5590 {
5591 .eraseblocks = { {4 * 1024, 1024} },
5592 .block_erase = spi_block_erase_20,
5593 }, {
5594 .eraseblocks = { {32 * 1024, 128} },
5595 .block_erase = spi_block_erase_52,
5596 }, {
5597 .eraseblocks = { {64 * 1024, 64} },
5598 .block_erase = spi_block_erase_d8,
5599 }, {
5600 .eraseblocks = { {4 * 1024 * 1024, 1} },
5601 .block_erase = spi_block_erase_60,
5602 }, {
5603 .eraseblocks = { {4 * 1024 * 1024, 1} },
5604 .block_erase = spi_block_erase_c7,
5605 }
5606 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005607 .write = spi_chip_write_256,
5608 .read = spi_chip_read,
5609 },
5610
5611 {
5612 .vendor = "Winbond",
5613 .name = "W25x64",
5614 .bustype = CHIP_BUSTYPE_SPI,
5615 .manufacture_id = WINBOND_NEX_ID,
5616 .model_id = W_25X64,
5617 .total_size = 8192,
5618 .page_size = 256,
5619 .tested = TEST_UNTESTED,
5620 .probe = probe_spi_rdid,
5621 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005622 .block_erasers =
5623 {
5624 {
5625 .eraseblocks = { {4 * 1024, 2048} },
5626 .block_erase = spi_block_erase_20,
5627 }, {
5628 .eraseblocks = { {32 * 1024, 256} },
5629 .block_erase = spi_block_erase_52,
5630 }, {
5631 .eraseblocks = { {64 * 1024, 128} },
5632 .block_erase = spi_block_erase_d8,
5633 }, {
5634 .eraseblocks = { {8 * 1024 * 1024, 1} },
5635 .block_erase = spi_block_erase_60,
5636 }, {
5637 .eraseblocks = { {8 * 1024 * 1024, 1} },
5638 .block_erase = spi_block_erase_c7,
5639 }
5640 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005641 .write = spi_chip_write_256,
5642 .read = spi_chip_read,
5643 },
5644
5645 {
5646 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005647 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005648 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005649 .manufacture_id = WINBOND_ID,
5650 .model_id = W_29C011,
5651 .total_size = 128,
5652 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005653 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005654 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005655 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005656 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005657 .block_erasers =
5658 {
5659 {
5660 .eraseblocks = { {128 * 1024, 1} },
5661 .block_erase = erase_chip_block_jedec,
5662 }
5663 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005664 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005665 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005666 },
5667
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005668 {
5669 .vendor = "Winbond",
5670 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005671 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005672 .manufacture_id = WINBOND_ID,
5673 .model_id = W_29C020C,
5674 .total_size = 256,
5675 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005676 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005677 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005678 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005679 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005680 .block_erasers =
5681 {
5682 {
5683 .eraseblocks = { {256 * 1024, 1} },
5684 .block_erase = erase_chip_block_jedec,
5685 }
5686 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005687 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005688 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005689 },
5690
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005691 {
5692 .vendor = "Winbond",
5693 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005694 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005695 .manufacture_id = WINBOND_ID,
5696 .model_id = W_29C040P,
5697 .total_size = 512,
5698 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005699 .feature_bits = FEATURE_LONG_RESET,
5700 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005701 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005702 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005703 .block_erasers =
5704 {
5705 {
5706 .eraseblocks = { {512 * 1024, 1} },
5707 .block_erase = erase_chip_block_jedec,
5708 }
5709 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005710 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005711 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005712 },
5713
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005714 {
5715 .vendor = "Winbond",
5716 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005717 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005718 .manufacture_id = WINBOND_ID,
5719 .model_id = W_29C011,
5720 .total_size = 128,
5721 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005722 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005723 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005724 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005725 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005726 .block_erasers =
5727 {
5728 {
5729 .eraseblocks = { {128 * 1024, 1} },
5730 .block_erase = erase_chip_block_jedec,
5731 }
5732 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005733 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005734 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005735 },
5736
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005737 {
5738 .vendor = "Winbond",
5739 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005740 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005741 .manufacture_id = WINBOND_ID,
5742 .model_id = W_39V040A,
5743 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005744 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005745 .feature_bits = FEATURE_EITHER_RESET,
5746 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005747 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005748 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005749 .block_erasers =
5750 {
5751 {
5752 .eraseblocks = { {64 * 1024, 8} },
5753 .block_erase = erase_sector_jedec,
5754 }, {
5755 .eraseblocks = { {512 * 1024, 1} },
5756 .block_erase = erase_chip_block_jedec,
5757 }
5758 },
Sean Nelson35727f72010-01-28 23:55:12 +00005759 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005760 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005761 },
5762
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005763 {
5764 .vendor = "Winbond",
5765 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005766 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005767 .manufacture_id = WINBOND_ID,
5768 .model_id = W_39V040B,
5769 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005770 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005771 .feature_bits = FEATURE_EITHER_RESET,
5772 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005773 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005774 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005775 .block_erasers =
5776 {
5777 {
5778 .eraseblocks = { {64 * 1024, 8} },
5779 .block_erase = erase_sector_jedec,
5780 }, {
5781 .eraseblocks = { {512 * 1024, 1} },
5782 .block_erase = erase_chip_block_jedec,
5783 }
5784 },
Sean Nelson35727f72010-01-28 23:55:12 +00005785 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005786 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005787 },
5788
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005789 {
5790 .vendor = "Winbond",
5791 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005792 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005793 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005794 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005795 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005796 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005797 .feature_bits = FEATURE_EITHER_RESET,
5798 .tested = TEST_UNTESTED,
5799 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005800 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005801 .block_erasers =
5802 {
5803 {
5804 .eraseblocks = { {64 * 1024, 8} },
5805 .block_erase = erase_sector_jedec,
5806 }, {
5807 .eraseblocks = { {512 * 1024, 1} },
5808 .block_erase = erase_chip_block_jedec,
5809 }
5810 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005811 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00005812 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005813 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005814 },
5815
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005816 {
5817 .vendor = "Winbond",
5818 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005819 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005820 .manufacture_id = WINBOND_ID,
5821 .model_id = W_39V040FA,
5822 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005823 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005824 .feature_bits = FEATURE_EITHER_RESET,
5825 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005826 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005827 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005828 .block_erasers =
5829 {
5830 {
5831 .eraseblocks = { {4 * 1024, 128} },
5832 .block_erase = erase_block_jedec,
5833 }, {
5834 .eraseblocks = { {64 * 1024, 8} },
5835 .block_erase = erase_sector_jedec,
5836 }, {
5837 .eraseblocks = { {512 * 1024, 1} },
5838 .block_erase = erase_chip_block_jedec,
5839 }
5840 },
Sean Nelson35727f72010-01-28 23:55:12 +00005841 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005842 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005843 },
5844
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005845 {
5846 .vendor = "Winbond",
5847 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005848 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005849 .manufacture_id = WINBOND_ID,
5850 .model_id = W_39V080A,
5851 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005852 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005853 .feature_bits = FEATURE_EITHER_RESET,
5854 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005855 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005856 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005857 .block_erasers =
5858 {
5859 {
5860 .eraseblocks = { {64 * 1024, 16} },
5861 .block_erase = erase_sector_jedec,
5862 }, {
5863 .eraseblocks = { {1024 * 1024, 1} },
5864 .block_erase = erase_chip_block_jedec,
5865 }
5866 },
Sean Nelson35727f72010-01-28 23:55:12 +00005867 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005868 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005869 },
5870
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005871 {
5872 .vendor = "Winbond",
5873 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00005874 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005875 .manufacture_id = WINBOND_ID,
5876 .model_id = W_49F002U,
5877 .total_size = 256,
5878 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005879 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005880 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005881 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005882 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005883 .block_erasers =
5884 {
5885 {
5886 .eraseblocks = {
5887 {128 * 1024, 1},
5888 {96 * 1024, 1},
5889 {8 * 1024, 2},
5890 {16 * 1024, 1},
5891 },
5892 .block_erase = erase_sector_jedec,
5893 }, {
5894 .eraseblocks = { {256 * 1024, 1} },
5895 .block_erase = erase_chip_block_jedec,
5896 }
5897 },
Sean Nelson35727f72010-01-28 23:55:12 +00005898 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005899 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005900 },
5901
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005902 {
5903 .vendor = "Winbond",
5904 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005905 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005906 .manufacture_id = WINBOND_ID,
5907 .model_id = W_49V002A,
5908 .total_size = 256,
5909 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005910 .feature_bits = FEATURE_EITHER_RESET,
5911 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005912 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005913 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005914 .block_erasers =
5915 {
5916 {
5917 .eraseblocks = {
5918 {64 * 1024, 3},
5919 {32 * 1024, 1},
5920 {8 * 1024, 2},
5921 {16 * 1024, 1},
5922 },
5923 .block_erase = erase_sector_jedec,
5924 }, {
5925 .eraseblocks = { {256 * 1024, 1} },
5926 .block_erase = erase_chip_block_jedec,
5927 }
5928 },
Sean Nelson35727f72010-01-28 23:55:12 +00005929 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005930 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005931 },
5932
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005933 {
5934 .vendor = "Winbond",
5935 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005936 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005937 .manufacture_id = WINBOND_ID,
5938 .model_id = W_49V002FA,
5939 .total_size = 256,
5940 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005941 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005942 .tested = TEST_UNTESTED,
5943 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005944 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005945 .block_erasers =
5946 {
5947 {
5948 .eraseblocks = {
5949 {64 * 1024, 3},
5950 {32 * 1024, 1},
5951 {8 * 1024, 2},
5952 {16 * 1024, 1},
5953 },
5954 .block_erase = erase_sector_jedec,
5955 }, {
5956 .eraseblocks = { {256 * 1024, 1} },
5957 .block_erase = erase_chip_block_jedec,
5958 }
5959 },
Sean Nelson35727f72010-01-28 23:55:12 +00005960 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005961 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005962 },
5963
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005964 {
5965 .vendor = "Winbond",
5966 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005967 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005968 .manufacture_id = WINBOND_ID,
5969 .model_id = W_39V080FA,
5970 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005971 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005972 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
5973 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005974 .probe = probe_jedec,
5975 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005976 .block_erasers =
5977 {
5978 {
5979 .eraseblocks = { {64 * 1024, 16}, },
5980 .block_erase = erase_sector_jedec,
5981 }, {
5982 .eraseblocks = { {1024 * 1024, 1} },
5983 .block_erase = erase_chip_block_jedec,
5984 }
5985 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005986 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00005987 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005988 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005989 },
5990
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005991 {
5992 .vendor = "Winbond",
5993 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005994 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005995 .manufacture_id = WINBOND_ID,
5996 .model_id = W_39V080FA_DM,
5997 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005998 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005999 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006000 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006001 .probe = probe_jedec,
6002 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006003 .block_erasers =
6004 {
6005 {
6006 .eraseblocks = { {64 * 1024, 8}, },
6007 .block_erase = erase_sector_jedec,
6008 }, {
6009 .eraseblocks = { {512 * 1024, 1} },
6010 .block_erase = erase_chip_block_jedec,
6011 }
6012 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006013 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006014 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006015 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006016 },
6017
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006018 {
6019 .vendor = "Atmel",
6020 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006021 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006022 .manufacture_id = ATMEL_ID,
6023 .model_id = GENERIC_DEVICE_ID,
6024 .total_size = 0,
6025 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006026 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006027 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006028 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006029 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006030 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006031 },
6032
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006033 {
6034 .vendor = "EON",
6035 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006036 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006037 .manufacture_id = EON_ID_NOPREFIX,
6038 .model_id = GENERIC_DEVICE_ID,
6039 .total_size = 0,
6040 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006041 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006042 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006043 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006044 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006045 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006046 },
6047
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006048 {
6049 .vendor = "Macronix",
6050 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006051 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006052 .manufacture_id = MX_ID,
6053 .model_id = GENERIC_DEVICE_ID,
6054 .total_size = 0,
6055 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006056 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006057 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006058 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006059 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006060 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006061 },
6062
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006063 {
6064 .vendor = "PMC",
6065 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006066 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006067 .manufacture_id = PMC_ID,
6068 .model_id = GENERIC_DEVICE_ID,
6069 .total_size = 0,
6070 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006071 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006072 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006073 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006074 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006075 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006076 },
6077
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006078 {
6079 .vendor = "SST",
6080 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006081 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006082 .manufacture_id = SST_ID,
6083 .model_id = GENERIC_DEVICE_ID,
6084 .total_size = 0,
6085 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006086 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006087 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006088 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006089 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006090 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006091 },
6092
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006093 {
6094 .vendor = "ST",
6095 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006096 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006097 .manufacture_id = ST_ID,
6098 .model_id = GENERIC_DEVICE_ID,
6099 .total_size = 0,
6100 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006101 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006102 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006103 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006104 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006105 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006106 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006107
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006108 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006109 .vendor = "Sanyo",
6110 .name = "unknown Sanyo SPI chip",
6111 .bustype = CHIP_BUSTYPE_SPI,
6112 .manufacture_id = SANYO_ID,
6113 .model_id = GENERIC_DEVICE_ID,
6114 .total_size = 0,
6115 .page_size = 256,
6116 .tested = TEST_BAD_PREW,
6117 .probe = probe_spi_rdid,
6118 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006119 .write = NULL,
6120 .read = NULL,
6121 },
6122
6123 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006124 .vendor = "Generic",
6125 .name = "unknown SPI chip (RDID)",
6126 .bustype = CHIP_BUSTYPE_SPI,
6127 .manufacture_id = GENERIC_MANUF_ID,
6128 .model_id = GENERIC_DEVICE_ID,
6129 .total_size = 0,
6130 .page_size = 256,
6131 .tested = TEST_BAD_PREW,
6132 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006133 .write = NULL,
6134 },
6135 {
6136 .vendor = "Generic",
6137 .name = "unknown SPI chip (REMS)",
6138 .bustype = CHIP_BUSTYPE_SPI,
6139 .manufacture_id = GENERIC_MANUF_ID,
6140 .model_id = GENERIC_DEVICE_ID,
6141 .total_size = 0,
6142 .page_size = 256,
6143 .tested = TEST_BAD_PREW,
6144 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006145 .write = NULL,
6146 },
6147
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006148 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006149};