blob: 5005997294904cb9623aea7203011005897172de [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,
855 .tested = TEST_UNTESTED,
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,
1113 .tested = TEST_UNTESTED,
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,
1239 .tested = TEST_UNTESTED,
1240 .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 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002098 .vendor = "EON",
2099 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002100 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002101 .manufacture_id = EON_ID,
2102 .model_id = EN_29F002B,
2103 .total_size = 256,
2104 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002105 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002106 .tested = TEST_UNTESTED,
2107 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002108 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002109 .block_erasers =
2110 {
2111 {
2112 .eraseblocks = {
2113 {64 * 1024, 3},
2114 {32 * 1024, 1},
2115 {8 * 1024, 2},
2116 {16 * 1024, 1},
2117 },
2118 .block_erase = erase_sector_jedec,
2119 }, {
2120 .eraseblocks = { {256 * 1024, 1} },
2121 .block_erase = erase_chip_block_jedec,
2122 },
2123 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002124 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002125 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002126 },
2127
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002128 {
2129 .vendor = "EON",
2130 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002131 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002132 .manufacture_id = EON_ID,
2133 .model_id = EN_29F002T,
2134 .total_size = 256,
2135 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002136 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
2137 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002138 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002139 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002140 .block_erasers =
2141 {
2142 {
2143 .eraseblocks = {
2144 {16 * 1024, 1},
2145 {8 * 1024, 2},
2146 {32 * 1024, 1},
2147 {64 * 1024, 3},
2148 },
2149 .block_erase = erase_sector_jedec,
2150 }, {
2151 .eraseblocks = { {256 * 1024, 1} },
2152 .block_erase = erase_chip_block_jedec,
2153 },
2154 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002155 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002156 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002157 },
2158
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002159 {
2160 .vendor = "Fujitsu",
2161 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002162 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002163 .manufacture_id = FUJITSU_ID,
2164 .model_id = MBM29F004BC,
2165 .total_size = 512,
2166 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002167 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002168 .tested = TEST_UNTESTED,
2169 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002170 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002171 .block_erasers =
2172 {
2173 {
2174 .eraseblocks = {
2175 {16 * 1024, 1},
2176 {8 * 1024, 2},
2177 {32 * 1024, 1},
2178 {64 * 1024, 7},
2179 },
Sean Nelson35727f72010-01-28 23:55:12 +00002180 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002181 }, {
2182 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002183 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002184 },
2185 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002186 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002187 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002188 },
2189
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002190 {
2191 .vendor = "Fujitsu",
2192 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002193 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002194 .manufacture_id = FUJITSU_ID,
2195 .model_id = MBM29F004TC,
2196 .total_size = 512,
2197 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002198 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002199 .tested = TEST_UNTESTED,
2200 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002201 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002202 .block_erasers =
2203 {
2204 {
2205 .eraseblocks = {
2206 {64 * 1024, 7},
2207 {32 * 1024, 1},
2208 {8 * 1024, 2},
2209 {16 * 1024, 1},
2210 },
Sean Nelson35727f72010-01-28 23:55:12 +00002211 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002212 }, {
2213 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002214 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002215 },
2216 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002217 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002218 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002219 },
2220
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002221 {
Sean Nelson35727f72010-01-28 23:55:12 +00002222 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002223 .vendor = "Fujitsu",
2224 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002225 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002226 .manufacture_id = FUJITSU_ID,
2227 .model_id = MBM29F400BC,
2228 .total_size = 512,
2229 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002230 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002231 .tested = TEST_UNTESTED,
2232 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002233 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002234 .block_erasers =
2235 {
2236 {
2237 .eraseblocks = {
2238 {16 * 1024, 1},
2239 {8 * 1024, 2},
2240 {32 * 1024, 1},
2241 {64 * 1024, 7},
2242 },
2243 .block_erase = block_erase_m29f400bt,
2244 }, {
2245 .eraseblocks = { {512 * 1024, 1} },
2246 .block_erase = block_erase_chip_m29f400bt,
2247 },
2248 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002249 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002250 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002251 },
2252
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002253 {
2254 .vendor = "Fujitsu",
2255 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002256 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002257 .manufacture_id = FUJITSU_ID,
2258 .model_id = MBM29F400TC,
2259 .total_size = 512,
2260 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002261 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002262 .tested = TEST_UNTESTED,
2263 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002264 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002265 .block_erasers =
2266 {
2267 {
2268 .eraseblocks = {
2269 {64 * 1024, 7},
2270 {32 * 1024, 1},
2271 {8 * 1024, 2},
2272 {16 * 1024, 1},
2273 },
2274 .block_erase = block_erase_m29f400bt,
2275 }, {
2276 .eraseblocks = { {512 * 1024, 1} },
2277 .block_erase = block_erase_chip_m29f400bt,
2278 },
2279 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002280 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002281 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002282 },
2283
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002284 {
2285 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002286 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002287 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002288 .manufacture_id = INTEL_ID,
2289 .model_id = P28F001BXB,
2290 .total_size = 128,
2291 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelson35727f72010-01-28 23:55:12 +00002292 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002293 .tested = TEST_BAD_WRITE,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002294 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002295 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002296 .block_erasers =
2297 {
2298 {
2299 .eraseblocks = {
2300 {8 * 1024, 1},
2301 {4 * 1024, 2},
2302 {112 * 1024, 1},
2303 },
2304 .block_erase = erase_82802ab_block,
2305 },
2306 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002307 .write = NULL,
2308 .read = read_memmapped,
2309 },
2310
2311 {
2312 .vendor = "Intel",
2313 .name = "28F001BX-T",
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 = P28F001BXT,
2317 .total_size = 128,
2318 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelson35727f72010-01-28 23:55:12 +00002319 .feature_bits = 0,
2320 .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 {112 * 1024, 1},
2328 {4 * 1024, 2},
2329 {8 * 1024, 1},
2330 },
2331 .block_erase = erase_82802ab_block,
2332 },
2333 },
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002334 .write = NULL,
2335 .read = read_memmapped,
2336 },
2337
2338 {
2339 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002340 .name = "28F004S5",
2341 .bustype = CHIP_BUSTYPE_PARALLEL,
2342 .manufacture_id = INTEL_ID,
2343 .model_id = E_28F004S5,
2344 .total_size = 512,
2345 .page_size = 256,
2346 .tested = TEST_UNTESTED,
2347 .probe = probe_82802ab,
2348 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002349 .block_erasers =
2350 {
2351 {
2352 .eraseblocks = { {64 * 1024, 8} },
2353 .block_erase = erase_82802ab_block,
2354 },
2355 },
2356 .write = write_82802ab,
2357 .read = read_memmapped,
2358 },
2359
2360 {
2361 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002362 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002363 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002364 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002365 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002366 .total_size = 512,
2367 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002368 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002369 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002370 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002371 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002372 .block_erasers =
2373 {
2374 {
2375 .eraseblocks = { {64 * 1024, 8} },
2376 .block_erase = erase_82802ab_block,
2377 },
2378 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002379 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002380 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002381 },
2382
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002383 {
2384 .vendor = "Intel",
2385 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002386 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002387 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002388 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002389 .total_size = 1024,
2390 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002391 .feature_bits = 0,
Sean Nelson54596372010-01-09 05:30:14 +00002392 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002393 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002394 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002395 .block_erasers =
2396 {
2397 {
2398 .eraseblocks = { {64 * 1024, 16} },
2399 .block_erase = erase_82802ab_block,
2400 },
2401 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002402 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002403 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002404 },
2405
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002406 {
2407 .vendor = "Macronix",
2408 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002409 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002410 .manufacture_id = MX_ID,
2411 .model_id = MX_25L512,
2412 .total_size = 64,
2413 .page_size = 256,
2414 .tested = TEST_UNTESTED,
2415 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002416 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002417 .block_erasers =
2418 {
2419 {
2420 .eraseblocks = { {4 * 1024, 16} },
2421 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002422 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002423 .eraseblocks = { {64 * 1024, 1} },
2424 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002425 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002426 .eraseblocks = { {64 * 1024, 1} },
2427 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002428 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002429 .eraseblocks = { {64 * 1024, 1} },
2430 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002431 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002432 .eraseblocks = { {64 * 1024, 1} },
2433 .block_erase = spi_block_erase_c7,
2434 },
2435 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002436 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002437 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002438 },
2439
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002440 {
2441 .vendor = "Macronix",
2442 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002443 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002444 .manufacture_id = MX_ID,
2445 .model_id = MX_25L1005,
2446 .total_size = 128,
2447 .page_size = 256,
2448 .tested = TEST_UNTESTED,
2449 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002450 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002451 .block_erasers =
2452 {
2453 {
2454 .eraseblocks = { {4 * 1024, 32} },
2455 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002456 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002457 .eraseblocks = { {64 * 1024, 2} },
2458 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002459 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002460 .eraseblocks = { {128 * 1024, 1} },
2461 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002462 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002463 .eraseblocks = { {128 * 1024, 1} },
2464 .block_erase = spi_block_erase_c7,
2465 },
2466 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002467 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002468 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002469 },
2470
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002471 {
2472 .vendor = "Macronix",
2473 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002474 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002475 .manufacture_id = MX_ID,
2476 .model_id = MX_25L2005,
2477 .total_size = 256,
2478 .page_size = 256,
2479 .tested = TEST_UNTESTED,
2480 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002481 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002482 .block_erasers =
2483 {
2484 {
2485 .eraseblocks = { {4 * 1024, 64} },
2486 .block_erase = spi_block_erase_20,
2487 }, {
2488 .eraseblocks = { {64 * 1024, 4} },
2489 .block_erase = spi_block_erase_52,
2490 }, {
2491 .eraseblocks = { {64 * 1024, 4} },
2492 .block_erase = spi_block_erase_d8,
2493 }, {
2494 .eraseblocks = { {256 * 1024, 1} },
2495 .block_erase = spi_block_erase_60,
2496 }, {
2497 .eraseblocks = { {256 * 1024, 1} },
2498 .block_erase = spi_block_erase_c7,
2499 },
2500 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002501 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002502 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002503 },
2504
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002505 {
2506 .vendor = "Macronix",
2507 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002508 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002509 .manufacture_id = MX_ID,
2510 .model_id = MX_25L4005,
2511 .total_size = 512,
2512 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002513 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002514 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002515 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002516 .block_erasers =
2517 {
2518 {
2519 .eraseblocks = { {4 * 1024, 128} },
2520 .block_erase = spi_block_erase_20,
2521 }, {
2522 .eraseblocks = { {64 * 1024, 8} },
2523 .block_erase = spi_block_erase_52,
2524 }, {
2525 .eraseblocks = { {64 * 1024, 8} },
2526 .block_erase = spi_block_erase_d8,
2527 }, {
2528 .eraseblocks = { {512 * 1024, 1} },
2529 .block_erase = spi_block_erase_60,
2530 }, {
2531 .eraseblocks = { {512 * 1024, 1} },
2532 .block_erase = spi_block_erase_c7,
2533 },
2534 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002535 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002536 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002537 },
2538
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002539 {
2540 .vendor = "Macronix",
2541 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002542 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002543 .manufacture_id = MX_ID,
2544 .model_id = MX_25L8005,
2545 .total_size = 1024,
2546 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002547 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002548 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002549 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002550 .block_erasers =
2551 {
2552 {
2553 .eraseblocks = { {4 * 1024, 256} },
2554 .block_erase = spi_block_erase_20,
2555 }, {
2556 .eraseblocks = { {64 * 1024, 16} },
2557 .block_erase = spi_block_erase_52,
2558 }, {
2559 .eraseblocks = { {64 * 1024, 16} },
2560 .block_erase = spi_block_erase_d8,
2561 }, {
2562 .eraseblocks = { {1024 * 1024, 1} },
2563 .block_erase = spi_block_erase_60,
2564 }, {
2565 .eraseblocks = { {1024 * 1024, 1} },
2566 .block_erase = spi_block_erase_c7,
2567 },
2568 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002569 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002570 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002571 },
2572
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002573 {
2574 .vendor = "Macronix",
2575 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002576 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002577 .manufacture_id = MX_ID,
2578 .model_id = MX_25L1605,
2579 .total_size = 2048,
2580 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002581 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002582 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002583 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002584 .block_erasers =
2585 {
2586 {
2587 .eraseblocks = { {4 * 1024, 512} },
2588 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2589 }, {
2590 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2591 .block_erase = spi_block_erase_52,
2592 }, {
2593 .eraseblocks = { {64 * 1024, 32} },
2594 .block_erase = spi_block_erase_d8,
2595 }, {
2596 .eraseblocks = { {2 * 1024 * 1024, 1} },
2597 .block_erase = spi_block_erase_60,
2598 }, {
2599 .eraseblocks = { {2 * 1024 * 1024, 1} },
2600 .block_erase = spi_block_erase_c7,
2601 },
2602 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002603 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002604 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002605 },
2606
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002607 {
2608 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002609 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002610 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002611 .manufacture_id = MX_ID,
2612 .model_id = MX_25L1635D,
2613 .total_size = 2048,
2614 .page_size = 256,
2615 .tested = TEST_UNTESTED,
2616 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002617 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002618 .block_erasers =
2619 {
2620 {
2621 .eraseblocks = { {4 * 1024, 512} },
2622 .block_erase = spi_block_erase_20,
2623 }, {
2624 .eraseblocks = { {64 * 1024, 32} },
2625 .block_erase = spi_block_erase_d8,
2626 }, {
2627 .eraseblocks = { {2 * 1024 * 1024, 1} },
2628 .block_erase = spi_block_erase_60,
2629 }, {
2630 .eraseblocks = { {2 * 1024 * 1024, 1} },
2631 .block_erase = spi_block_erase_c7,
2632 }
2633 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002634 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002635 .read = spi_chip_read,
2636 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002637
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002638 {
2639 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002640 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002641 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002642 .manufacture_id = MX_ID,
2643 .model_id = MX_25L3205,
2644 .total_size = 4096,
2645 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002646 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002647 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002648 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002649 .block_erasers =
2650 {
2651 {
2652 .eraseblocks = { {4 * 1024, 1024} },
2653 .block_erase = spi_block_erase_20,
2654 }, {
2655 .eraseblocks = { {4 * 1024, 1024} },
2656 .block_erase = spi_block_erase_d8,
2657 }, {
2658 .eraseblocks = { {4 * 1024 * 1024, 1} },
2659 .block_erase = spi_block_erase_60,
2660 }, {
2661 .eraseblocks = { {4 * 1024 * 1024, 1} },
2662 .block_erase = spi_block_erase_c7,
2663 },
2664 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002665 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002666 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002667 },
2668
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002669 {
2670 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002671 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002672 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002673 .manufacture_id = MX_ID,
2674 .model_id = MX_25L3235D,
2675 .total_size = 4096,
2676 .page_size = 256,
2677 .tested = TEST_UNTESTED,
2678 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002679 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002680 .block_erasers =
2681 {
2682 {
2683 .eraseblocks = { {4 * 1024, 1024} },
2684 .block_erase = spi_block_erase_20,
2685 }, {
2686 .eraseblocks = { {64 * 1024, 64} },
2687 .block_erase = spi_block_erase_d8,
2688 }, {
2689 .eraseblocks = { {4 * 1024 * 1024, 1} },
2690 .block_erase = spi_block_erase_60,
2691 }, {
2692 .eraseblocks = { {4 * 1024 * 1024, 1} },
2693 .block_erase = spi_block_erase_c7,
2694 }
2695 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002696 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002697 .read = spi_chip_read,
2698 },
2699
2700 {
2701 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002702 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002703 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002704 .manufacture_id = MX_ID,
2705 .model_id = MX_25L6405,
2706 .total_size = 8192,
2707 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002708 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002709 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002710 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002711 .block_erasers =
2712 {
2713 {
2714 .eraseblocks = { {64 * 1024, 128} },
2715 .block_erase = spi_block_erase_20,
2716 }, {
2717 .eraseblocks = { {64 * 1024, 128} },
2718 .block_erase = spi_block_erase_d8,
2719 }, {
2720 .eraseblocks = { {8 * 1024 * 1024, 1} },
2721 .block_erase = spi_block_erase_60,
2722 }, {
2723 .eraseblocks = { {8 * 1024 * 1024, 1} },
2724 .block_erase = spi_block_erase_c7,
2725 }
2726 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002727 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002728 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002729 },
2730
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002731 {
2732 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002733 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002734 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002735 .manufacture_id = MX_ID,
2736 .model_id = MX_25L12805,
2737 .total_size = 16384,
2738 .page_size = 256,
2739 .tested = TEST_UNTESTED,
2740 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002741 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002742 .block_erasers =
2743 {
2744 {
2745 .eraseblocks = { {4 * 1024, 4096} },
2746 .block_erase = spi_block_erase_20,
2747 }, {
2748 .eraseblocks = { {64 * 1024, 256} },
2749 .block_erase = spi_block_erase_d8,
2750 }, {
2751 .eraseblocks = { {16 * 1024 * 1024, 1} },
2752 .block_erase = spi_block_erase_60,
2753 }, {
2754 .eraseblocks = { {16 * 1024 * 1024, 1} },
2755 .block_erase = spi_block_erase_c7,
2756 }
2757 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002758 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002759 .read = spi_chip_read,
2760 },
2761
2762 {
2763 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002764 .name = "MX29F001B",
2765 .bustype = CHIP_BUSTYPE_PARALLEL,
2766 .manufacture_id = MX_ID,
2767 .model_id = MX_29F001B,
2768 .total_size = 128,
2769 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002770 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2771 .tested = TEST_UNTESTED,
2772 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002773 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002774 .block_erasers =
2775 {
2776 {
2777 .eraseblocks = {
2778 {8 * 1024, 1},
2779 {4 * 1024, 2},
2780 {8 * 1024, 2},
2781 {32 * 1024, 1},
2782 {64 * 1024, 1},
2783 },
Sean Nelson35727f72010-01-28 23:55:12 +00002784 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002785 }, {
2786 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002787 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002788 }
2789 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002790 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002791 .read = read_memmapped,
2792 },
2793
2794 {
2795 .vendor = "Macronix",
2796 .name = "MX29F001T",
2797 .bustype = CHIP_BUSTYPE_PARALLEL,
2798 .manufacture_id = MX_ID,
2799 .model_id = MX_29F001T,
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 {64 * 1024, 1},
2811 {32 * 1024, 1},
2812 {8 * 1024, 2},
2813 {4 * 1024, 2},
2814 {8 * 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",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002828 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002829 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002830 .manufacture_id = MX_ID,
2831 .model_id = MX_29F002B,
2832 .total_size = 256,
2833 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002834 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002835 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002836 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002837 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002838 .block_erasers =
2839 {
2840 {
2841 .eraseblocks = {
2842 {16 * 1024, 1},
2843 {8 * 1024, 2},
2844 {32 * 1024, 1},
2845 {64 * 1024, 3},
2846 },
Sean Nelson35727f72010-01-28 23:55:12 +00002847 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002848 }, {
2849 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002850 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002851 },
2852 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002853 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002854 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002855 },
2856
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002857 {
2858 .vendor = "Macronix",
2859 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002860 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002861 .manufacture_id = MX_ID,
2862 .model_id = MX_29F002T,
2863 .total_size = 256,
2864 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002865 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2866 .tested = TEST_UNTESTED,
2867 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002868 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002869 .block_erasers =
2870 {
2871 {
2872 .eraseblocks = {
2873 {64 * 1024, 3},
2874 {32 * 1024, 1},
2875 {8 * 1024, 2},
2876 {16 * 1024, 1},
2877 },
Sean Nelson35727f72010-01-28 23:55:12 +00002878 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002879 }, {
2880 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002881 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002882 },
2883 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002884 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002885 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002886 },
2887
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002888 {
2889 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002890 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00002891 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002892 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00002893 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002894 .total_size = 512,
2895 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002896 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2897 .tested = TEST_UNTESTED,
2898 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002899 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002900 .block_erasers =
2901 {
2902 {
2903 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00002904 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002905 }, {
2906 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002907 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002908 },
2909 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002910 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002911 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00002912 },
2913
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002914 {
2915 .vendor = "Numonyx",
2916 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002917 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002918 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002919 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002920 .total_size = 128,
2921 .page_size = 256,
2922 .tested = TEST_UNTESTED,
2923 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002924 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002925 .block_erasers =
2926 {
2927 {
2928 .eraseblocks = { {4 * 1024, 32} },
2929 .block_erase = spi_block_erase_20,
2930 }, {
2931 .eraseblocks = { {64 * 1024, 2} },
2932 .block_erase = spi_block_erase_d8,
2933 }, {
2934 .eraseblocks = { {128 * 1024, 1} },
2935 .block_erase = spi_block_erase_c7,
2936 }
2937 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002938 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002939 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002940 },
2941
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002942 {
2943 .vendor = "Numonyx",
2944 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002945 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002946 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002947 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002948 .total_size = 256,
2949 .page_size = 256,
2950 .tested = TEST_UNTESTED,
2951 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002952 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002953 .block_erasers =
2954 {
2955 {
2956 .eraseblocks = { {4 * 1024, 64} },
2957 .block_erase = spi_block_erase_20,
2958 }, {
2959 .eraseblocks = { {64 * 1024, 4} },
2960 .block_erase = spi_block_erase_d8,
2961 }, {
2962 .eraseblocks = { {256 * 1024, 1} },
2963 .block_erase = spi_block_erase_c7,
2964 }
2965 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002966 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002967 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002968 },
2969
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002970 {
2971 .vendor = "Numonyx",
2972 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002973 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002974 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002975 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00002976 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002977 .page_size = 256,
2978 .tested = TEST_UNTESTED,
2979 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002980 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00002981 .block_erasers =
2982 {
2983 {
2984 .eraseblocks = { {4 * 1024, 128} },
2985 .block_erase = spi_block_erase_20,
2986 }, {
2987 .eraseblocks = { {64 * 1024, 8} },
2988 .block_erase = spi_block_erase_d8,
2989 }, {
2990 .eraseblocks = { {512 * 1024, 1} },
2991 .block_erase = spi_block_erase_c7,
2992 }
2993 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002994 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002995 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002996 },
2997
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002998 {
2999 .vendor = "Numonyx",
3000 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003001 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003002 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003003 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003004 .total_size = 1024,
3005 .page_size = 256,
3006 .tested = TEST_OK_PREW,
3007 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003008 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003009 .block_erasers =
3010 {
3011 {
3012 .eraseblocks = { {4 * 1024, 256} },
3013 .block_erase = spi_block_erase_20,
3014 }, {
3015 .eraseblocks = { {64 * 1024, 16} },
3016 .block_erase = spi_block_erase_d8,
3017 }, {
3018 .eraseblocks = { {1024 * 1024, 1} },
3019 .block_erase = spi_block_erase_c7,
3020 }
3021 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003022 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003023 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003024 },
3025
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003026 {
3027 .vendor = "Numonyx",
3028 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003029 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003030 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003031 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003032 .total_size = 2048,
3033 .page_size = 256,
3034 .tested = TEST_UNTESTED,
3035 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003036 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003037 .block_erasers =
3038 {
3039 {
3040 .eraseblocks = { {4 * 1024, 512} },
3041 .block_erase = spi_block_erase_20,
3042 }, {
3043 .eraseblocks = { {64 * 1024, 32} },
3044 .block_erase = spi_block_erase_d8,
3045 }, {
3046 .eraseblocks = { {2 * 1024 * 1024, 1} },
3047 .block_erase = spi_block_erase_c7,
3048 }
3049 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003050 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003051 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003052 },
3053
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003054 {
3055 .vendor = "PMC",
3056 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003057 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003058 .manufacture_id = PMC_ID,
3059 .model_id = PMC_25LV010,
3060 .total_size = 128,
3061 .page_size = 256,
3062 .tested = TEST_UNTESTED,
3063 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003064 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003065 .block_erasers =
3066 {
3067 {
3068 .eraseblocks = { {4 * 1024, 32} },
3069 .block_erase = spi_block_erase_d7,
3070 }, {
3071 .eraseblocks = { {32 * 1024, 4} },
3072 .block_erase = spi_block_erase_d8,
3073 }, {
3074 .eraseblocks = { {128 * 1024, 1} },
3075 .block_erase = spi_block_erase_c7,
3076 }
3077 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003078 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003079 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003080 },
3081
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003082 {
3083 .vendor = "PMC",
3084 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003085 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003086 .manufacture_id = PMC_ID,
3087 .model_id = PMC_25LV016B,
3088 .total_size = 2048,
3089 .page_size = 256,
3090 .tested = TEST_UNTESTED,
3091 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003092 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003093 .block_erasers =
3094 {
3095 {
3096 .eraseblocks = { {4 * 1024, 512} },
3097 .block_erase = spi_block_erase_d7,
3098 }, {
3099 .eraseblocks = { {4 * 1024, 512} },
3100 .block_erase = spi_block_erase_20,
3101 }, {
3102 .eraseblocks = { {64 * 1024, 32} },
3103 .block_erase = spi_block_erase_d8,
3104 }, {
3105 .eraseblocks = { {2 * 1024 * 1024, 1} },
3106 .block_erase = spi_block_erase_60,
3107 }, {
3108 .eraseblocks = { {2 * 1024 * 1024, 1} },
3109 .block_erase = spi_block_erase_c7,
3110 }
3111 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003112 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003113 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003114 },
3115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003116 {
3117 .vendor = "PMC",
3118 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003119 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003120 .manufacture_id = PMC_ID,
3121 .model_id = PMC_25LV020,
3122 .total_size = 256,
3123 .page_size = 256,
3124 .tested = TEST_UNTESTED,
3125 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003126 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003127 .block_erasers =
3128 {
3129 {
3130 .eraseblocks = { {4 * 1024, 64} },
3131 .block_erase = spi_block_erase_d7,
3132 }, {
3133 .eraseblocks = { {64 * 1024, 4} },
3134 .block_erase = spi_block_erase_d8,
3135 }, {
3136 .eraseblocks = { {256 * 1024, 1} },
3137 .block_erase = spi_block_erase_c7,
3138 }
3139 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003140 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003141 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003142 },
3143
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003144 {
3145 .vendor = "PMC",
3146 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003147 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003148 .manufacture_id = PMC_ID,
3149 .model_id = PMC_25LV040,
3150 .total_size = 512,
3151 .page_size = 256,
3152 .tested = TEST_UNTESTED,
3153 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003154 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003155 .block_erasers =
3156 {
3157 {
3158 .eraseblocks = { {4 * 1024, 128} },
3159 .block_erase = spi_block_erase_d7,
3160 }, {
3161 .eraseblocks = { {64 * 1024, 8} },
3162 .block_erase = spi_block_erase_d8,
3163 }, {
3164 .eraseblocks = { {512 * 1024, 1} },
3165 .block_erase = spi_block_erase_c7,
3166 }
3167 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003168 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003169 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003170 },
3171
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003172 {
3173 .vendor = "PMC",
3174 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003175 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003176 .manufacture_id = PMC_ID,
3177 .model_id = PMC_25LV080B,
3178 .total_size = 1024,
3179 .page_size = 256,
3180 .tested = TEST_UNTESTED,
3181 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003182 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003183 .block_erasers =
3184 {
3185 {
3186 .eraseblocks = { {4 * 1024, 256} },
3187 .block_erase = spi_block_erase_d7,
3188 }, {
3189 .eraseblocks = { {4 * 1024, 256} },
3190 .block_erase = spi_block_erase_20,
3191 }, {
3192 .eraseblocks = { {64 * 1024, 16} },
3193 .block_erase = spi_block_erase_d8,
3194 }, {
3195 .eraseblocks = { {1024 * 1024, 1} },
3196 .block_erase = spi_block_erase_60,
3197 }, {
3198 .eraseblocks = { {1024 * 1024, 1} },
3199 .block_erase = spi_block_erase_c7,
3200 }
3201 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003202 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003203 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003204 },
3205
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003206 {
3207 .vendor = "PMC",
3208 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003209 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003210 .manufacture_id = PMC_ID,
3211 .model_id = PMC_25LV512,
3212 .total_size = 64,
3213 .page_size = 256,
3214 .tested = TEST_UNTESTED,
3215 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003216 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003217 .block_erasers =
3218 {
3219 {
3220 .eraseblocks = { {4 * 1024, 16} },
3221 .block_erase = spi_block_erase_d7,
3222 }, {
3223 .eraseblocks = { {32 * 1024, 2} },
3224 .block_erase = spi_block_erase_d8,
3225 }, {
3226 .eraseblocks = { {64 * 1024, 1} },
3227 .block_erase = spi_block_erase_c7,
3228 }
3229 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003230 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003231 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003232 },
3233
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003234 {
3235 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003236 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003237 .bustype = CHIP_BUSTYPE_PARALLEL,
3238 .manufacture_id = PMC_ID_NOPREFIX,
3239 .model_id = PMC_29F002T,
3240 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003241 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003242 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3243 .tested = TEST_UNTESTED,
3244 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003245 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003246 .block_erasers =
3247 {
3248 {
3249 .eraseblocks = {
3250 {128 * 1024, 1},
3251 {96 * 1024, 1},
3252 {8 * 1024, 2},
3253 {16 * 1024, 1},
3254 },
Sean Nelson35727f72010-01-28 23:55:12 +00003255 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003256 }, {
3257 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003258 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003259 },
3260 },
Sean Nelson35727f72010-01-28 23:55:12 +00003261 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003262 .read = read_memmapped,
3263 },
3264
3265 {
3266 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003267 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003268 .bustype = CHIP_BUSTYPE_PARALLEL,
3269 .manufacture_id = PMC_ID_NOPREFIX,
3270 .model_id = PMC_29F002B,
3271 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003272 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003273 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003274 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003275 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003276 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003277 .block_erasers =
3278 {
3279 {
3280 .eraseblocks = {
3281 {16 * 1024, 1},
3282 {8 * 1024, 2},
3283 {96 * 1024, 1},
3284 {128 * 1024, 1},
3285 },
Sean Nelson35727f72010-01-28 23:55:12 +00003286 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003287 }, {
3288 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003289 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003290 },
3291 },
Sean Nelson35727f72010-01-28 23:55:12 +00003292 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003293 .read = read_memmapped,
3294 },
3295
3296 {
3297 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003298 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003299 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003300 .manufacture_id = PMC_ID_NOPREFIX,
3301 .model_id = PMC_39F010,
3302 .total_size = 128,
3303 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003304 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3305 .tested = TEST_UNTESTED,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003306 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003307 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003308 .block_erasers =
3309 {
3310 {
3311 .eraseblocks = { {4 * 1024, 32} },
3312 .block_erase = erase_sector_jedec,
3313 }, {
3314 .eraseblocks = { {64 * 1024, 2} },
3315 .block_erase = erase_block_jedec,
3316 }, {
3317 .eraseblocks = { {128 * 1024, 1} },
3318 .block_erase = erase_chip_block_jedec,
3319 }
3320 },
Sean Nelson35727f72010-01-28 23:55:12 +00003321 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003322 .read = read_memmapped,
3323 },
3324
3325 {
3326 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003327 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003328 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003329 .manufacture_id = PMC_ID_NOPREFIX,
3330 .model_id = PMC_49FL002,
3331 .total_size = 256,
3332 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003333 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3334 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003335 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003336 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003337 .block_erasers =
3338 {
3339 {
3340 .eraseblocks = { {4 * 1024, 64} },
3341 .block_erase = erase_sector_jedec,
3342 }, {
3343 .eraseblocks = { {16 * 1024, 16} },
3344 .block_erase = erase_block_jedec,
3345 }, {
3346 .eraseblocks = { {256 * 1024, 1} },
3347 .block_erase = erase_chip_block_jedec,
3348 }
3349 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003350 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003351 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003352 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003353 },
3354
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003355 {
3356 .vendor = "PMC",
3357 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003358 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003359 .manufacture_id = PMC_ID_NOPREFIX,
3360 .model_id = PMC_49FL004,
3361 .total_size = 512,
3362 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003363 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
3364 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003365 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003366 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003367 .block_erasers =
3368 {
3369 {
3370 .eraseblocks = { {4 * 1024, 128} },
3371 .block_erase = erase_sector_jedec,
3372 }, {
3373 .eraseblocks = { {64 * 1024, 8} },
3374 .block_erase = erase_block_jedec,
3375 }, {
3376 .eraseblocks = { {512 * 1024, 1} },
3377 .block_erase = erase_chip_block_jedec,
3378 }
3379 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003380 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003381 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003382 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003383 },
3384
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003385 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003386 .vendor = "Sanyo",
3387 .name = "LF25FW203A",
3388 .bustype = CHIP_BUSTYPE_SPI,
3389 .manufacture_id = SANYO_ID,
3390 .model_id = SANYO_LE25FW203A,
3391 .total_size = 2048,
3392 .page_size = 256,
3393 .tested = TEST_UNTESTED,
3394 .probe = probe_spi_rdid,
3395 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003396 .block_erasers =
3397 {
3398 {
3399 .eraseblocks = { {64 * 1024, 32} },
3400 .block_erase = spi_block_erase_d8,
3401 }, {
3402 .eraseblocks = { {2 * 1024 * 1024, 1} },
3403 .block_erase = spi_block_erase_c7,
3404 }
3405 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003406 .write = spi_chip_write_256,
3407 .read = spi_chip_read,
3408 },
3409
3410 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003411 .vendor = "Sharp",
3412 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003413 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003414 .manufacture_id = SHARP_ID,
3415 .model_id = SHARP_LHF00L04,
3416 .total_size = 1024,
3417 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003418 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003419 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003420 .probe = probe_49lfxxxc,
3421 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003422 .block_erasers =
3423 {
3424 {
3425 .eraseblocks = {
3426 {64 * 1024, 15},
3427 {8 * 1024, 8}
3428 },
3429 .block_erase = erase_lhf00l04_block,
3430 }, {
3431 .eraseblocks = {
3432 {1024 * 1024, 1}
3433 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003434 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003435 },
3436 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003437 .write = write_lhf00l04,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003438 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003439 },
3440
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003441 {
3442 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003443 .name = "S25FL008A",
3444 .bustype = CHIP_BUSTYPE_SPI,
3445 .manufacture_id = SPANSION_ID,
3446 .model_id = SPANSION_S25FL008A,
3447 .total_size = 1024,
3448 .page_size = 256,
3449 .tested = TEST_OK_PREW,
3450 .probe = probe_spi_rdid,
3451 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003452 .block_erasers =
3453 {
3454 {
3455 .eraseblocks = { {64 * 1024, 16} },
3456 .block_erase = spi_block_erase_d8,
3457 }, {
3458 .eraseblocks = { {1024 * 1024, 1} },
3459 .block_erase = spi_block_erase_c7,
3460 }
3461 },
3462 .write = spi_chip_write_256,
3463 .read = spi_chip_read,
3464 },
3465
3466 {
3467 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003468 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003469 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003470 .manufacture_id = SPANSION_ID,
3471 .model_id = SPANSION_S25FL016A,
3472 .total_size = 2048,
3473 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003474 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003475 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003476 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003477 .block_erasers =
3478 {
3479 {
3480 .eraseblocks = { {64 * 1024, 32} },
3481 .block_erase = spi_block_erase_d8,
3482 }, {
3483 .eraseblocks = { {2 * 1024 * 1024, 1} },
3484 .block_erase = spi_block_erase_c7,
3485 }
3486 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003487 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003488 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003489 },
3490
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003491 {
3492 .vendor = "SST",
3493 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003494 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003495 .manufacture_id = SST_ID,
3496 .model_id = SST_25VF016B,
3497 .total_size = 2048,
3498 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003499 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003500 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003501 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003502 .block_erasers =
3503 {
3504 {
3505 .eraseblocks = { {4 * 1024, 512} },
3506 .block_erase = spi_block_erase_20,
3507 }, {
3508 .eraseblocks = { {32 * 1024, 64} },
3509 .block_erase = spi_block_erase_52,
3510 }, {
3511 .eraseblocks = { {64 * 1024, 32} },
3512 .block_erase = spi_block_erase_d8,
3513 }, {
3514 .eraseblocks = { {2 * 1024 * 1024, 1} },
3515 .block_erase = spi_block_erase_60,
3516 }, {
3517 .eraseblocks = { {2 * 1024 * 1024, 1} },
3518 .block_erase = spi_block_erase_c7,
3519 },
3520 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003521 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003522 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003523 },
3524
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003525 {
3526 .vendor = "SST",
3527 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003528 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003529 .manufacture_id = SST_ID,
3530 .model_id = SST_25VF032B,
3531 .total_size = 4096,
3532 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003533 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003534 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003535 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003536 .block_erasers =
3537 {
3538 {
3539 .eraseblocks = { {4 * 1024, 1024} },
3540 .block_erase = spi_block_erase_20,
3541 }, {
3542 .eraseblocks = { {32 * 1024, 128} },
3543 .block_erase = spi_block_erase_52,
3544 }, {
3545 .eraseblocks = { {64 * 1024, 64} },
3546 .block_erase = spi_block_erase_d8,
3547 }, {
3548 .eraseblocks = { {4 * 1024 * 1024, 1} },
3549 .block_erase = spi_block_erase_60,
3550 }, {
3551 .eraseblocks = { {4 * 1024 * 1024, 1} },
3552 .block_erase = spi_block_erase_c7,
3553 },
3554 },
3555 .write = spi_chip_write_1,
3556 .read = spi_chip_read,
3557 },
3558
3559 {
3560 .vendor = "SST",
3561 .name = "SST25VF040.REMS",
3562 .bustype = CHIP_BUSTYPE_SPI,
3563 .manufacture_id = SST_ID,
3564 .model_id = SST_25VF040_REMS,
3565 .total_size = 512,
3566 .page_size = 256,
3567 .tested = TEST_OK_PR,
3568 .probe = probe_spi_rems,
3569 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003570 .block_erasers =
3571 {
3572 {
3573 .eraseblocks = { {4 * 1024, 128} },
3574 .block_erase = spi_block_erase_20,
3575 }, {
3576 .eraseblocks = { {32 * 1024, 16} },
3577 .block_erase = spi_block_erase_52,
3578 }, {
3579 .eraseblocks = { {512 * 1024, 1} },
3580 .block_erase = spi_block_erase_60,
3581 },
3582 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003583 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003584 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003585 },
3586
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003587 {
3588 .vendor = "SST",
3589 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003590 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003591 .manufacture_id = SST_ID,
3592 .model_id = SST_25VF040B,
3593 .total_size = 512,
3594 .page_size = 256,
3595 .tested = TEST_UNTESTED,
3596 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003597 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003598 .block_erasers =
3599 {
3600 {
3601 .eraseblocks = { {4 * 1024, 128} },
3602 .block_erase = spi_block_erase_20,
3603 }, {
3604 .eraseblocks = { {32 * 1024, 16} },
3605 .block_erase = spi_block_erase_52,
3606 }, {
3607 .eraseblocks = { {64 * 1024, 8} },
3608 .block_erase = spi_block_erase_d8,
3609 }, {
3610 .eraseblocks = { {512 * 1024, 1} },
3611 .block_erase = spi_block_erase_60,
3612 }, {
3613 .eraseblocks = { {512 * 1024, 1} },
3614 .block_erase = spi_block_erase_c7,
3615 },
3616 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003617 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003618 .read = spi_chip_read,
3619 },
3620
3621 {
3622 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003623 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003624 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003625 .manufacture_id = SST_ID,
3626 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003627 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003628 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003629 .tested = TEST_OK_PR,
3630 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003631 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003632 .block_erasers =
3633 {
3634 {
3635 .eraseblocks = { {4 * 1024, 128} },
3636 .block_erase = spi_block_erase_20,
3637 }, {
3638 .eraseblocks = { {32 * 1024, 16} },
3639 .block_erase = spi_block_erase_52,
3640 }, {
3641 .eraseblocks = { {64 * 1024, 8} },
3642 .block_erase = spi_block_erase_d8,
3643 }, {
3644 .eraseblocks = { {512 * 1024, 1} },
3645 .block_erase = spi_block_erase_60,
3646 }, {
3647 .eraseblocks = { {512 * 1024, 1} },
3648 .block_erase = spi_block_erase_c7,
3649 },
3650 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003651 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003652 .read = spi_chip_read,
3653 },
3654
3655 {
3656 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003657 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003658 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003659 .manufacture_id = SST_ID,
3660 .model_id = SST_25VF080B,
3661 .total_size = 1024,
3662 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003663 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003664 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003665 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003666 .block_erasers =
3667 {
3668 {
3669 .eraseblocks = { {4 * 1024, 256} },
3670 .block_erase = spi_block_erase_20,
3671 }, {
3672 .eraseblocks = { {32 * 1024, 32} },
3673 .block_erase = spi_block_erase_52,
3674 }, {
3675 .eraseblocks = { {64 * 1024, 16} },
3676 .block_erase = spi_block_erase_d8,
3677 }, {
3678 .eraseblocks = { {1024 * 1024, 1} },
3679 .block_erase = spi_block_erase_60,
3680 }, {
3681 .eraseblocks = { {1024 * 1024, 1} },
3682 .block_erase = spi_block_erase_c7,
3683 },
3684 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003685 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003686 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003687 },
3688
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003689 {
3690 .vendor = "SST",
3691 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003692 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003693 .manufacture_id = SST_ID,
3694 .model_id = SST_28SF040,
3695 .total_size = 512,
3696 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003697 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003698 .tested = TEST_UNTESTED,
3699 .probe = probe_28sf040,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003700 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003701 .block_erasers =
3702 {
3703 {
3704 .eraseblocks = { {128, 4096} },
3705 .block_erase = erase_sector_28sf040,
3706 }, {
3707 .eraseblocks = { {512 * 1024, 1} },
3708 .block_erase = erase_chip_28sf040,
3709 }
3710 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003711 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003712 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003713 },
3714
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003715 {
3716 .vendor = "SST",
3717 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003718 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003719 .manufacture_id = SST_ID,
3720 .model_id = SST_29EE010,
3721 .total_size = 128,
3722 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003723 .feature_bits = FEATURE_LONG_RESET,
3724 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003725 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003726 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003727 .block_erasers =
3728 {
3729 {
3730 .eraseblocks = { {128 * 1024, 1} },
3731 .block_erase = erase_chip_block_jedec,
3732 }
3733 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003734 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003735 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003736 },
3737
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003738 {
3739 .vendor = "SST",
3740 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003741 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003742 .manufacture_id = SST_ID,
3743 .model_id = SST_29LE010,
3744 .total_size = 128,
3745 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003746 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003747 .tested = TEST_UNTESTED,
3748 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003749 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003750 .block_erasers =
3751 {
3752 {
3753 .eraseblocks = { {128 * 1024, 1} },
3754 .block_erase = erase_chip_block_jedec,
3755 }
3756 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003757 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003758 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003759 },
3760
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003761 {
3762 .vendor = "SST",
3763 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003764 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003765 .manufacture_id = SST_ID,
3766 .model_id = SST_29EE020A,
3767 .total_size = 256,
3768 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003769 .feature_bits = FEATURE_LONG_RESET,
3770 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003771 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003772 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003773 .block_erasers =
3774 {
3775 {
3776 .eraseblocks = { {256 * 1024, 1} },
3777 .block_erase = erase_chip_block_jedec,
3778 }
3779 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003780 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003781 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003782 },
3783
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003784 {
3785 .vendor = "SST",
3786 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003787 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003788 .manufacture_id = SST_ID,
3789 .model_id = SST_29LE020,
3790 .total_size = 256,
3791 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003792 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003793 .tested = TEST_UNTESTED,
3794 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003795 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003796 .block_erasers =
3797 {
3798 {
3799 .eraseblocks = { {256 * 1024, 1} },
3800 .block_erase = erase_chip_block_jedec,
3801 }
3802 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003803 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003804 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003805 },
3806
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003807 {
3808 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00003809 .name = "SST39SF512",
3810 .bustype = CHIP_BUSTYPE_PARALLEL,
3811 .manufacture_id = SST_ID,
3812 .model_id = SST_39SF512,
3813 .total_size = 64,
3814 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003815 .feature_bits = FEATURE_EITHER_RESET,
3816 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003817 .probe = probe_jedec,
3818 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00003819 .block_erasers =
3820 {
3821 {
3822 .eraseblocks = { {4 * 1024, 16} },
3823 .block_erase = erase_sector_jedec,
3824 }, {
3825 .eraseblocks = { {64 * 1024, 1} },
3826 .block_erase = erase_chip_block_jedec,
3827 }
3828 },
Sean Nelson35727f72010-01-28 23:55:12 +00003829 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00003830 .read = read_memmapped,
3831 },
3832
3833 {
3834 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003835 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003836 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003837 .manufacture_id = SST_ID,
3838 .model_id = SST_39SF010,
3839 .total_size = 128,
3840 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003841 .feature_bits = FEATURE_EITHER_RESET,
3842 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003843 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003844 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003845 .block_erasers =
3846 {
3847 {
3848 .eraseblocks = { {4 * 1024, 32} },
3849 .block_erase = erase_sector_jedec,
3850 }, {
3851 .eraseblocks = { {128 * 1024, 1} },
3852 .block_erase = erase_chip_block_jedec,
3853 }
3854 },
Sean Nelson35727f72010-01-28 23:55:12 +00003855 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003856 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003857 },
3858
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003859 {
3860 .vendor = "SST",
3861 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003862 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003863 .manufacture_id = SST_ID,
3864 .model_id = SST_39SF020,
3865 .total_size = 256,
3866 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003867 .feature_bits = FEATURE_EITHER_RESET,
3868 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003869 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003870 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003871 .block_erasers =
3872 {
3873 {
3874 .eraseblocks = { {4 * 1024, 64} },
3875 .block_erase = erase_sector_jedec,
3876 }, {
3877 .eraseblocks = { {256 * 1024, 1} },
3878 .block_erase = erase_chip_block_jedec,
3879 }
3880 },
Sean Nelson35727f72010-01-28 23:55:12 +00003881 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003882 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003883 },
3884
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003885 {
3886 .vendor = "SST",
3887 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003888 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003889 .manufacture_id = SST_ID,
3890 .model_id = SST_39SF040,
3891 .total_size = 512,
3892 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003893 .feature_bits = FEATURE_EITHER_RESET,
3894 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003895 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003896 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003897 .block_erasers =
3898 {
3899 {
3900 .eraseblocks = { {4 * 1024, 128} },
3901 .block_erase = erase_sector_jedec,
3902 }, {
3903 .eraseblocks = { {512 * 1024, 1} },
3904 .block_erase = erase_chip_block_jedec,
3905 }
3906 },
Sean Nelson35727f72010-01-28 23:55:12 +00003907 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003908 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003909 },
3910
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003911 {
3912 .vendor = "SST",
3913 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00003914 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003915 .manufacture_id = SST_ID,
3916 .model_id = SST_39VF512,
3917 .total_size = 64,
3918 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003919 .feature_bits = FEATURE_EITHER_RESET,
3920 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003921 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003922 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00003923 .block_erasers =
3924 {
3925 {
3926 .eraseblocks = { {4 * 1024, 16} },
3927 .block_erase = erase_sector_jedec,
3928 }, {
3929 .eraseblocks = { {64 * 1024, 1} },
3930 .block_erase = erase_chip_block_jedec,
3931 }
3932 },
Sean Nelson35727f72010-01-28 23:55:12 +00003933 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003934 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003935 },
3936
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003937 {
3938 .vendor = "SST",
3939 .name = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003940 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003941 .manufacture_id = SST_ID,
3942 .model_id = SST_39VF010,
3943 .total_size = 128,
3944 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003945 .feature_bits = FEATURE_EITHER_RESET,
3946 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003947 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003948 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003949 .block_erasers =
3950 {
3951 {
3952 .eraseblocks = { {4 * 1024, 32} },
3953 .block_erase = erase_sector_jedec,
3954 }, {
3955 .eraseblocks = { {128 * 1024, 1} },
3956 .block_erase = erase_chip_block_jedec,
3957 }
3958 },
Sean Nelson35727f72010-01-28 23:55:12 +00003959 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003960 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003961 },
3962
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003963 {
3964 .vendor = "SST",
3965 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003966 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003967 .manufacture_id = SST_ID,
3968 .model_id = SST_39VF020,
3969 .total_size = 256,
3970 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003971 .feature_bits = FEATURE_EITHER_RESET,
3972 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003973 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003974 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003975 .block_erasers =
3976 {
3977 {
3978 .eraseblocks = { {4 * 1024, 64} },
3979 .block_erase = erase_sector_jedec,
3980 }, {
3981 .eraseblocks = { {256 * 1024, 1} },
3982 .block_erase = erase_chip_block_jedec,
3983 }
3984 },
Sean Nelson35727f72010-01-28 23:55:12 +00003985 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003986 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003987 },
3988
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003989 {
3990 .vendor = "SST",
3991 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003992 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003993 .manufacture_id = SST_ID,
3994 .model_id = SST_39VF040,
3995 .total_size = 512,
3996 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003997 .feature_bits = FEATURE_EITHER_RESET,
3998 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003999 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004000 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004001 .block_erasers =
4002 {
4003 {
4004 .eraseblocks = { {4 * 1024, 128} },
4005 .block_erase = erase_sector_jedec,
4006 }, {
4007 .eraseblocks = { {512 * 1024, 1} },
4008 .block_erase = erase_chip_block_jedec,
4009 }
4010 },
Sean Nelson35727f72010-01-28 23:55:12 +00004011 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004012 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004013 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004014
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004015 {
4016 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004017 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004018 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004019 .manufacture_id = SST_ID,
4020 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004021 .total_size = 1024,
4022 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004023 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004024 .tested = TEST_UNTESTED,
4025 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004026 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004027 .block_erasers =
4028 {
4029 {
4030 .eraseblocks = { {4 * 1024, 256} },
4031 .block_erase = erase_sector_jedec,
4032 }, {
4033 .eraseblocks = { {64 * 1024, 16} },
4034 .block_erase = erase_block_jedec,
4035 }, {
4036 .eraseblocks = { {1024 * 1024, 1} },
4037 .block_erase = erase_chip_block_jedec,
4038 }
4039 },
Sean Nelson35727f72010-01-28 23:55:12 +00004040 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004041 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004042 },
4043
4044 {
4045 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004046 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004047 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004048 .manufacture_id = SST_ID,
4049 .model_id = SST_49LF002A,
4050 .total_size = 256,
4051 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004052 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004053 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004054 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004055 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004056 .block_erasers =
4057 {
4058 {
4059 .eraseblocks = { {4 * 1024, 64} },
4060 .block_erase = erase_sst_fwhub_sector,
4061 }, {
4062 .eraseblocks = { {16 * 1024, 16} },
4063 .block_erase = erase_sst_fwhub_block,
4064 }, {
4065 .eraseblocks = { {256 * 1024, 1} },
4066 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4067 }
4068 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004069 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004070 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004071 },
4072
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004073 {
4074 .vendor = "SST",
4075 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004076 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004077 .manufacture_id = SST_ID,
4078 .model_id = SST_49LF003A,
4079 .total_size = 384,
4080 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004081 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004082 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004083 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004084 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004085 .block_erasers =
4086 {
4087 {
4088 .eraseblocks = { {4 * 1024, 96} },
4089 .block_erase = erase_sst_fwhub_sector,
4090 }, {
4091 .eraseblocks = { {64 * 1024, 6} },
4092 .block_erase = erase_sst_fwhub_block,
4093 }, {
4094 .eraseblocks = { {384 * 1024, 1} },
4095 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4096 }
4097 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004098 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004099 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004100 },
4101
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004102 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004103 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4104 * and is only honored for 64k block erase, but not 4k sector erase.
4105 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004106 .vendor = "SST",
4107 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004108 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004109 .manufacture_id = SST_ID,
4110 .model_id = SST_49LF004A,
4111 .total_size = 512,
4112 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004113 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004114 .tested = TEST_OK_PREW,
4115 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004116 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004117 .block_erasers =
4118 {
4119 {
4120 .eraseblocks = { {4 * 1024, 128} },
4121 .block_erase = erase_sector_jedec, /* missing unlock */
4122 }, {
4123 .eraseblocks = { {64 * 1024, 8} },
Carl-Daniel Hailfinger11c9e682009-11-06 18:09:42 +00004124 .block_erase = erase_sst_fwhub_block, /* same as erase_block_jedec, but with unlock */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004125 }, {
4126 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004127 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004128 },
4129 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004130 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004131 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004132 },
4133
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004134 {
4135 .vendor = "SST",
4136 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004137 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004138 .manufacture_id = SST_ID,
4139 .model_id = SST_49LF004C,
4140 .total_size = 512,
4141 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004142 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004143 .tested = TEST_UNTESTED,
4144 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004145 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004146 .block_erasers =
4147 {
4148 {
4149 .eraseblocks = { {4 * 1024, 128} },
4150 .block_erase = erase_sector_49lfxxxc,
4151 }, {
4152 .eraseblocks = {
4153 {64 * 1024, 7},
4154 {32 * 1024, 1},
4155 {8 * 1024, 2},
4156 {16 * 1024, 1},
4157 },
4158 .block_erase = erase_block_49lfxxxc,
4159 }
4160 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004161 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004162 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004163 },
4164
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004165 {
4166 .vendor = "SST",
4167 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004168 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004169 .manufacture_id = SST_ID,
4170 .model_id = SST_49LF008A,
4171 .total_size = 1024,
4172 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004173 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004174 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004175 .probe = probe_sst_fwhub,
Udu Ogahc04ee222009-09-05 01:31:32 +00004176 .probe_timing = 1, /* 150 ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004177 .block_erasers =
4178 {
4179 {
4180 .eraseblocks = { {4 * 1024, 256} },
4181 .block_erase = erase_sst_fwhub_sector,
4182 }, {
4183 .eraseblocks = { {64 * 1024, 16} },
4184 .block_erase = erase_sst_fwhub_block,
4185 }, {
4186 .eraseblocks = { {1024 * 1024, 1} },
4187 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4188 }
4189 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004190 .write = write_sst_fwhub,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004191 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004192 },
4193
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004194 {
4195 .vendor = "SST",
4196 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004197 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004198 .manufacture_id = SST_ID,
4199 .model_id = SST_49LF008C,
4200 .total_size = 1024,
4201 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004202 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004203 .tested = TEST_UNTESTED,
4204 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004205 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004206 .block_erasers =
4207 {
4208 {
4209 .eraseblocks = { {4 * 1024, 256} },
4210 .block_erase = erase_sector_49lfxxxc,
4211 }, {
4212 .eraseblocks = {
4213 {64 * 1024, 15},
4214 {32 * 1024, 1},
4215 {8 * 1024, 2},
4216 {16 * 1024, 1},
4217 },
4218 .block_erase = erase_block_49lfxxxc,
4219 }
4220 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004221 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004222 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004223 },
4224
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004225 {
4226 .vendor = "SST",
4227 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004228 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004229 .manufacture_id = SST_ID,
4230 .model_id = SST_49LF016C,
4231 .total_size = 2048,
4232 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004233 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004234 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004235 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004236 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004237 .block_erasers =
4238 {
4239 {
4240 .eraseblocks = { {4 * 1024, 512} },
4241 .block_erase = erase_sector_49lfxxxc,
4242 }, {
4243 .eraseblocks = {
4244 {64 * 1024, 31},
4245 {32 * 1024, 1},
4246 {8 * 1024, 2},
4247 {16 * 1024, 1},
4248 },
4249 .block_erase = erase_block_49lfxxxc,
4250 }
4251 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004252 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004253 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004254 },
4255
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004256 {
4257 .vendor = "SST",
4258 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004259 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004260 .manufacture_id = SST_ID,
4261 .model_id = SST_49LF020,
4262 .total_size = 256,
4263 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004264 .feature_bits = FEATURE_EITHER_RESET,
4265 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004266 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004267 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004268 .block_erasers =
4269 {
4270 {
4271 .eraseblocks = { {4 * 1024, 64} },
4272 .block_erase = erase_sector_jedec,
4273 }, {
4274 .eraseblocks = { {16 * 1024, 16} },
4275 .block_erase = erase_block_jedec,
4276 }, {
4277 .eraseblocks = { {256 * 1024, 1} },
4278 .block_erase = NULL,
4279 }
4280 },
Sean Nelson35727f72010-01-28 23:55:12 +00004281 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004282 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004283 },
4284
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004285 {
4286 .vendor = "SST",
4287 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004288 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004289 .manufacture_id = SST_ID,
4290 .model_id = SST_49LF020A,
4291 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004292 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004293 .feature_bits = FEATURE_EITHER_RESET,
4294 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004295 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004296 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004297 .block_erasers =
4298 {
4299 {
4300 .eraseblocks = { {4 * 1024, 64} },
4301 .block_erase = erase_sector_jedec,
4302 }, {
4303 .eraseblocks = { {16 * 1024, 16} },
4304 .block_erase = erase_block_jedec,
4305 }, {
4306 .eraseblocks = { {256 * 1024, 1} },
4307 .block_erase = NULL,
4308 }
4309 },
Sean Nelson35727f72010-01-28 23:55:12 +00004310 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004311 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004312 },
4313
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004314 {
4315 .vendor = "SST",
4316 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004317 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004318 .manufacture_id = SST_ID,
4319 .model_id = SST_49LF040,
4320 .total_size = 512,
4321 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004322 .feature_bits = FEATURE_EITHER_RESET,
4323 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004324 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004325 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004326 .block_erasers =
4327 {
4328 {
4329 .eraseblocks = { {4 * 1024, 128} },
4330 .block_erase = erase_sector_jedec,
4331 }, {
4332 .eraseblocks = { {64 * 1024, 8} },
4333 .block_erase = erase_block_jedec,
4334 }, {
4335 .eraseblocks = { {512 * 1024, 1} },
4336 .block_erase = NULL,
4337 }
4338 },
Sean Nelson35727f72010-01-28 23:55:12 +00004339 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004340 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004341 },
4342
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004343 {
4344 .vendor = "SST",
4345 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004346 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004347 .manufacture_id = SST_ID,
4348 .model_id = SST_49LF040B,
4349 .total_size = 512,
4350 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004351 .feature_bits = FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004352 .tested = TEST_UNTESTED,
4353 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004354 .probe_timing = 1, /* 150ns | routine is wrapper to probe_jedec (sst_fwhub.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004355 .block_erasers =
4356 {
4357 {
4358 .eraseblocks = { {4 * 1024, 128} },
4359 .block_erase = erase_sector_jedec,
4360 }, {
4361 .eraseblocks = { {64 * 1024, 8} },
4362 .block_erase = erase_block_jedec,
4363 }, {
4364 .eraseblocks = { {512 * 1024, 1} },
4365 .block_erase = NULL,
4366 }
4367 },
Sean Nelson35727f72010-01-28 23:55:12 +00004368 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004369 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004370 },
4371
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004372 {
4373 .vendor = "SST",
4374 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004375 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004376 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004377 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004378 .total_size = 1024,
4379 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004380 .feature_bits = FEATURE_EITHER_RESET,
4381 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004382 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004383 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004384 .block_erasers =
4385 {
4386 {
4387 .eraseblocks = { {4 * 1024, 256} },
4388 .block_erase = erase_sector_jedec,
4389 }, {
4390 .eraseblocks = { {64 * 1024, 16} },
4391 .block_erase = erase_block_jedec,
4392 }, {
4393 .eraseblocks = { {1024 * 1024, 1} },
4394 .block_erase = NULL,
4395 }
4396 },
Sean Nelson35727f72010-01-28 23:55:12 +00004397 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004398 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004399 },
4400
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004401 {
4402 .vendor = "SST",
4403 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004404 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004405 .manufacture_id = SST_ID,
4406 .model_id = SST_49LF160C,
4407 .total_size = 2048,
4408 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004409 .feature_bits = 0,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004410 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004411 .probe = probe_49lfxxxc,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004412 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004413 .block_erasers =
4414 {
4415 {
4416 .eraseblocks = { {4 * 1024, 512} },
4417 .block_erase = erase_sector_49lfxxxc,
4418 }, {
4419 .eraseblocks = {
4420 {64 * 1024, 31},
4421 {32 * 1024, 1},
4422 {8 * 1024, 2},
4423 {16 * 1024, 1},
4424 },
4425 .block_erase = erase_block_49lfxxxc,
4426 }
4427 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004428 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004429 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004430 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004431 },
4432
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004433 {
4434 .vendor = "ST",
4435 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004436 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004437 .manufacture_id = ST_ID,
4438 .model_id = ST_M25P05A,
4439 .total_size = 64,
4440 .page_size = 256,
4441 .tested = TEST_UNTESTED,
4442 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004443 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004444 .block_erasers =
4445 {
4446 {
4447 .eraseblocks = { {32 * 1024, 2} },
4448 .block_erase = spi_block_erase_d8,
4449 }, {
4450 .eraseblocks = { {64 * 1024, 1} },
4451 .block_erase = spi_block_erase_c7,
4452 }
4453 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004454 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004455 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004456 },
4457
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004458 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4459 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
4460 * of 256 byte writes. We rely heavily on the fact that probe_spi_res
4461 * only is successful if RDID does not work.
4462 */
4463 {
4464 .vendor = "ST",
4465 .name = "M25P05.RES",
4466 .bustype = CHIP_BUSTYPE_SPI,
4467 .manufacture_id = ST_ID,
4468 .model_id = ST_M25P05_RES,
4469 .total_size = 64,
4470 .page_size = 256,
4471 .tested = TEST_UNTESTED,
4472 .probe = probe_spi_res,
4473 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004474 .block_erasers =
4475 {
4476 {
4477 .eraseblocks = { {32 * 1024, 2} },
4478 .block_erase = spi_block_erase_d8,
4479 }, {
4480 .eraseblocks = { {64 * 1024, 1} },
4481 .block_erase = spi_block_erase_c7,
4482 }
4483 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004484 .write = spi_chip_write_1, /* 128 */
4485 .read = spi_chip_read,
4486 },
4487
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004488 {
4489 .vendor = "ST",
4490 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004491 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004492 .manufacture_id = ST_ID,
4493 .model_id = ST_M25P10A,
4494 .total_size = 128,
4495 .page_size = 256,
4496 .tested = TEST_UNTESTED,
4497 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004498 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004499 .block_erasers =
4500 {
4501 {
4502 .eraseblocks = { {32 * 1024, 4} },
4503 .block_erase = spi_block_erase_d8,
4504 }, {
4505 .eraseblocks = { {128 * 1024, 1} },
4506 .block_erase = spi_block_erase_c7,
4507 }
4508 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004509 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004510 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004511 },
4512
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004513 /* The ST M25P10 has the same problem as the M25P05. */
4514 {
4515 .vendor = "ST",
4516 .name = "M25P10.RES",
4517 .bustype = CHIP_BUSTYPE_SPI,
4518 .manufacture_id = ST_ID,
4519 .model_id = ST_M25P10_RES,
4520 .total_size = 128,
4521 .page_size = 256,
4522 .tested = TEST_UNTESTED,
4523 .probe = probe_spi_res,
4524 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004525 .block_erasers =
4526 {
4527 {
4528 .eraseblocks = { {32 * 1024, 4} },
4529 .block_erase = spi_block_erase_d8,
4530 }, {
4531 .eraseblocks = { {128 * 1024, 1} },
4532 .block_erase = spi_block_erase_c7,
4533 }
4534 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004535 .write = spi_chip_write_1, /* 128 */
4536 .read = spi_chip_read,
4537 },
4538
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004539 {
4540 .vendor = "ST",
4541 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004542 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004543 .manufacture_id = ST_ID,
4544 .model_id = ST_M25P20,
4545 .total_size = 256,
4546 .page_size = 256,
4547 .tested = TEST_UNTESTED,
4548 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004549 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004550 .block_erasers =
4551 {
4552 {
4553 .eraseblocks = { {64 * 1024, 4} },
4554 .block_erase = spi_block_erase_d8,
4555 }, {
4556 .eraseblocks = { {256 * 1024, 1} },
4557 .block_erase = spi_block_erase_c7,
4558 }
4559 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004560 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004561 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004562 },
4563
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004564 {
4565 .vendor = "ST",
4566 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004567 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004568 .manufacture_id = ST_ID,
4569 .model_id = ST_M25P40,
4570 .total_size = 512,
4571 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004572 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004573 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004574 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004575 .block_erasers =
4576 {
4577 {
4578 .eraseblocks = { {64 * 1024, 8} },
4579 .block_erase = spi_block_erase_d8,
4580 }, {
4581 .eraseblocks = { {512 * 1024, 1} },
4582 .block_erase = spi_block_erase_c7,
4583 }
4584 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004585 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004586 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004587 },
4588
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004589 {
4590 .vendor = "ST",
4591 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004592 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004593 .manufacture_id = ST_ID,
4594 .model_id = ST_M25P40_RES,
4595 .total_size = 512,
4596 .page_size = 256,
4597 .tested = TEST_UNTESTED,
4598 .probe = probe_spi_res,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004599 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004600 .block_erasers =
4601 {
4602 {
4603 .eraseblocks = { {64 * 1024, 8} },
4604 .block_erase = spi_block_erase_d8,
4605 }, {
4606 .eraseblocks = { {512 * 1024, 1} },
4607 .block_erase = spi_block_erase_c7,
4608 }
4609 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004610 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004611 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004612 },
4613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004614 {
4615 .vendor = "ST",
4616 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004617 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004618 .manufacture_id = ST_ID,
4619 .model_id = ST_M25P80,
4620 .total_size = 1024,
4621 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004622 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004623 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004624 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004625 .block_erasers =
4626 {
4627 {
4628 .eraseblocks = { {64 * 1024, 16} },
4629 .block_erase = spi_block_erase_d8,
4630 }, {
4631 .eraseblocks = { {1024 * 1024, 1} },
4632 .block_erase = spi_block_erase_c7,
4633 }
4634 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004635 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004636 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004637 },
4638
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004639 {
4640 .vendor = "ST",
4641 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004642 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004643 .manufacture_id = ST_ID,
4644 .model_id = ST_M25P16,
4645 .total_size = 2048,
4646 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004647 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004648 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004649 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004650 .block_erasers =
4651 {
4652 {
4653 .eraseblocks = { {64 * 1024, 32} },
4654 .block_erase = spi_block_erase_d8,
4655 }, {
4656 .eraseblocks = { {2 * 1024 * 1024, 1} },
4657 .block_erase = spi_block_erase_c7,
4658 }
4659 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004660 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004661 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004662 },
4663
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004664 {
4665 .vendor = "ST",
4666 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004667 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004668 .manufacture_id = ST_ID,
4669 .model_id = ST_M25P32,
4670 .total_size = 4096,
4671 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004672 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004673 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004674 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004675 .block_erasers =
4676 {
4677 {
4678 .eraseblocks = { {64 * 1024, 64} },
4679 .block_erase = spi_block_erase_d8,
4680 }, {
4681 .eraseblocks = { {4 * 1024 * 1024, 1} },
4682 .block_erase = spi_block_erase_c7,
4683 }
4684 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004685 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004686 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004687 },
4688
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004689 {
4690 .vendor = "ST",
4691 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004692 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004693 .manufacture_id = ST_ID,
4694 .model_id = ST_M25P64,
4695 .total_size = 8192,
4696 .page_size = 256,
4697 .tested = TEST_UNTESTED,
4698 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004699 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004700 .block_erasers =
4701 {
4702 {
4703 .eraseblocks = { {64 * 1024, 128} },
4704 .block_erase = spi_block_erase_d8,
4705 }, {
4706 .eraseblocks = { {8 * 1024 * 1024, 1} },
4707 .block_erase = spi_block_erase_c7,
4708 }
4709 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004710 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004711 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004712 },
4713
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004714 {
4715 .vendor = "ST",
4716 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004717 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004718 .manufacture_id = ST_ID,
4719 .model_id = ST_M25P128,
4720 .total_size = 16384,
4721 .page_size = 256,
4722 .tested = TEST_UNTESTED,
4723 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004724 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004725 .block_erasers =
4726 {
4727 {
4728 .eraseblocks = { {256 * 1024, 64} },
4729 .block_erase = spi_block_erase_d8,
4730 }, {
4731 .eraseblocks = { {16 * 1024 * 1024, 1} },
4732 .block_erase = spi_block_erase_c7,
4733 }
4734 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004735 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004736 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004737 },
4738
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004739 {
4740 .vendor = "ST",
4741 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004742 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004743 .manufacture_id = ST_ID,
4744 .model_id = ST_M29F002B,
4745 .total_size = 256,
4746 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004747 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004748 .tested = TEST_UNTESTED,
4749 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004750 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004751 .block_erasers =
4752 {
4753 {
4754 .eraseblocks = {
4755 {16 * 1024, 1},
4756 {8 * 1024, 2},
4757 {32 * 1024, 1},
4758 {64 * 1024, 3},
4759 },
4760 .block_erase = erase_sector_jedec,
4761 }, {
4762 .eraseblocks = { {256 * 1024, 1} },
4763 .block_erase = erase_chip_block_jedec,
4764 }
4765 },
Sean Nelson35727f72010-01-28 23:55:12 +00004766 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004767 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004768 },
4769
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004770 {
4771 .vendor = "ST",
4772 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004773 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004774 .manufacture_id = ST_ID,
4775 .model_id = ST_M29F002T,
4776 .total_size = 256,
4777 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004778 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
4779 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004780 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004781 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004782 .block_erasers =
4783 {
4784 {
4785 .eraseblocks = {
4786 {64 * 1024, 3},
4787 {32 * 1024, 1},
4788 {8 * 1024, 2},
4789 {16 * 1024, 1},
4790 },
4791 .block_erase = erase_sector_jedec,
4792 }, {
4793 .eraseblocks = { {256 * 1024, 1} },
4794 .block_erase = erase_chip_block_jedec,
4795 }
4796 },
Sean Nelson35727f72010-01-28 23:55:12 +00004797 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004798 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004799 },
4800
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004801 {
4802 .vendor = "ST",
4803 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004804 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004805 .manufacture_id = ST_ID,
4806 .model_id = ST_M29F040B,
4807 .total_size = 512,
4808 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004809 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4810 .tested = TEST_UNTESTED,
4811 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004812 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004813 .block_erasers =
4814 {
4815 {
4816 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00004817 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004818 }, {
4819 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00004820 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00004821 }
4822 },
Sean Nelson35727f72010-01-28 23:55:12 +00004823 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004824 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004825 },
4826
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004827 {
Sean Nelson35727f72010-01-28 23:55:12 +00004828 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004829 .vendor = "ST",
4830 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004831 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004832 .manufacture_id = ST_ID,
4833 .model_id = ST_M29F400BT,
4834 .total_size = 512,
4835 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004836 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004837 .tested = TEST_UNTESTED,
4838 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004839 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00004840 .block_erasers =
4841 {
4842 {
4843 .eraseblocks = {
4844 {64 * 1024, 7},
4845 {32 * 1024, 1},
4846 {8 * 1024, 2},
4847 {16 * 1024, 1},
4848 },
4849 .block_erase = block_erase_m29f400bt,
4850 }, {
4851 .eraseblocks = { {512 * 1024, 1} },
4852 .block_erase = block_erase_chip_m29f400bt,
4853 }
4854 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004855 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004856 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004857 },
4858
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004859 {
4860 .vendor = "ST",
4861 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004862 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004863 .manufacture_id = ST_ID,
4864 .model_id = ST_M29W010B,
4865 .total_size = 128,
4866 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004867 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004868 .tested = TEST_UNTESTED,
4869 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004870 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004871 .block_erasers =
4872 {
4873 {
4874 .eraseblocks = { {16 * 1024, 8}, },
4875 .block_erase = erase_sector_jedec,
4876 }, {
4877 .eraseblocks = { {128 * 1024, 1} },
4878 .block_erase = erase_chip_block_jedec,
4879 }
4880 },
Sean Nelson35727f72010-01-28 23:55:12 +00004881 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004882 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004883 },
4884
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004885 {
4886 .vendor = "ST",
4887 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004888 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004889 .manufacture_id = ST_ID,
4890 .model_id = ST_M29W040B,
4891 .total_size = 512,
4892 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004893 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004894 .tested = TEST_UNTESTED,
4895 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004896 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004897 .block_erasers =
4898 {
4899 {
4900 .eraseblocks = { {64 * 1024, 8}, },
4901 .block_erase = erase_sector_jedec,
4902 }, {
4903 .eraseblocks = { {512 * 1024, 1} },
4904 .block_erase = erase_chip_block_jedec,
4905 }
4906 },
Sean Nelson35727f72010-01-28 23:55:12 +00004907 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004908 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004909 },
4910
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004911 {
4912 .vendor = "ST",
4913 .name = "M29W512B",
4914 .bustype = CHIP_BUSTYPE_PARALLEL,
4915 .manufacture_id = ST_ID,
4916 .model_id = ST_M29W512B,
4917 .total_size = 64,
4918 .page_size = 64 * 1024,
4919 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
4920 .tested = TEST_OK_PREW,
4921 .probe = probe_jedec,
4922 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00004923 .block_erasers =
4924 {
4925 {
4926 .eraseblocks = { {64 * 1024, 1} },
4927 .block_erase = erase_chip_block_jedec,
4928 }
4929 },
4930 .write = write_jedec_1,
4931 .read = read_memmapped,
4932 },
4933
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004934 {
4935 .vendor = "ST",
4936 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00004937 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004938 .manufacture_id = ST_ID,
4939 .model_id = ST_M50FLW040A,
4940 .total_size = 512,
4941 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004942 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004943 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004944 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004945 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004946 .block_erasers =
4947 {
4948 {
Sean Nelson329bde72010-01-19 16:39:19 +00004949 .eraseblocks = {
4950 {4 * 1024, 16}, /* sector */
4951 {64 * 1024, 5}, /* block */
4952 {4 * 1024, 16}, /* sector */
4953 {4 * 1024, 16}, /* sector */
4954 },
4955 .block_erase = NULL,
4956 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004957 .eraseblocks = { {64 * 1024, 8}, },
4958 .block_erase = erase_block_stm50flw0x0x,
4959 }, {
4960 .eraseblocks = { {512 * 1024, 1} },
4961 .block_erase = erase_chip_stm50flw0x0x,
4962 }
4963 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004964 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004965 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004966 },
4967
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004968 {
4969 .vendor = "ST",
4970 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00004971 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004972 .manufacture_id = ST_ID,
4973 .model_id = ST_M50FLW040B,
4974 .total_size = 512,
4975 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004976 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004977 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00004978 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00004979 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00004980 .block_erasers =
4981 {
4982 {
Sean Nelson329bde72010-01-19 16:39:19 +00004983 .eraseblocks = {
4984 {4 * 1024, 16}, /* sector */
4985 {4 * 1024, 16}, /* sector */
4986 {64 * 1024, 5}, /* block */
4987 {4 * 1024, 16}, /* sector */
4988 },
4989 .block_erase = NULL,
4990 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00004991 .eraseblocks = { {64 * 1024, 8}, },
4992 .block_erase = erase_block_stm50flw0x0x,
4993 }, {
4994 .eraseblocks = { {512 * 1024, 1} },
4995 .block_erase = erase_chip_stm50flw0x0x,
4996 }
4997 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004998 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004999 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005000 },
5001
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005002 {
5003 .vendor = "ST",
5004 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005005 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005006 .manufacture_id = ST_ID,
5007 .model_id = ST_M50FLW080A,
5008 .total_size = 1024,
5009 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005010 .feature_bits = 0,
5011 .tested = TEST_UNTESTED,
5012 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005013 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005014 .block_erasers =
5015 {
5016 {
Sean Nelson329bde72010-01-19 16:39:19 +00005017 .eraseblocks = {
5018 {4 * 1024, 16}, /* sector */
5019 {64 * 1024, 13}, /* block */
5020 {4 * 1024, 16}, /* sector */
5021 {4 * 1024, 16}, /* sector */
5022 },
5023 .block_erase = NULL,
5024 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005025 .eraseblocks = { {64 * 1024, 16}, },
5026 .block_erase = erase_block_stm50flw0x0x,
5027 }, {
5028 .eraseblocks = { {1024 * 1024, 1} },
5029 .block_erase = erase_chip_stm50flw0x0x,
5030 }
5031 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005032 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005033 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005034 },
5035
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005036 {
5037 .vendor = "ST",
5038 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005039 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005040 .manufacture_id = ST_ID,
5041 .model_id = ST_M50FLW080B,
5042 .total_size = 1024,
5043 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005044 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005045 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005046 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005047 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005048 .block_erasers =
5049 {
5050 {
Sean Nelson329bde72010-01-19 16:39:19 +00005051 .eraseblocks = {
5052 {4 * 1024, 16}, /* sector */
5053 {4 * 1024, 16}, /* sector */
5054 {64 * 1024, 13}, /* block */
5055 {4 * 1024, 16}, /* sector */
5056 },
5057 .block_erase = NULL,
5058 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005059 .eraseblocks = { {64 * 1024, 16}, },
5060 .block_erase = erase_block_stm50flw0x0x,
5061 }, {
5062 .eraseblocks = { {1024 * 1024, 1} },
5063 .block_erase = erase_chip_stm50flw0x0x,
5064 }
5065 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005066 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005067 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005068 },
5069
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005070 {
5071 .vendor = "ST",
5072 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005073 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005074 .manufacture_id = ST_ID,
5075 .model_id = ST_M50FW002,
5076 .total_size = 256,
5077 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005078 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005079 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005080 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005081 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005082 .block_erasers =
5083 {
5084 {
5085 .eraseblocks = {
5086 {64 * 1024, 3},
5087 {32 * 1024, 1},
5088 {8 * 1024, 2},
5089 {16 * 1024, 1},
5090 },
5091 .block_erase = erase_block_stm50flw0x0x,
5092 }, {
5093 .eraseblocks = { {256 * 1024, 1} },
5094 .block_erase = erase_chip_stm50flw0x0x,
5095 }
5096 },
Sean Nelson35727f72010-01-28 23:55:12 +00005097 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005098 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005099 },
5100
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005101 {
5102 .vendor = "ST",
5103 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005104 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005105 .manufacture_id = ST_ID,
5106 .model_id = ST_M50FW016,
5107 .total_size = 2048,
5108 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005109 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005110 .tested = TEST_UNTESTED,
5111 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005112 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005113 .block_erasers =
5114 {
5115 {
5116 .eraseblocks = { {64 * 1024, 32}, },
5117 .block_erase = erase_block_stm50flw0x0x,
5118 }, {
5119 .eraseblocks = { {2 * 1024 * 1024, 1} },
5120 .block_erase = erase_chip_stm50flw0x0x,
5121 }
5122 },
5123 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005124 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005125 },
5126
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005127 {
5128 .vendor = "ST",
5129 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005130 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005131 .manufacture_id = ST_ID,
5132 .model_id = ST_M50FW040,
5133 .total_size = 512,
5134 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005135 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005136 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005137 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005138 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005139 .block_erasers =
5140 {
5141 {
5142 .eraseblocks = { {64 * 1024, 8}, },
5143 .block_erase = erase_block_stm50flw0x0x,
5144 }, {
5145 .eraseblocks = { {512 * 1024, 1} },
5146 .block_erase = erase_chip_stm50flw0x0x,
5147 }
5148 },
5149 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005150 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005151 },
5152
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005153 {
5154 .vendor = "ST",
5155 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005156 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005157 .manufacture_id = ST_ID,
5158 .model_id = ST_M50FW080,
5159 .total_size = 1024,
5160 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005161 .feature_bits = 0,
Sean Nelson56358aa2010-01-19 16:08:51 +00005162 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005163 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005164 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005165 .block_erasers =
5166 {
5167 {
5168 .eraseblocks = { {64 * 1024, 16}, },
5169 .block_erase = erase_block_stm50flw0x0x,
5170 }, {
5171 .eraseblocks = { {1024 * 1024, 1} },
5172 .block_erase = erase_chip_stm50flw0x0x,
5173 }
5174 },
5175 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005176 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005177 },
5178
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005179 {
5180 .vendor = "ST",
5181 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005182 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005183 .manufacture_id = ST_ID,
5184 .model_id = ST_M50LPW116,
5185 .total_size = 2048,
5186 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005187 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005188 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005189 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005190 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005191 .block_erasers =
5192 {
5193 {
5194 .eraseblocks = {
5195 {4 * 1024, 16},
5196 {64 * 1024, 30},
5197 {32 * 1024, 1},
5198 {8 * 1024, 2},
5199 {16 * 1024, 1},
5200 },
5201 .block_erase = erase_block_stm50flw0x0x,
5202 }, {
5203 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005204 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005205 }
5206 },
Sean Nelson35727f72010-01-28 23:55:12 +00005207 .write = write_stm50flw0x0x,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005208 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005209 },
5210
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005211 {
5212 .vendor = "SyncMOS",
5213 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005214 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005215 .manufacture_id = SYNCMOS_ID,
5216 .model_id = S29C31004T,
5217 .total_size = 512,
5218 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005219 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005220 .tested = TEST_UNTESTED,
5221 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005222 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005223 .block_erasers =
5224 {
5225 {
5226 .eraseblocks = { {1 * 1024, 512} },
5227 .block_erase = erase_sector_jedec,
5228 }, {
5229 .eraseblocks = { {512 * 1024, 1} },
5230 .block_erase = erase_chip_block_jedec,
5231 },
5232 },
Sean Nelson35727f72010-01-28 23:55:12 +00005233 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005234 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005235 },
5236
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005237 {
5238 .vendor = "SyncMOS",
5239 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005240 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005241 .manufacture_id = SYNCMOS_ID,
5242 .model_id = S29C51001T,
5243 .total_size = 128,
5244 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005245 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005246 .tested = TEST_UNTESTED,
5247 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005248 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005249 .block_erasers =
5250 {
5251 {
5252 .eraseblocks = { {512, 256} },
5253 .block_erase = erase_sector_jedec,
5254 }, {
5255 .eraseblocks = { {128 * 1024, 1} },
5256 .block_erase = erase_chip_block_jedec,
5257 },
5258 },
Sean Nelson35727f72010-01-28 23:55:12 +00005259 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005260 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005261 },
5262
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005263 {
5264 .vendor = "SyncMOS",
5265 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005266 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005267 .manufacture_id = SYNCMOS_ID,
5268 .model_id = S29C51002T,
5269 .total_size = 256,
5270 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005271 .feature_bits = FEATURE_EITHER_RESET,
5272 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005273 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005274 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005275 .block_erasers =
5276 {
5277 {
5278 .eraseblocks = { {512, 512} },
5279 .block_erase = erase_sector_jedec,
5280 }, {
5281 .eraseblocks = { {256 * 1024, 1} },
5282 .block_erase = erase_chip_block_jedec,
5283 },
5284 },
Sean Nelson35727f72010-01-28 23:55:12 +00005285 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005286 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005287 },
5288
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005289 {
5290 .vendor = "SyncMOS",
5291 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005292 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005293 .manufacture_id = SYNCMOS_ID,
5294 .model_id = S29C51004T,
5295 .total_size = 512,
5296 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005297 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005298 .tested = TEST_UNTESTED,
5299 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005300 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005301 .block_erasers =
5302 {
5303 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005304 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005305 .block_erase = erase_sector_jedec,
5306 }, {
5307 .eraseblocks = { {512 * 1024, 1} },
5308 .block_erase = erase_chip_block_jedec,
5309 },
5310 },
Sean Nelson35727f72010-01-28 23:55:12 +00005311 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005312 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005313 },
5314
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005315 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005316 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005317 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005318 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005319 .manufacture_id = TI_OLD_ID,
5320 .model_id = TI_TMS29F002RB,
5321 .total_size = 256,
5322 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005323 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005324 .tested = TEST_UNTESTED,
5325 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005326 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005327 .block_erasers =
5328 {
5329 {
5330 .eraseblocks = {
5331 {16 * 1024, 1},
5332 {8 * 1024, 2},
5333 {32 * 1024, 1},
5334 {64 * 1024, 3},
5335 },
5336 .block_erase = erase_sector_jedec,
5337 }, {
5338 .eraseblocks = { {256 * 1024, 1} },
5339 .block_erase = erase_chip_block_jedec,
5340 },
5341 },
Sean Nelson35727f72010-01-28 23:55:12 +00005342 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005343 .read = read_memmapped,
5344 },
5345
5346 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005347 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005348 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005349 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005350 .manufacture_id = TI_OLD_ID,
5351 .model_id = TI_TMS29F002RT,
5352 .total_size = 256,
5353 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005354 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005355 .tested = TEST_UNTESTED,
5356 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005357 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005358 .block_erasers =
5359 {
5360 {
5361 .eraseblocks = {
5362 {64 * 1024, 3},
5363 {32 * 1024, 1},
5364 {8 * 1024, 2},
5365 {16 * 1024, 1},
5366 },
5367 .block_erase = erase_sector_jedec,
5368 }, {
5369 .eraseblocks = { {256 * 1024, 1} },
5370 .block_erase = erase_chip_block_jedec,
5371 },
5372 },
Sean Nelson35727f72010-01-28 23:55:12 +00005373 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005374 .read = read_memmapped,
5375 },
5376
5377 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005378 .vendor = "Winbond",
5379 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005380 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005381 .manufacture_id = WINBOND_NEX_ID,
5382 .model_id = W_25X10,
5383 .total_size = 128,
5384 .page_size = 256,
5385 .tested = TEST_UNTESTED,
5386 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005387 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005388 .block_erasers =
5389 {
5390 {
5391 .eraseblocks = { {4 * 1024, 32} },
5392 .block_erase = spi_block_erase_20,
5393 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005394 .eraseblocks = { {64 * 1024, 2} },
5395 .block_erase = spi_block_erase_d8,
5396 }, {
5397 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005398 .block_erase = spi_block_erase_c7,
5399 }
5400 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005401 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005402 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005403 },
5404
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005405 {
5406 .vendor = "Winbond",
5407 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005408 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005409 .manufacture_id = WINBOND_NEX_ID,
5410 .model_id = W_25X20,
5411 .total_size = 256,
5412 .page_size = 256,
5413 .tested = TEST_UNTESTED,
5414 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005415 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005416 .block_erasers =
5417 {
5418 {
5419 .eraseblocks = { {4 * 1024, 64} },
5420 .block_erase = spi_block_erase_20,
5421 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005422 .eraseblocks = { {64 * 1024, 4} },
5423 .block_erase = spi_block_erase_d8,
5424 }, {
5425 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005426 .block_erase = spi_block_erase_c7,
5427 }
5428 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005429 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005430 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005431 },
5432
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005433 {
5434 .vendor = "Winbond",
5435 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005436 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005437 .manufacture_id = WINBOND_NEX_ID,
5438 .model_id = W_25X40,
5439 .total_size = 512,
5440 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005441 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005442 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005443 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005444 .block_erasers =
5445 {
5446 {
5447 .eraseblocks = { {4 * 1024, 128} },
5448 .block_erase = spi_block_erase_20,
5449 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005450 .eraseblocks = { {64 * 1024, 8} },
5451 .block_erase = spi_block_erase_d8,
5452 }, {
5453 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005454 .block_erase = spi_block_erase_c7,
5455 }
5456 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005457 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005458 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005459 },
5460
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005461 {
5462 .vendor = "Winbond",
5463 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005464 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005465 .manufacture_id = WINBOND_NEX_ID,
5466 .model_id = W_25X80,
5467 .total_size = 1024,
5468 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005469 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005470 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005471 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005472 .block_erasers =
5473 {
5474 {
5475 .eraseblocks = { {4 * 1024, 256} },
5476 .block_erase = spi_block_erase_20,
5477 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005478 .eraseblocks = { {64 * 1024, 16} },
5479 .block_erase = spi_block_erase_d8,
5480 }, {
5481 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005482 .block_erase = spi_block_erase_c7,
5483 }
5484 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005485 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005486 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005487 },
5488
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005489 {
5490 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005491 .name = "W25x16",
5492 .bustype = CHIP_BUSTYPE_SPI,
5493 .manufacture_id = WINBOND_NEX_ID,
5494 .model_id = W_25X16,
5495 .total_size = 2048,
5496 .page_size = 256,
5497 .tested = TEST_OK_PR,
5498 .probe = probe_spi_rdid,
5499 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005500 .block_erasers =
5501 {
5502 {
5503 .eraseblocks = { {4 * 1024, 512} },
5504 .block_erase = spi_block_erase_20,
5505 }, {
5506 .eraseblocks = { {32 * 1024, 64} },
5507 .block_erase = spi_block_erase_52,
5508 }, {
5509 .eraseblocks = { {64 * 1024, 32} },
5510 .block_erase = spi_block_erase_d8,
5511 }, {
5512 .eraseblocks = { {2 * 1024 * 1024, 1} },
5513 .block_erase = spi_block_erase_60,
5514 }, {
5515 .eraseblocks = { {2 * 1024 * 1024, 1} },
5516 .block_erase = spi_block_erase_c7,
5517 }
5518 },
Hector Martina721ae22009-07-11 19:39:11 +00005519 .write = spi_chip_write_256,
5520 .read = spi_chip_read,
5521 },
5522
5523 {
5524 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005525 .name = "W25x32",
5526 .bustype = CHIP_BUSTYPE_SPI,
5527 .manufacture_id = WINBOND_NEX_ID,
5528 .model_id = W_25X32,
5529 .total_size = 4096,
5530 .page_size = 256,
5531 .tested = TEST_OK_PROBE,
5532 .probe = probe_spi_rdid,
5533 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005534 .block_erasers =
5535 {
5536 {
5537 .eraseblocks = { {4 * 1024, 1024} },
5538 .block_erase = spi_block_erase_20,
5539 }, {
5540 .eraseblocks = { {32 * 1024, 128} },
5541 .block_erase = spi_block_erase_52,
5542 }, {
5543 .eraseblocks = { {64 * 1024, 64} },
5544 .block_erase = spi_block_erase_d8,
5545 }, {
5546 .eraseblocks = { {4 * 1024 * 1024, 1} },
5547 .block_erase = spi_block_erase_60,
5548 }, {
5549 .eraseblocks = { {4 * 1024 * 1024, 1} },
5550 .block_erase = spi_block_erase_c7,
5551 }
5552 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005553 .write = spi_chip_write_256,
5554 .read = spi_chip_read,
5555 },
5556
5557 {
5558 .vendor = "Winbond",
5559 .name = "W25x64",
5560 .bustype = CHIP_BUSTYPE_SPI,
5561 .manufacture_id = WINBOND_NEX_ID,
5562 .model_id = W_25X64,
5563 .total_size = 8192,
5564 .page_size = 256,
5565 .tested = TEST_UNTESTED,
5566 .probe = probe_spi_rdid,
5567 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005568 .block_erasers =
5569 {
5570 {
5571 .eraseblocks = { {4 * 1024, 2048} },
5572 .block_erase = spi_block_erase_20,
5573 }, {
5574 .eraseblocks = { {32 * 1024, 256} },
5575 .block_erase = spi_block_erase_52,
5576 }, {
5577 .eraseblocks = { {64 * 1024, 128} },
5578 .block_erase = spi_block_erase_d8,
5579 }, {
5580 .eraseblocks = { {8 * 1024 * 1024, 1} },
5581 .block_erase = spi_block_erase_60,
5582 }, {
5583 .eraseblocks = { {8 * 1024 * 1024, 1} },
5584 .block_erase = spi_block_erase_c7,
5585 }
5586 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005587 .write = spi_chip_write_256,
5588 .read = spi_chip_read,
5589 },
5590
5591 {
5592 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005593 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005594 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005595 .manufacture_id = WINBOND_ID,
5596 .model_id = W_29C011,
5597 .total_size = 128,
5598 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005599 .feature_bits = FEATURE_LONG_RESET,
5600 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005601 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005602 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005603 .block_erasers =
5604 {
5605 {
5606 .eraseblocks = { {128 * 1024, 1} },
5607 .block_erase = erase_chip_block_jedec,
5608 }
5609 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005610 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005611 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005612 },
5613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005614 {
5615 .vendor = "Winbond",
5616 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005617 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005618 .manufacture_id = WINBOND_ID,
5619 .model_id = W_29C020C,
5620 .total_size = 256,
5621 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005622 .feature_bits = FEATURE_LONG_RESET,
5623 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005624 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005625 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005626 .block_erasers =
5627 {
5628 {
5629 .eraseblocks = { {256 * 1024, 1} },
5630 .block_erase = erase_chip_block_jedec,
5631 }
5632 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005633 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005634 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005635 },
5636
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005637 {
5638 .vendor = "Winbond",
5639 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005640 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005641 .manufacture_id = WINBOND_ID,
5642 .model_id = W_29C040P,
5643 .total_size = 512,
5644 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005645 .feature_bits = FEATURE_LONG_RESET,
5646 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005647 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005648 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005649 .block_erasers =
5650 {
5651 {
5652 .eraseblocks = { {512 * 1024, 1} },
5653 .block_erase = erase_chip_block_jedec,
5654 }
5655 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005656 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005657 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005658 },
5659
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005660 {
5661 .vendor = "Winbond",
5662 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005663 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005664 .manufacture_id = WINBOND_ID,
5665 .model_id = W_29C011,
5666 .total_size = 128,
5667 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005668 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005669 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005670 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005671 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005672 .block_erasers =
5673 {
5674 {
5675 .eraseblocks = { {128 * 1024, 1} },
5676 .block_erase = erase_chip_block_jedec,
5677 }
5678 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005679 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005680 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005681 },
5682
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005683 {
5684 .vendor = "Winbond",
5685 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005686 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005687 .manufacture_id = WINBOND_ID,
5688 .model_id = W_39V040A,
5689 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005690 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005691 .feature_bits = FEATURE_EITHER_RESET,
5692 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005693 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005694 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005695 .block_erasers =
5696 {
5697 {
5698 .eraseblocks = { {64 * 1024, 8} },
5699 .block_erase = erase_sector_jedec,
5700 }, {
5701 .eraseblocks = { {512 * 1024, 1} },
5702 .block_erase = erase_chip_block_jedec,
5703 }
5704 },
Sean Nelson35727f72010-01-28 23:55:12 +00005705 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005706 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005707 },
5708
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005709 {
5710 .vendor = "Winbond",
5711 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005712 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005713 .manufacture_id = WINBOND_ID,
5714 .model_id = W_39V040B,
5715 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005716 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005717 .feature_bits = FEATURE_EITHER_RESET,
5718 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005719 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005720 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005721 .block_erasers =
5722 {
5723 {
5724 .eraseblocks = { {64 * 1024, 8} },
5725 .block_erase = erase_sector_jedec,
5726 }, {
5727 .eraseblocks = { {512 * 1024, 1} },
5728 .block_erase = erase_chip_block_jedec,
5729 }
5730 },
Sean Nelson35727f72010-01-28 23:55:12 +00005731 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005732 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005733 },
5734
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005735 {
5736 .vendor = "Winbond",
5737 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005738 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005739 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00005740 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005741 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005742 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005743 .feature_bits = FEATURE_EITHER_RESET,
5744 .tested = TEST_UNTESTED,
5745 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005746 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005747 .block_erasers =
5748 {
5749 {
5750 .eraseblocks = { {64 * 1024, 8} },
5751 .block_erase = erase_sector_jedec,
5752 }, {
5753 .eraseblocks = { {512 * 1024, 1} },
5754 .block_erase = erase_chip_block_jedec,
5755 }
5756 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005757 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00005758 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005759 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005760 },
5761
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005762 {
5763 .vendor = "Winbond",
5764 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005765 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005766 .manufacture_id = WINBOND_ID,
5767 .model_id = W_39V040FA,
5768 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005769 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005770 .feature_bits = FEATURE_EITHER_RESET,
5771 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005772 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005773 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005774 .block_erasers =
5775 {
5776 {
5777 .eraseblocks = { {4 * 1024, 128} },
5778 .block_erase = erase_block_jedec,
5779 }, {
5780 .eraseblocks = { {64 * 1024, 8} },
5781 .block_erase = erase_sector_jedec,
5782 }, {
5783 .eraseblocks = { {512 * 1024, 1} },
5784 .block_erase = erase_chip_block_jedec,
5785 }
5786 },
Sean Nelson35727f72010-01-28 23:55:12 +00005787 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005788 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005789 },
5790
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005791 {
5792 .vendor = "Winbond",
5793 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005794 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005795 .manufacture_id = WINBOND_ID,
5796 .model_id = W_39V080A,
5797 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005798 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005799 .feature_bits = FEATURE_EITHER_RESET,
5800 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005801 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005802 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005803 .block_erasers =
5804 {
5805 {
5806 .eraseblocks = { {64 * 1024, 16} },
5807 .block_erase = erase_sector_jedec,
5808 }, {
5809 .eraseblocks = { {1024 * 1024, 1} },
5810 .block_erase = erase_chip_block_jedec,
5811 }
5812 },
Sean Nelson35727f72010-01-28 23:55:12 +00005813 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005814 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005815 },
5816
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005817 {
5818 .vendor = "Winbond",
5819 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00005820 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005821 .manufacture_id = WINBOND_ID,
5822 .model_id = W_49F002U,
5823 .total_size = 256,
5824 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005825 .feature_bits = FEATURE_EITHER_RESET,
5826 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005827 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005828 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005829 .block_erasers =
5830 {
5831 {
5832 .eraseblocks = {
5833 {128 * 1024, 1},
5834 {96 * 1024, 1},
5835 {8 * 1024, 2},
5836 {16 * 1024, 1},
5837 },
5838 .block_erase = erase_sector_jedec,
5839 }, {
5840 .eraseblocks = { {256 * 1024, 1} },
5841 .block_erase = erase_chip_block_jedec,
5842 }
5843 },
Sean Nelson35727f72010-01-28 23:55:12 +00005844 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005845 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005846 },
5847
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005848 {
5849 .vendor = "Winbond",
5850 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005851 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005852 .manufacture_id = WINBOND_ID,
5853 .model_id = W_49V002A,
5854 .total_size = 256,
5855 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005856 .feature_bits = FEATURE_EITHER_RESET,
5857 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005858 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005859 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005860 .block_erasers =
5861 {
5862 {
5863 .eraseblocks = {
5864 {64 * 1024, 3},
5865 {32 * 1024, 1},
5866 {8 * 1024, 2},
5867 {16 * 1024, 1},
5868 },
5869 .block_erase = erase_sector_jedec,
5870 }, {
5871 .eraseblocks = { {256 * 1024, 1} },
5872 .block_erase = erase_chip_block_jedec,
5873 }
5874 },
Sean Nelson35727f72010-01-28 23:55:12 +00005875 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005876 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005877 },
5878
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005879 {
5880 .vendor = "Winbond",
5881 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005882 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005883 .manufacture_id = WINBOND_ID,
5884 .model_id = W_49V002FA,
5885 .total_size = 256,
5886 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005887 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005888 .tested = TEST_UNTESTED,
5889 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005890 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005891 .block_erasers =
5892 {
5893 {
5894 .eraseblocks = {
5895 {64 * 1024, 3},
5896 {32 * 1024, 1},
5897 {8 * 1024, 2},
5898 {16 * 1024, 1},
5899 },
5900 .block_erase = erase_sector_jedec,
5901 }, {
5902 .eraseblocks = { {256 * 1024, 1} },
5903 .block_erase = erase_chip_block_jedec,
5904 }
5905 },
Sean Nelson35727f72010-01-28 23:55:12 +00005906 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005907 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005908 },
5909
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005910 {
5911 .vendor = "Winbond",
5912 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005913 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005914 .manufacture_id = WINBOND_ID,
5915 .model_id = W_39V080FA,
5916 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00005917 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005918 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
5919 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005920 .probe = probe_jedec,
5921 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005922 .block_erasers =
5923 {
5924 {
5925 .eraseblocks = { {64 * 1024, 16}, },
5926 .block_erase = erase_sector_jedec,
5927 }, {
5928 .eraseblocks = { {1024 * 1024, 1} },
5929 .block_erase = erase_chip_block_jedec,
5930 }
5931 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005932 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00005933 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005934 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005935 },
5936
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005937 {
5938 .vendor = "Winbond",
5939 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005940 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005941 .manufacture_id = WINBOND_ID,
5942 .model_id = W_39V080FA_DM,
5943 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00005944 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005945 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005946 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00005947 .probe = probe_jedec,
5948 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005949 .block_erasers =
5950 {
5951 {
5952 .eraseblocks = { {64 * 1024, 8}, },
5953 .block_erase = erase_sector_jedec,
5954 }, {
5955 .eraseblocks = { {512 * 1024, 1} },
5956 .block_erase = erase_chip_block_jedec,
5957 }
5958 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00005959 .unlock = unlock_winbond_fwhub,
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 = "Atmel",
5966 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005967 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005968 .manufacture_id = ATMEL_ID,
5969 .model_id = GENERIC_DEVICE_ID,
5970 .total_size = 0,
5971 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005972 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005973 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005974 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005975 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005976 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005977 },
5978
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005979 {
5980 .vendor = "EON",
5981 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005982 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005983 .manufacture_id = EON_ID_NOPREFIX,
5984 .model_id = GENERIC_DEVICE_ID,
5985 .total_size = 0,
5986 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00005987 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005988 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005989 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005990 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005991 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00005992 },
5993
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005994 {
5995 .vendor = "Macronix",
5996 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005997 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005998 .manufacture_id = MX_ID,
5999 .model_id = GENERIC_DEVICE_ID,
6000 .total_size = 0,
6001 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006002 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006003 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006004 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006005 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006006 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006007 },
6008
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006009 {
6010 .vendor = "PMC",
6011 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006012 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006013 .manufacture_id = PMC_ID,
6014 .model_id = GENERIC_DEVICE_ID,
6015 .total_size = 0,
6016 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006017 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006018 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006019 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006020 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006021 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006022 },
6023
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006024 {
6025 .vendor = "SST",
6026 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006027 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006028 .manufacture_id = SST_ID,
6029 .model_id = GENERIC_DEVICE_ID,
6030 .total_size = 0,
6031 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006032 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006033 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006034 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006035 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006036 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006037 },
6038
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006039 {
6040 .vendor = "ST",
6041 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006042 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006043 .manufacture_id = ST_ID,
6044 .model_id = GENERIC_DEVICE_ID,
6045 .total_size = 0,
6046 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006047 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006048 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006049 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006050 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006051 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006052 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006053
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006054 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006055 .vendor = "Sanyo",
6056 .name = "unknown Sanyo SPI chip",
6057 .bustype = CHIP_BUSTYPE_SPI,
6058 .manufacture_id = SANYO_ID,
6059 .model_id = GENERIC_DEVICE_ID,
6060 .total_size = 0,
6061 .page_size = 256,
6062 .tested = TEST_BAD_PREW,
6063 .probe = probe_spi_rdid,
6064 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006065 .write = NULL,
6066 .read = NULL,
6067 },
6068
6069 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006070 .vendor = "Generic",
6071 .name = "unknown SPI chip (RDID)",
6072 .bustype = CHIP_BUSTYPE_SPI,
6073 .manufacture_id = GENERIC_MANUF_ID,
6074 .model_id = GENERIC_DEVICE_ID,
6075 .total_size = 0,
6076 .page_size = 256,
6077 .tested = TEST_BAD_PREW,
6078 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006079 .write = NULL,
6080 },
6081 {
6082 .vendor = "Generic",
6083 .name = "unknown SPI chip (REMS)",
6084 .bustype = CHIP_BUSTYPE_SPI,
6085 .manufacture_id = GENERIC_MANUF_ID,
6086 .model_id = GENERIC_DEVICE_ID,
6087 .total_size = 0,
6088 .page_size = 256,
6089 .tested = TEST_BAD_PREW,
6090 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006091 .write = NULL,
6092 },
6093
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006094 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006095};