blob: 4db89aba00f3990a39be2289940c01bf08f61725 [file] [log] [blame]
Ollie Lho184a4042005-11-26 21:55:36 +00001/*
Uwe Hermannd1107642007-08-29 17:52:32 +00002 * This file is part of the flashrom project.
Ollie Lho184a4042005-11-26 21:55:36 +00003 *
Uwe Hermannd22a1d42007-09-09 20:21:05 +00004 * Copyright (C) 2000 Silicon Integrated System Corporation
5 * Copyright (C) 2004 Tyan Corp
Stefan Reinauer4c390c82008-07-02 13:33:09 +00006 * Copyright (C) 2005-2008 coresystems GmbH <stepan@openbios.org>
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00007 * Copyright (C) 2006-2009 Carl-Daniel Hailfinger
Sean Nelsonc57a9202010-01-04 17:15:23 +00008 * Copyright (C) 2009 Sean Nelson <audiohacked@gmail.com>
Uwe Hermannd1107642007-08-29 17:52:32 +00009 *
Stefan Reinauerce532972007-05-23 17:20:56 +000010 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
Ollie Lho184a4042005-11-26 21:55:36 +000014 *
Stefan Reinauerce532972007-05-23 17:20:56 +000015 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
Ollie Lho184a4042005-11-26 21:55:36 +000019 *
Stefan Reinauerce532972007-05-23 17:20:56 +000020 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
Uwe Hermannd1107642007-08-29 17:52:32 +000022 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Ollie Lho184a4042005-11-26 21:55:36 +000023 */
24
25#include "flash.h"
Carl-Daniel Hailfinger08454642009-06-15 14:14:48 +000026#include "flashchips.h"
Sean Nelson14ba6682010-02-26 05:48:29 +000027#include "chipdrivers.h"
Ollie Lho184a4042005-11-26 21:55:36 +000028
Uwe Hermannfc425e82008-03-16 02:06:25 +000029/**
Uwe Hermanna9720402009-05-21 15:55:46 +000030 * List of supported flash chips.
Uwe Hermannfc425e82008-03-16 02:06:25 +000031 *
32 * Please keep the list sorted by vendor name and chip name, so that
33 * the output of 'flashrom -L' is alphabetically sorted.
34 */
Ollie Lho184a4042005-11-26 21:55:36 +000035struct flashchip flashchips[] = {
Uwe Hermannfc425e82008-03-16 02:06:25 +000036
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000037 /*
38 * .vendor = Vendor name
39 * .name = Chip name
40 * .bustype = Supported flash bus types (Parallel, LPC...)
41 * .manufacture_id = Manufacturer chip ID
42 * .model_id = Model chip ID
43 * .total_size = Total size in (binary) kbytes
44 * .page_size = Page or eraseblock(?) size in bytes
45 * .tested = Test status
46 * .probe = Probe function
47 * .probe_timing = Probe function delay
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +000048 * .block_erasers[] = Array of erase layouts and erase functions
49 * {
50 * .eraseblocks[] = Array of { blocksize, blockcount }
51 * .block_erase = Block erase function
52 * }
Sean Nelson6e0b9122010-02-19 00:52:10 +000053 * .printlock = Chip lock status function
54 * .unlock = Chip unlock function
Carl-Daniel Hailfinger21eedec2009-07-23 12:42:01 +000055 * .write = Chip write function
56 * .read = Chip read function
FENG yu ningff692fb2008-12-08 18:15:10 +000057 */
58
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000059 {
60 .vendor = "AMD",
Uwe Hermanna8b37272009-06-19 15:54:39 +000061 .name = "Am29F010A/B",
62 .bustype = CHIP_BUSTYPE_PARALLEL,
63 .manufacture_id = AMD_ID,
64 .model_id = AM_29F010B, /* Same as Am29F010A */
65 .total_size = 128,
66 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +000067 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
68 .tested = TEST_UNTESTED,
69 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000070 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000071 .block_erasers =
72 {
73 {
74 .eraseblocks = { {16 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +000075 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000076 }, {
77 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +000078 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +000079 },
80 },
Sean Nelson35727f72010-01-28 23:55:12 +000081 .write = write_jedec_1,
Uwe Hermanna8b37272009-06-19 15:54:39 +000082 .read = read_memmapped,
83 },
84
85 {
86 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000087 .name = "Am29F002(N)BB",
Urja Rannikko038a3122009-06-28 19:19:25 +000088 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000089 .manufacture_id = AMD_ID,
90 .model_id = AM_29F002BB,
91 .total_size = 256,
92 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +000093 .feature_bits = FEATURE_SHORT_RESET | FEATURE_ADDR_2AA,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +000094 .tested = TEST_UNTESTED,
95 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +000096 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +000097 .block_erasers =
98 {
99 {
100 .eraseblocks = {
101 {16 * 1024, 1},
102 {8 * 1024, 2},
103 {32 * 1024, 1},
104 {64 * 1024, 3},
105 },
106 .block_erase = erase_sector_jedec,
107 }, {
108 .eraseblocks = { {256 * 1024, 1} },
109 .block_erase = erase_chip_block_jedec,
110 },
111 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000112 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000113 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000114 },
115
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000116 {
117 .vendor = "AMD",
118 .name = "Am29F002(N)BT",
Urja Rannikko038a3122009-06-28 19:19:25 +0000119 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000120 .manufacture_id = AMD_ID,
121 .model_id = AM_29F002BT,
122 .total_size = 256,
123 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000124 .feature_bits = FEATURE_EITHER_RESET | FEATURE_ADDR_2AA,
125 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000126 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000127 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000128 .block_erasers =
129 {
130 {
131 .eraseblocks = {
132 {64 * 1024, 3},
133 {32 * 1024, 1},
134 {8 * 1024, 2},
135 {16 * 1024, 1},
136 },
137 .block_erase = erase_sector_jedec,
138 }, {
139 .eraseblocks = { {256 * 1024, 1} },
140 .block_erase = erase_chip_block_jedec,
141 },
142 },
Michael Karcher1c296ca2009-11-27 17:49:42 +0000143 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000144 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000145 },
146
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000147 {
148 .vendor = "AMD",
149 .name = "Am29F016D",
Urja Rannikko038a3122009-06-28 19:19:25 +0000150 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000151 .manufacture_id = AMD_ID,
152 .model_id = AM_29F016D,
Sean Nelson72a9a022009-12-22 22:15:33 +0000153 .total_size = 2 * 1024,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000154 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000155 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000156 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000157 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000158 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000159 .block_erasers =
160 {
161 {
162 .eraseblocks = { {64 * 1024, 32} },
Sean Nelson35727f72010-01-28 23:55:12 +0000163 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000164 }, {
165 .eraseblocks = { {2048 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000166 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000167 },
168 },
Sean Nelson35727f72010-01-28 23:55:12 +0000169 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000170 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000171 },
172
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000173 {
174 .vendor = "AMD",
175 .name = "Am29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000176 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000177 .manufacture_id = AMD_ID,
178 .model_id = AM_29F040B,
179 .total_size = 512,
180 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000181 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
182 .tested = TEST_UNTESTED,
183 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000184 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000185 .block_erasers =
186 {
187 {
188 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000189 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000190 }, {
191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000192 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000193 },
194 },
Sean Nelson35727f72010-01-28 23:55:12 +0000195 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000196 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000197 },
198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000199 {
200 .vendor = "AMD",
Peter Stuge8440cc02009-01-25 23:55:12 +0000201 .name = "Am29F080B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000202 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000203 .manufacture_id = AMD_ID,
204 .model_id = AM_29F080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000205 .total_size = 1024,
206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000208 .tested = TEST_UNTESTED,
209 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +0000210 .probe_timing = TIMING_ZERO,
Sean Nelson72a9a022009-12-22 22:15:33 +0000211 .block_erasers =
212 {
213 {
214 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000215 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000216 }, {
217 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000218 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000219 },
220 },
Sean Nelson35727f72010-01-28 23:55:12 +0000221 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000222 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000223 },
224
225 {
226 .vendor = "AMD",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000227 .name = "Am29LV040B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000228 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000229 .manufacture_id = AMD_ID,
230 .model_id = AM_29LV040B,
231 .total_size = 512,
232 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000233 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000234 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000235 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000236 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000237 .block_erasers =
238 {
239 {
240 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +0000241 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000242 }, {
243 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000244 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000245 },
246 },
Sean Nelson35727f72010-01-28 23:55:12 +0000247 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000248 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000249 },
250
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000251 {
Peter Stuge8440cc02009-01-25 23:55:12 +0000252 .vendor = "AMD",
253 .name = "Am29LV081B",
Urja Rannikko038a3122009-06-28 19:19:25 +0000254 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawski5bae4382009-06-02 00:38:14 +0000255 .manufacture_id = AMD_ID,
Carl-Daniel Hailfinger6d5d2532009-08-10 10:14:23 +0000256 .model_id = AM_29LV080B,
Peter Stuge8440cc02009-01-25 23:55:12 +0000257 .total_size = 1024,
258 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +0000259 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +0000260 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +0000261 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000262 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +0000263 .block_erasers =
264 {
265 {
266 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson35727f72010-01-28 23:55:12 +0000267 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000268 }, {
269 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +0000270 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +0000271 },
272 },
Sean Nelson35727f72010-01-28 23:55:12 +0000273 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000274 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +0000275 },
276
277 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000278 .vendor = "ASD",
279 .name = "AE49F2008",
Urja Rannikko038a3122009-06-28 19:19:25 +0000280 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000281 .manufacture_id = ASD_ID,
282 .model_id = ASD_AE49F2008,
283 .total_size = 256,
284 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000285 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000286 .tested = TEST_UNTESTED,
287 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000288 .probe_timing = TIMING_FIXME,
Sean Nelson54596372010-01-09 05:30:14 +0000289 .block_erasers =
290 {
291 {
292 .eraseblocks = {
293 {128 * 1024, 1},
294 {96 * 1024, 1},
295 {8 * 1024, 2},
296 {16 * 1024, 1},
297 },
298 .block_erase = erase_sector_jedec,
299 }, {
300 .eraseblocks = { {256 * 1024, 1} },
301 .block_erase = erase_chip_block_jedec,
302 }
303 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000304 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000305 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000306 },
307
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000308 {
309 .vendor = "Atmel",
310 .name = "AT25DF021",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000311 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000312 .manufacture_id = ATMEL_ID,
313 .model_id = AT_25DF021,
314 .total_size = 256,
315 .page_size = 256,
316 .tested = TEST_UNTESTED,
317 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000318 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000319 .block_erasers =
320 {
321 {
322 .eraseblocks = { {4 * 1024, 64} },
323 .block_erase = spi_block_erase_20,
324 }, {
325 .eraseblocks = { {32 * 1024, 8} },
326 .block_erase = spi_block_erase_52,
327 }, {
328 .eraseblocks = { {64 * 1024, 4} },
329 .block_erase = spi_block_erase_d8,
330 }, {
331 .eraseblocks = { {256 * 1024, 1} },
332 .block_erase = spi_block_erase_60,
333 }, {
334 .eraseblocks = { {256 * 1024, 1} },
335 .block_erase = spi_block_erase_c7,
336 }
337 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000338 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000339 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000340 },
341
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000342 {
343 .vendor = "Atmel",
344 .name = "AT25DF041A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000345 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000346 .manufacture_id = ATMEL_ID,
347 .model_id = AT_25DF041A,
348 .total_size = 512,
349 .page_size = 256,
350 .tested = TEST_UNTESTED,
351 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000352 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000353 .block_erasers =
354 {
355 {
356 .eraseblocks = { {4 * 1024, 128} },
357 .block_erase = spi_block_erase_20,
358 }, {
359 .eraseblocks = { {32 * 1024, 16} },
360 .block_erase = spi_block_erase_52,
361 }, {
362 .eraseblocks = { {64 * 1024, 8} },
363 .block_erase = spi_block_erase_d8,
364 }, {
365 .eraseblocks = { {512 * 1024, 1} },
366 .block_erase = spi_block_erase_60,
367 }, {
368 .eraseblocks = { {512 * 1024, 1} },
369 .block_erase = spi_block_erase_c7,
370 }
371 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000372 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000373 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000374 },
375
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000376 {
377 .vendor = "Atmel",
378 .name = "AT25DF081",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000379 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000380 .manufacture_id = ATMEL_ID,
381 .model_id = AT_25DF081,
382 .total_size = 1024,
383 .page_size = 256,
384 .tested = TEST_UNTESTED,
385 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000386 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000387 .block_erasers =
388 {
389 {
390 .eraseblocks = { {4 * 1024, 256} },
391 .block_erase = spi_block_erase_20,
392 }, {
393 .eraseblocks = { {32 * 1024, 32} },
394 .block_erase = spi_block_erase_52,
395 }, {
396 .eraseblocks = { {64 * 1024, 16} },
397 .block_erase = spi_block_erase_d8,
398 }, {
399 .eraseblocks = { {1024 * 1024, 1} },
400 .block_erase = spi_block_erase_60,
401 }, {
402 .eraseblocks = { {1024 * 1024, 1} },
403 .block_erase = spi_block_erase_c7,
404 }
405 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000406 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000407 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000408 },
409
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000410 {
411 .vendor = "Atmel",
412 .name = "AT25DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000413 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000414 .manufacture_id = ATMEL_ID,
415 .model_id = AT_25DF161,
416 .total_size = 2048,
417 .page_size = 256,
418 .tested = TEST_UNTESTED,
419 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000420 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000421 .block_erasers =
422 {
423 {
424 .eraseblocks = { {4 * 1024, 512} },
425 .block_erase = spi_block_erase_20,
426 }, {
427 .eraseblocks = { {32 * 1024, 64} },
428 .block_erase = spi_block_erase_52,
429 }, {
430 .eraseblocks = { {64 * 1024, 32} },
431 .block_erase = spi_block_erase_d8,
432 }, {
433 .eraseblocks = { {2 * 1024 * 1024, 1} },
434 .block_erase = spi_block_erase_60,
435 }, {
436 .eraseblocks = { {2 * 1024 * 1024, 1} },
437 .block_erase = spi_block_erase_c7,
438 }
439 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000440 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000441 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000442 },
443
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000444 {
445 .vendor = "Atmel",
446 .name = "AT25DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000447 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000448 .manufacture_id = ATMEL_ID,
449 .model_id = AT_25DF321,
450 .total_size = 4096,
451 .page_size = 256,
Sean Nelson89187292009-12-23 12:02:55 +0000452 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000453 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000454 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000455 .block_erasers =
456 {
457 {
458 .eraseblocks = { {4 * 1024, 1024} },
459 .block_erase = spi_block_erase_20,
460 }, {
461 .eraseblocks = { {32 * 1024, 128} },
462 .block_erase = spi_block_erase_52,
463 }, {
464 .eraseblocks = { {64 * 1024, 64} },
465 .block_erase = spi_block_erase_d8,
466 }, {
467 .eraseblocks = { {4 * 1024 * 1024, 1} },
468 .block_erase = spi_block_erase_60,
469 }, {
470 .eraseblocks = { {4 * 1024 * 1024, 1} },
471 .block_erase = spi_block_erase_c7,
472 }
473 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000474 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000475 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000476 },
477
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000478 {
479 .vendor = "Atmel",
480 .name = "AT25DF321A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000481 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000482 .manufacture_id = ATMEL_ID,
483 .model_id = AT_25DF321A,
484 .total_size = 4096,
485 .page_size = 256,
486 .tested = TEST_UNTESTED,
487 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000488 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000489 .block_erasers =
490 {
491 {
492 .eraseblocks = { {4 * 1024, 1024} },
493 .block_erase = spi_block_erase_20,
494 }, {
495 .eraseblocks = { {32 * 1024, 128} },
496 .block_erase = spi_block_erase_52,
497 }, {
498 .eraseblocks = { {64 * 1024, 64} },
499 .block_erase = spi_block_erase_d8,
500 }, {
501 .eraseblocks = { {4 * 1024 * 1024, 1} },
502 .block_erase = spi_block_erase_60,
503 }, {
504 .eraseblocks = { {4 * 1024 * 1024, 1} },
505 .block_erase = spi_block_erase_c7,
506 }
507 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000508 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000509 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000510 },
511
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000512 {
513 .vendor = "Atmel",
514 .name = "AT25DF641",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000515 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000516 .manufacture_id = ATMEL_ID,
517 .model_id = AT_25DF641,
518 .total_size = 8192,
519 .page_size = 256,
520 .tested = TEST_UNTESTED,
521 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000522 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000523 .block_erasers =
524 {
525 {
526 .eraseblocks = { {4 * 1024, 2048} },
527 .block_erase = spi_block_erase_20,
528 }, {
529 .eraseblocks = { {32 * 1024, 256} },
530 .block_erase = spi_block_erase_52,
531 }, {
532 .eraseblocks = { {64 * 1024, 128} },
533 .block_erase = spi_block_erase_d8,
534 }, {
535 .eraseblocks = { {8 * 1024 * 1024, 1} },
536 .block_erase = spi_block_erase_60,
537 }, {
538 .eraseblocks = { {8 * 1024 * 1024, 1} },
539 .block_erase = spi_block_erase_c7,
540 }
541 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000542 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000543 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000544 },
545
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000546 {
547 .vendor = "Atmel",
548 .name = "AT25F512B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000549 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000550 .manufacture_id = ATMEL_ID,
551 .model_id = AT_25F512B,
552 .total_size = 64,
553 .page_size = 256,
554 .tested = TEST_UNTESTED,
555 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000556 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000557 .block_erasers =
558 {
559 {
560 .eraseblocks = { {4 * 1024, 16} },
561 .block_erase = spi_block_erase_20,
562 }, {
563 .eraseblocks = { {32 * 1024, 2} },
564 .block_erase = spi_block_erase_52,
565 }, {
566 .eraseblocks = { {32 * 1024, 2} },
567 .block_erase = spi_block_erase_d8,
568 }, {
569 .eraseblocks = { {64 * 1024, 1} },
570 .block_erase = spi_block_erase_60,
571 }, {
572 .eraseblocks = { {64 * 1024, 1} },
573 .block_erase = spi_block_erase_c7,
574 }
575 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000576 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000577 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000578 },
579
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000580 {
581 .vendor = "Atmel",
582 .name = "AT25FS010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000583 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000584 .manufacture_id = ATMEL_ID,
585 .model_id = AT_25FS010,
586 .total_size = 128,
587 .page_size = 256,
588 .tested = TEST_UNTESTED,
589 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000590 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000591 .block_erasers =
592 {
593 {
594 .eraseblocks = { {4 * 1024, 32} },
595 .block_erase = spi_block_erase_20,
596 }, {
597 .eraseblocks = { {32 * 1024, 4} },
598 .block_erase = spi_block_erase_52,
599 }, {
600 .eraseblocks = { {32 * 1024, 4} },
601 .block_erase = spi_block_erase_d8,
602 }, {
603 .eraseblocks = { {128 * 1024, 1} },
604 .block_erase = spi_block_erase_60,
605 }, {
606 .eraseblocks = { {128 * 1024, 1} },
607 .block_erase = spi_block_erase_c7,
608 }
609 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000610 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000611 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000612 },
613
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000614 {
615 .vendor = "Atmel",
616 .name = "AT25FS040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000617 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000618 .manufacture_id = ATMEL_ID,
619 .model_id = AT_25FS040,
620 .total_size = 512,
621 .page_size = 256,
622 .tested = TEST_UNTESTED,
623 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000624 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000625 .block_erasers =
626 {
627 {
628 .eraseblocks = { {4 * 1024, 128} },
629 .block_erase = spi_block_erase_20,
630 }, {
631 .eraseblocks = { {64 * 1024, 8} },
632 .block_erase = spi_block_erase_52,
633 }, {
634 .eraseblocks = { {64 * 1024, 8} },
635 .block_erase = spi_block_erase_d8,
636 }, {
637 .eraseblocks = { {512 * 1024, 1} },
638 .block_erase = spi_block_erase_60,
639 }, {
640 .eraseblocks = { {512 * 1024, 1} },
641 .block_erase = spi_block_erase_c7,
642 }
643 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000644 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000645 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000646 },
647
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000648 {
649 .vendor = "Atmel",
650 .name = "AT26DF041",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000651 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000652 .manufacture_id = ATMEL_ID,
653 .model_id = AT_26DF041,
654 .total_size = 512,
655 .page_size = 256,
656 .tested = TEST_UNTESTED,
657 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000658 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000659 .block_erasers =
660 {
661 {
662 .eraseblocks = { {4 * 1024, 128} },
663 .block_erase = spi_block_erase_20,
664 }
665 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000666 .write = NULL /* Incompatible Page write */,
667 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000668 },
669
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000670 {
671 .vendor = "Atmel",
672 .name = "AT26DF081A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000673 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000674 .manufacture_id = ATMEL_ID,
675 .model_id = AT_26DF081A,
676 .total_size = 1024,
677 .page_size = 256,
678 .tested = TEST_UNTESTED,
679 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000680 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000681 .block_erasers =
682 {
683 {
684 .eraseblocks = { {4 * 1024, 256} },
685 .block_erase = spi_block_erase_20,
686 }, {
687 .eraseblocks = { {32 * 1024, 32} },
688 .block_erase = spi_block_erase_52,
689 }, {
690 .eraseblocks = { {64 * 1024, 16} },
691 .block_erase = spi_block_erase_d8,
692 }, {
693 .eraseblocks = { {1024 * 1024, 1} },
694 .block_erase = spi_block_erase_60,
695 }, {
696 .eraseblocks = { {1024 * 1024, 1} },
697 .block_erase = spi_block_erase_c7,
698 }
699 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000700 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000701 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000702 },
703
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000704 {
705 .vendor = "Atmel",
706 .name = "AT26DF161",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000707 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000708 .manufacture_id = ATMEL_ID,
709 .model_id = AT_26DF161,
710 .total_size = 2048,
711 .page_size = 256,
712 .tested = TEST_UNTESTED,
713 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000714 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000715 .block_erasers =
716 {
717 {
718 .eraseblocks = { {4 * 1024, 512} },
719 .block_erase = spi_block_erase_20,
720 }, {
721 .eraseblocks = { {32 * 1024, 64} },
722 .block_erase = spi_block_erase_52,
723 }, {
724 .eraseblocks = { {64 * 1024, 32} },
725 .block_erase = spi_block_erase_d8,
726 }, {
727 .eraseblocks = { {2 * 1024 * 1024, 1} },
728 .block_erase = spi_block_erase_60,
729 }, {
730 .eraseblocks = { {2 * 1024 * 1024, 1} },
731 .block_erase = spi_block_erase_c7,
732 }
733 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000734 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000735 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000736 },
737
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000738 {
739 .vendor = "Atmel",
740 .name = "AT26DF161A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000741 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000742 .manufacture_id = ATMEL_ID,
743 .model_id = AT_26DF161A,
744 .total_size = 2048,
745 .page_size = 256,
746 .tested = TEST_UNTESTED,
747 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000748 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000749 .block_erasers =
750 {
751 {
752 .eraseblocks = { {4 * 1024, 512} },
753 .block_erase = spi_block_erase_20,
754 }, {
755 .eraseblocks = { {32 * 1024, 64} },
756 .block_erase = spi_block_erase_52,
757 }, {
758 .eraseblocks = { {64 * 1024, 32} },
759 .block_erase = spi_block_erase_d8,
760 }, {
761 .eraseblocks = { {2 * 1024 * 1024, 1} },
762 .block_erase = spi_block_erase_60,
763 }, {
764 .eraseblocks = { {2 * 1024 * 1024, 1} },
765 .block_erase = spi_block_erase_c7,
766 }
767 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000768 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000769 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000770 },
771
772 /*The AT26DF321 has the same ID as the AT25DF321. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000773 /*{
774 .vendor = "Atmel",
775 .name = "AT26DF321",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000776 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000777 .manufacture_id = ATMEL_ID,
778 .model_id = AT_26DF321,
779 .total_size = 4096,
780 .page_size = 256,
781 .tested = TEST_UNTESTED,
782 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000783 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +0000784 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000785 .read = spi_chip_read,
786 },*/
FENG yu ningff692fb2008-12-08 18:15:10 +0000787
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000788 {
789 .vendor = "Atmel",
790 .name = "AT26F004",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000791 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000792 .manufacture_id = ATMEL_ID,
793 .model_id = AT_26F004,
794 .total_size = 512,
795 .page_size = 256,
796 .tested = TEST_UNTESTED,
797 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000798 .probe_timing = TIMING_ZERO,
Sean Nelson89187292009-12-23 12:02:55 +0000799 .block_erasers =
800 {
801 {
802 .eraseblocks = { {4 * 1024, 128} },
803 .block_erase = spi_block_erase_20,
804 }, {
805 .eraseblocks = { {32 * 1024, 16} },
806 .block_erase = spi_block_erase_52,
807 }, {
808 .eraseblocks = { {64 * 1024, 8} },
809 .block_erase = spi_block_erase_d8,
810 }, {
811 .eraseblocks = { {512 * 1024, 1} },
812 .block_erase = spi_block_erase_60,
813 }, {
814 .eraseblocks = { {512 * 1024, 1} },
815 .block_erase = spi_block_erase_c7,
816 }
817 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000818 .write = NULL /* Incompatible Page write */,
819 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +0000820 },
821
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000822 {
823 .vendor = "Atmel",
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000824 .name = "AT29C512",
Urja Rannikko038a3122009-06-28 19:19:25 +0000825 .bustype = CHIP_BUSTYPE_PARALLEL,
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000826 .manufacture_id = ATMEL_ID,
827 .model_id = AT_29C512,
828 .total_size = 64,
829 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000830 .feature_bits = FEATURE_LONG_RESET,
831 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +0000832 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000833 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000834 .block_erasers =
835 {
836 {
837 .eraseblocks = { {64 * 1024, 1} },
838 .block_erase = erase_chip_block_jedec,
839 }
840 },
Maciej Pijankabc2bbd22009-06-02 16:45:59 +0000841 .write = write_jedec,
842 .read = read_memmapped,
843
844 },
845
846 {
847 .vendor = "Atmel",
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000848 .name = "AT29C010A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000849 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000850 .manufacture_id = ATMEL_ID,
851 .model_id = AT_29C010A,
852 .total_size = 128,
853 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +0000854 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +0000855 .tested = TEST_OK_PREW,
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000856 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +0000857 .probe_timing = 10000, /* 10mS, Enter=Exec */
Sean Nelson89187292009-12-23 12:02:55 +0000858 .block_erasers =
859 {
860 {
861 .eraseblocks = { {128 * 1024, 1} },
862 .block_erase = erase_chip_block_jedec,
863 }
864 },
Uwe Hermann8403ccb2009-05-16 21:39:19 +0000865 .write = write_jedec, /* FIXME */
866 .read = read_memmapped,
867 },
868
869 {
870 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000871 .name = "AT29C020",
Urja Rannikko161b8852009-06-05 08:47:37 +0000872 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000873 .manufacture_id = ATMEL_ID,
874 .model_id = AT_29C020,
875 .total_size = 256,
876 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000877 .feature_bits = FEATURE_LONG_RESET,
878 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000879 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000880 .probe_timing = 10000, /* 10ms */
Sean Nelson89187292009-12-23 12:02:55 +0000881 .block_erasers =
882 {
883 {
884 .eraseblocks = { {256 * 1024, 1} },
885 .block_erase = erase_chip_block_jedec,
886 }
887 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000888 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000889 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000890 },
891
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000892 {
893 .vendor = "Atmel",
894 .name = "AT29C040A",
Urja Rannikko161b8852009-06-05 08:47:37 +0000895 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000896 .manufacture_id = ATMEL_ID,
897 .model_id = AT_29C040A,
898 .total_size = 512,
899 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +0000900 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000901 .tested = TEST_UNTESTED,
902 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +0000903 .probe_timing = 10000, /* 10 ms */
Sean Nelson89187292009-12-23 12:02:55 +0000904 .block_erasers =
905 {
906 {
907 .eraseblocks = { {512 * 1024, 1} },
908 .block_erase = erase_chip_block_jedec,
909 }
910 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000911 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +0000912 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +0000913 },
914
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000915 {
916 .vendor = "Atmel",
917 .name = "AT45CS1282",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000918 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000919 .manufacture_id = ATMEL_ID,
920 .model_id = AT_45CS1282,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000921 .total_size = 16896 /* No power of two sizes */,
922 .page_size = 1056 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000923 .tested = TEST_BAD_READ,
924 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000925 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000926 .write = NULL /* Incompatible Page write */,
927 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000928 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000929
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000930 {
931 .vendor = "Atmel",
932 .name = "AT45DB011D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000933 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000934 .manufacture_id = ATMEL_ID,
935 .model_id = AT_45DB011D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000936 .total_size = 128 /* Size can only be determined from status register */,
937 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000938 .tested = TEST_BAD_READ,
939 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000940 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000941 .write = NULL,
942 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000943 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000944
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000945 {
946 .vendor = "Atmel",
947 .name = "AT45DB021D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000948 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000949 .manufacture_id = ATMEL_ID,
950 .model_id = AT_45DB021D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000951 .total_size = 256 /* Size can only be determined from status register */,
952 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000953 .tested = TEST_BAD_READ,
954 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000955 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000956 .write = NULL,
957 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000958 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000959
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000960 {
961 .vendor = "Atmel",
962 .name = "AT45DB041D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000963 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000964 .manufacture_id = ATMEL_ID,
965 .model_id = AT_45DB041D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000966 .total_size = 512 /* Size can only be determined from status register */,
967 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000968 .tested = TEST_BAD_READ,
969 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000970 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000971 .write = NULL,
972 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000973 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000974
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000975 {
976 .vendor = "Atmel",
977 .name = "AT45DB081D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000978 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000979 .manufacture_id = ATMEL_ID,
980 .model_id = AT_45DB081D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000981 .total_size = 1024 /* Size can only be determined from status register */,
982 .page_size = 256 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000983 .tested = TEST_BAD_READ,
984 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +0000985 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000986 .write = NULL,
987 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000988 },
FENG yu ningff692fb2008-12-08 18:15:10 +0000989
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000990 {
991 .vendor = "Atmel",
992 .name = "AT45DB161D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +0000993 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000994 .manufacture_id = ATMEL_ID,
995 .model_id = AT_45DB161D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +0000996 .total_size = 2048 /* Size can only be determined from status register */,
997 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +0000998 .tested = TEST_BAD_READ,
999 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001000 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001001 .write = NULL,
1002 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001003 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001004
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001005 {
1006 .vendor = "Atmel",
1007 .name = "AT45DB321C",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001008 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001009 .manufacture_id = ATMEL_ID,
1010 .model_id = AT_45DB321C,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001011 .total_size = 4224 /* No power of two sizes */,
1012 .page_size = 528 /* No power of two sizes */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001013 .tested = TEST_BAD_READ,
1014 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001015 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001016 .write = NULL,
1017 .read = NULL /* Incompatible read */,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001018 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001019
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001020 {
1021 .vendor = "Atmel",
1022 .name = "AT45DB321D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001023 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001024 .manufacture_id = ATMEL_ID,
1025 .model_id = AT_45DB321D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001026 .total_size = 4096 /* Size can only be determined from status register */,
1027 .page_size = 512 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001028 .tested = TEST_BAD_READ,
1029 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001030 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001031 .write = NULL,
1032 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001033 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001034
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001035 {
1036 .vendor = "Atmel",
1037 .name = "AT45DB642D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001038 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001039 .manufacture_id = ATMEL_ID,
1040 .model_id = AT_45DB642D,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001041 .total_size = 8192 /* Size can only be determined from status register */,
1042 .page_size = 1024 /* Size can only be determined from status register */,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001043 .tested = TEST_BAD_READ,
1044 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001045 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001046 .write = NULL,
1047 .read = NULL,
Carl-Daniel Hailfinger66afb362009-03-19 12:18:13 +00001048 },
FENG yu ningff692fb2008-12-08 18:15:10 +00001049
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001050 {
1051 .vendor = "Atmel",
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001052 .name = "AT49BV512",
Urja Rannikko161b8852009-06-05 08:47:37 +00001053 .bustype = CHIP_BUSTYPE_PARALLEL,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001054 .manufacture_id = ATMEL_ID,
1055 .model_id = AT_49BV512,
1056 .total_size = 64,
1057 .page_size = 64,
Sean Nelson35727f72010-01-28 23:55:12 +00001058 .feature_bits = FEATURE_EITHER_RESET,
1059 .tested = TEST_UNTESTED,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001060 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001061 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001062 .block_erasers =
1063 {
1064 {
1065 .eraseblocks = { {64 * 1024, 1} },
1066 .block_erase = erase_chip_block_jedec,
1067 }
1068 },
Sean Nelson35727f72010-01-28 23:55:12 +00001069 .write = write_jedec_1,
Uwe Hermannb4dcb712009-05-13 11:36:06 +00001070 .read = read_memmapped,
1071 },
1072
1073 {
1074 .vendor = "Atmel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001075 .name = "AT49F002(N)",
Urja Rannikko161b8852009-06-05 08:47:37 +00001076 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001077 .manufacture_id = ATMEL_ID,
1078 .model_id = AT_49F002N,
1079 .total_size = 256,
1080 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001081 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001082 .tested = TEST_UNTESTED,
1083 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001084 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001085 .block_erasers =
1086 {
1087 {
1088 .eraseblocks = {
1089 {16 * 1024, 1},
1090 {8 * 1024, 2},
1091 {96 * 1024, 1},
1092 {128 * 1024, 1},
1093 },
1094 .block_erase = erase_sector_jedec,
1095 }, {
1096 .eraseblocks = { {256 * 1024, 1} },
1097 .block_erase = erase_chip_block_jedec,
1098 }
1099 },
Sean Nelson35727f72010-01-28 23:55:12 +00001100 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001101 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001102 },
1103
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001104 {
1105 .vendor = "Atmel",
1106 .name = "AT49F002(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00001107 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001108 .manufacture_id = ATMEL_ID,
1109 .model_id = AT_49F002NT,
1110 .total_size = 256,
1111 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00001112 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001113 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001114 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00001115 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson89187292009-12-23 12:02:55 +00001116 .block_erasers =
1117 {
1118 {
1119 .eraseblocks = {
1120 {128 * 1024, 1},
1121 {96 * 1024, 1},
1122 {8 * 1024, 2},
1123 {16 * 1024, 1},
1124 },
1125 .block_erase = erase_sector_jedec,
1126 }, {
1127 .eraseblocks = { {256 * 1024, 1} },
1128 .block_erase = erase_chip_block_jedec,
1129 }
1130 },
Sean Nelson35727f72010-01-28 23:55:12 +00001131 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001132 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001133 },
1134
Sean Nelson54596372010-01-09 05:30:14 +00001135 /* The next two chip definitions have top/bottom boot blocks, but has no
Uwe Hermann4e3d0b32010-03-25 23:18:41 +00001136 device differentiation between the two */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001137 {
1138 .vendor = "AMIC",
Sean Nelson54596372010-01-09 05:30:14 +00001139 .name = "A25L40PT",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00001140 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001141 .manufacture_id = AMIC_ID,
1142 .model_id = AMIC_A25L40P,
1143 .total_size = 512,
1144 .page_size = 256,
Sean Nelson54596372010-01-09 05:30:14 +00001145 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001146 .probe = probe_spi_rdid4,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00001147 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001148 .block_erasers =
1149 {
1150 {
1151 .eraseblocks = {
1152 {64 * 1024, 7},
1153 {32 * 1024, 1},
1154 {16 * 1024, 1},
1155 {8 * 1024, 1},
1156 {4 * 1024, 2},
1157 },
1158 .block_erase = spi_block_erase_d8,
1159 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001160 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001161 .block_erase = spi_block_erase_c7,
1162 }
1163 },
1164 .write = spi_chip_write_256,
1165 .read = spi_chip_read,
1166 },
1167
1168 {
1169 .vendor = "AMIC",
1170 .name = "A25L40PU",
1171 .bustype = CHIP_BUSTYPE_SPI,
1172 .manufacture_id = AMIC_ID,
1173 .model_id = AMIC_A25L40P,
1174 .total_size = 512,
1175 .page_size = 256,
1176 .tested = TEST_OK_PRW,
1177 .probe = probe_spi_rdid4,
1178 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00001179 .block_erasers =
1180 {
1181 {
1182 .eraseblocks = {
1183 {4 * 1024, 2},
1184 {8 * 1024, 1},
1185 {16 * 1024, 1},
1186 {32 * 1024, 1},
1187 {64 * 1024, 7},
1188 },
1189 .block_erase = spi_block_erase_d8,
1190 }, {
Sean Nelson2aff7aa2010-01-18 08:24:02 +00001191 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson54596372010-01-09 05:30:14 +00001192 .block_erase = spi_block_erase_c7,
1193 }
1194 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00001195 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001196 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00001197 },
1198
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001199 {
1200 .vendor = "AMIC",
1201 .name = "A29002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00001202 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001203 .manufacture_id = AMIC_ID_NOPREFIX,
1204 .model_id = AMIC_A29002B,
1205 .total_size = 256,
1206 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001207 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001208 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00001209 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001210 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001211 .block_erasers =
1212 {
1213 {
1214 .eraseblocks = {
1215 {16 * 1024, 1},
1216 {8 * 1024, 2},
1217 {32 * 1024, 1},
1218 {64 * 1024, 3},
1219 },
Sean Nelson35727f72010-01-28 23:55:12 +00001220 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001221 }, {
1222 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001223 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001224 },
1225 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001226 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001227 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001228 },
1229
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001230 {
1231 .vendor = "AMIC",
1232 .name = "A29002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00001233 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001234 .manufacture_id = AMIC_ID_NOPREFIX,
1235 .model_id = AMIC_A29002T,
1236 .total_size = 256,
1237 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001238 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00001239 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00001240 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001241 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00001242 .block_erasers =
1243 {
1244 {
1245 .eraseblocks = {
1246 {64 * 1024, 3},
1247 {32 * 1024, 1},
1248 {8 * 1024, 2},
1249 {16 * 1024, 1},
1250 },
Sean Nelson35727f72010-01-28 23:55:12 +00001251 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001252 }, {
1253 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001254 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00001255 },
1256 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00001257 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001258 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001259 },
1260
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001261 {
1262 .vendor = "AMIC",
1263 .name = "A29040B",
Urja Rannikko161b8852009-06-05 08:47:37 +00001264 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001265 .manufacture_id = AMIC_ID_NOPREFIX,
1266 .model_id = AMIC_A29040B,
1267 .total_size = 512,
1268 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001269 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
1270 .tested = TEST_UNTESTED,
1271 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00001272 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson72a9a022009-12-22 22:15:33 +00001273 .block_erasers =
1274 {
1275 {
1276 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson35727f72010-01-28 23:55:12 +00001277 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001278 }, {
1279 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00001280 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00001281 },
1282 },
Sean Nelson35727f72010-01-28 23:55:12 +00001283 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00001284 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00001285 },
1286
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001287 {
1288 .vendor = "AMIC",
1289 .name = "A49LF040A",
Urja Rannikko161b8852009-06-05 08:47:37 +00001290 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00001291 .manufacture_id = AMIC_ID_NOPREFIX,
1292 .model_id = AMIC_A49LF040A,
1293 .total_size = 512,
1294 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00001295 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00001296 .tested = TEST_OK_PREW,
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,
Uwe Hermannea5425b2010-05-30 17:00:19 +00002012 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002013 .probe = probe_spi_rdid,
2014 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002015 .block_erasers =
2016 {
2017 {
2018 .eraseblocks = { {4 * 1024, 256} },
2019 .block_erase = spi_block_erase_20,
2020 }, {
2021 .eraseblocks = { {64 * 1024, 16} },
2022 .block_erase = spi_block_erase_d8,
2023 }, {
2024 .eraseblocks = { {1024 * 1024, 1} },
2025 .block_erase = spi_block_erase_60,
2026 }, {
2027 .eraseblocks = { {1024 * 1024, 1} },
2028 .block_erase = spi_block_erase_c7,
2029 }
2030 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002031 .write = spi_chip_write_256,
2032 .read = spi_chip_read,
2033 },
2034
2035 {
2036 .vendor = "Eon",
2037 .name = "EN25F16",
2038 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002039 .manufacture_id = EON_ID_NOPREFIX,
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002040 .model_id = EN_25F16,
2041 .total_size = 2048,
2042 .page_size = 256,
2043 .tested = TEST_UNTESTED,
2044 .probe = probe_spi_rdid,
2045 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002046 .block_erasers =
2047 {
2048 {
2049 .eraseblocks = { {4 * 1024, 512} },
2050 .block_erase = spi_block_erase_20,
2051 }, {
2052 .eraseblocks = { {64 * 1024, 32} },
2053 .block_erase = spi_block_erase_d8,
2054 }, {
2055 .eraseblocks = { {2 * 1024 * 1024, 1} },
2056 .block_erase = spi_block_erase_60,
2057 }, {
2058 .eraseblocks = { {2 * 1024 * 1024, 1} },
2059 .block_erase = spi_block_erase_c7,
2060 }
2061 },
Carl-Daniel Hailfinger80243c92009-06-05 20:53:07 +00002062 .write = spi_chip_write_256,
2063 .read = spi_chip_read,
2064 },
2065
2066 {
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002067 .vendor = "Eon",
2068 .name = "EN25F32",
2069 .bustype = CHIP_BUSTYPE_SPI,
2070 .manufacture_id = EON_ID_NOPREFIX,
2071 .model_id = EN_25F32,
2072 .total_size = 4096,
2073 .page_size = 256,
2074 .tested = TEST_UNTESTED,
2075 .probe = probe_spi_rdid,
2076 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002077 .block_erasers =
2078 {
2079 {
2080 .eraseblocks = { {4 * 1024, 1024} },
2081 .block_erase = spi_block_erase_20,
2082 }, {
2083 .eraseblocks = { {64 * 1024, 64} },
2084 .block_erase = spi_block_erase_d8,
2085 }, {
2086 .eraseblocks = { {4 * 1024 * 1024, 1} },
2087 .block_erase = spi_block_erase_60,
2088 }, {
2089 .eraseblocks = { {4 * 1024 * 1024, 1} },
2090 .block_erase = spi_block_erase_c7,
2091 }
2092 },
Carl-Daniel Hailfingera0a6ae92009-06-15 12:10:57 +00002093 .write = spi_chip_write_256,
2094 .read = spi_chip_read,
2095 },
2096
2097 {
Russ Dill3cd5a122010-03-05 08:44:11 +00002098 .vendor = "Eon",
2099 .name = "EN29F010",
2100 .bustype = CHIP_BUSTYPE_PARALLEL,
2101 .manufacture_id = EON_ID,
2102 .model_id = EN_29F010,
2103 .total_size = 128,
2104 .page_size = 128,
2105 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
2106 .tested = TEST_OK_PREW,
2107 .probe = probe_jedec,
2108 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2109 .block_erasers =
2110 {
2111 {
2112 .eraseblocks = { {16 * 1024, 8} },
2113 .block_erase = erase_sector_jedec,
2114 },
2115 {
2116 .eraseblocks = { {128 * 1024, 1} },
2117 .block_erase = erase_chip_block_jedec,
2118 },
2119 },
2120 .write = write_jedec_1,
2121 .read = read_memmapped,
2122 },
2123
2124 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002125 .vendor = "EON",
2126 .name = "EN29F002(A)(N)B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002127 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002128 .manufacture_id = EON_ID,
2129 .model_id = EN_29F002B,
2130 .total_size = 256,
2131 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002132 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00002133 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002134 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002135 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002136 .block_erasers =
2137 {
2138 {
2139 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002140 {16 * 1024, 1},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002141 {8 * 1024, 2},
2142 {32 * 1024, 1},
2143 {64 * 1024, 3},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002144 },
2145 .block_erase = erase_sector_jedec,
2146 }, {
2147 .eraseblocks = { {256 * 1024, 1} },
2148 .block_erase = erase_chip_block_jedec,
2149 },
2150 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002151 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002152 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002153 },
2154
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002155 {
2156 .vendor = "EON",
2157 .name = "EN29F002(A)(N)T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002158 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002159 .manufacture_id = EON_ID,
2160 .model_id = EN_29F002T,
2161 .total_size = 256,
2162 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00002163 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00002164 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002165 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002166 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002167 .block_erasers =
2168 {
2169 {
2170 .eraseblocks = {
Sean Nelson6b11ad22009-12-23 17:05:59 +00002171 {64 * 1024, 3},
Michael Karchere3cb0a12010-03-13 23:47:09 +00002172 {32 * 1024, 1},
2173 {8 * 1024, 2},
2174 {16 * 1024, 1},
Sean Nelson6b11ad22009-12-23 17:05:59 +00002175 },
2176 .block_erase = erase_sector_jedec,
2177 }, {
2178 .eraseblocks = { {256 * 1024, 1} },
2179 .block_erase = erase_chip_block_jedec,
2180 },
2181 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002182 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002183 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002184 },
2185
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002186 {
2187 .vendor = "Fujitsu",
2188 .name = "MBM29F004BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002189 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002190 .manufacture_id = FUJITSU_ID,
2191 .model_id = MBM29F004BC,
2192 .total_size = 512,
2193 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002194 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002195 .tested = TEST_UNTESTED,
2196 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002197 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002198 .block_erasers =
2199 {
2200 {
2201 .eraseblocks = {
2202 {16 * 1024, 1},
2203 {8 * 1024, 2},
2204 {32 * 1024, 1},
2205 {64 * 1024, 7},
2206 },
Sean Nelson35727f72010-01-28 23:55:12 +00002207 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002208 }, {
2209 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002210 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002211 },
2212 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002213 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002214 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002215 },
2216
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002217 {
2218 .vendor = "Fujitsu",
2219 .name = "MBM29F004TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002220 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002221 .manufacture_id = FUJITSU_ID,
2222 .model_id = MBM29F004TC,
2223 .total_size = 512,
2224 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002225 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002226 .tested = TEST_UNTESTED,
2227 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002228 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002229 .block_erasers =
2230 {
2231 {
2232 .eraseblocks = {
2233 {64 * 1024, 7},
2234 {32 * 1024, 1},
2235 {8 * 1024, 2},
2236 {16 * 1024, 1},
2237 },
Sean Nelson35727f72010-01-28 23:55:12 +00002238 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002239 }, {
2240 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002241 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002242 },
2243 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002244 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002245 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002246 },
2247
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002248 {
Sean Nelson35727f72010-01-28 23:55:12 +00002249 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002250 .vendor = "Fujitsu",
2251 .name = "MBM29F400BC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002252 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002253 .manufacture_id = FUJITSU_ID,
2254 .model_id = MBM29F400BC,
2255 .total_size = 512,
2256 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002257 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002258 .tested = TEST_UNTESTED,
2259 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002260 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002261 .block_erasers =
2262 {
2263 {
2264 .eraseblocks = {
2265 {16 * 1024, 1},
2266 {8 * 1024, 2},
2267 {32 * 1024, 1},
2268 {64 * 1024, 7},
2269 },
2270 .block_erase = block_erase_m29f400bt,
2271 }, {
2272 .eraseblocks = { {512 * 1024, 1} },
2273 .block_erase = block_erase_chip_m29f400bt,
2274 },
2275 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002276 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002277 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002278 },
2279
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002280 {
2281 .vendor = "Fujitsu",
2282 .name = "MBM29F400TC",
Urja Rannikko038a3122009-06-28 19:19:25 +00002283 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002284 .manufacture_id = FUJITSU_ID,
2285 .model_id = MBM29F400TC,
2286 .total_size = 512,
2287 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002288 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002289 .tested = TEST_UNTESTED,
2290 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002291 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002292 .block_erasers =
2293 {
2294 {
2295 .eraseblocks = {
2296 {64 * 1024, 7},
2297 {32 * 1024, 1},
2298 {8 * 1024, 2},
2299 {16 * 1024, 1},
2300 },
2301 .block_erase = block_erase_m29f400bt,
2302 }, {
2303 .eraseblocks = { {512 * 1024, 1} },
2304 .block_erase = block_erase_chip_m29f400bt,
2305 },
2306 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002307 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002308 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002309 },
2310
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002311 {
2312 .vendor = "Intel",
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002313 .name = "28F001BX-B",
Urja Rannikko161b8852009-06-05 08:47:37 +00002314 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002315 .manufacture_id = INTEL_ID,
2316 .model_id = P28F001BXB,
2317 .total_size = 128,
2318 .page_size = 128 * 1024, /* 8k + 2x4k + 112k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002319 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002320 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002321 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002322 .block_erasers =
2323 {
2324 {
2325 .eraseblocks = {
2326 {8 * 1024, 1},
2327 {4 * 1024, 2},
2328 {112 * 1024, 1},
2329 },
Sean Nelson28accc22010-03-19 18:47:06 +00002330 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002331 },
2332 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002333 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002334 .read = read_memmapped,
2335 },
2336
2337 {
2338 .vendor = "Intel",
2339 .name = "28F001BX-T",
Urja Rannikko161b8852009-06-05 08:47:37 +00002340 .bustype = CHIP_BUSTYPE_PARALLEL,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002341 .manufacture_id = INTEL_ID,
2342 .model_id = P28F001BXT,
2343 .total_size = 128,
2344 .page_size = 128 * 1024, /* 112k + 2x4k + 8k */
Sean Nelsondee4a832010-03-22 04:39:31 +00002345 .tested = TEST_UNTESTED,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002346 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00002347 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson54596372010-01-09 05:30:14 +00002348 .block_erasers =
2349 {
2350 {
2351 .eraseblocks = {
2352 {112 * 1024, 1},
2353 {4 * 1024, 2},
2354 {8 * 1024, 1},
2355 },
Sean Nelson28accc22010-03-19 18:47:06 +00002356 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002357 },
2358 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002359 .write = write_82802ab,
Urja Rannikkoebd7b832009-05-29 12:55:31 +00002360 .read = read_memmapped,
2361 },
2362
2363 {
2364 .vendor = "Intel",
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002365 .name = "28F004S5",
2366 .bustype = CHIP_BUSTYPE_PARALLEL,
2367 .manufacture_id = INTEL_ID,
2368 .model_id = E_28F004S5,
2369 .total_size = 512,
2370 .page_size = 256,
2371 .tested = TEST_UNTESTED,
2372 .probe = probe_82802ab,
2373 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002374 .block_erasers =
2375 {
2376 {
2377 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002378 .block_erase = erase_block_82802ab,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002379 },
2380 },
Sean Nelsondee4a832010-03-22 04:39:31 +00002381 .unlock = unlock_28f004s5,
Sean Nelsonf5ae4d42010-02-13 18:41:53 +00002382 .write = write_82802ab,
2383 .read = read_memmapped,
2384 },
2385
2386 {
2387 .vendor = "Intel",
Michael Karcherad0010a2010-04-03 10:27:08 +00002388 .name = "28F004BV/BE-B",
2389 .bustype = CHIP_BUSTYPE_PARALLEL,
2390 .manufacture_id = INTEL_ID,
2391 .model_id = P28F004BB,
2392 .total_size = 512,
2393 .page_size = 128 * 1024, /* maximal block size */
2394 .tested = TEST_UNTESTED,
2395 .probe = probe_82802ab,
2396 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2397 .block_erasers =
2398 {
2399 {
2400 .eraseblocks = {
2401 {16 * 1024, 1},
2402 {8 * 1024, 2},
2403 {96 * 1024, 1},
2404 {128 * 1024, 3},
2405 },
2406 .block_erase = erase_block_82802ab,
2407 },
2408 },
2409 .write = write_82802ab,
2410 .read = read_memmapped,
2411 },
2412
2413 {
2414 .vendor = "Intel",
2415 .name = "28F004BV/BE-T",
2416 .bustype = CHIP_BUSTYPE_PARALLEL,
2417 .manufacture_id = INTEL_ID,
2418 .model_id = P28F004BT,
2419 .total_size = 512,
2420 .page_size = 128 * 1024, /* maximal block size */
2421 .tested = TEST_UNTESTED,
2422 .probe = probe_82802ab,
2423 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2424 .block_erasers =
2425 {
2426 {
2427 .eraseblocks = {
2428 {128 * 1024, 3},
2429 {96 * 1024, 1},
2430 {8 * 1024, 2},
2431 {16 * 1024, 1},
2432 },
2433 .block_erase = erase_block_82802ab,
2434 },
2435 },
2436 .write = write_82802ab,
2437 .read = read_memmapped,
2438 },
2439
2440 {
2441 .vendor = "Intel",
2442 .name = "28F400BV/CV/CE-B",
2443 .bustype = CHIP_BUSTYPE_PARALLEL,
2444 .manufacture_id = INTEL_ID,
2445 .model_id = P28F400BB,
2446 .total_size = 512,
2447 .page_size = 128 * 1024, /* maximal block size */
2448 .feature_bits = FEATURE_ADDR_SHIFTED,
2449 .tested = TEST_UNTESTED,
2450 .probe = probe_82802ab,
2451 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2452 .block_erasers =
2453 {
2454 {
2455 .eraseblocks = {
2456 {16 * 1024, 1},
2457 {8 * 1024, 2},
2458 {96 * 1024, 1},
2459 {128 * 1024, 3},
2460 },
2461 .block_erase = erase_block_82802ab,
2462 },
2463 },
2464 .write = write_82802ab,
2465 .read = read_memmapped,
2466 },
2467
2468 {
2469 .vendor = "Intel",
2470 .name = "28F400BV/CV/CE-T",
2471 .bustype = CHIP_BUSTYPE_PARALLEL,
2472 .manufacture_id = INTEL_ID,
2473 .model_id = P28F400BT,
2474 .total_size = 512,
2475 .page_size = 128 * 1024, /* maximal block size */
2476 .feature_bits = FEATURE_ADDR_SHIFTED,
2477 .tested = TEST_UNTESTED,
2478 .probe = probe_82802ab,
2479 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
2480 .block_erasers =
2481 {
2482 {
2483 .eraseblocks = {
2484 {128 * 1024, 3},
2485 {96 * 1024, 1},
2486 {8 * 1024, 2},
2487 {16 * 1024, 1},
2488 },
2489 .block_erase = erase_block_82802ab,
2490 },
2491 },
2492 .write = write_82802ab,
2493 .read = read_memmapped,
2494 },
2495
2496 {
2497 .vendor = "Intel",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002498 .name = "82802AB",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002499 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002500 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002501 .model_id = I_82802AB,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002502 .total_size = 512,
2503 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002504 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002505 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002506 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002507 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002508 .block_erasers =
2509 {
2510 {
2511 .eraseblocks = { {64 * 1024, 8} },
Sean Nelson28accc22010-03-19 18:47:06 +00002512 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002513 },
2514 },
Sean Nelson28accc22010-03-19 18:47:06 +00002515 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002516 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002517 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002518 },
2519
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002520 {
2521 .vendor = "Intel",
2522 .name = "82802AC",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002523 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002524 .manufacture_id = INTEL_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00002525 .model_id = I_82802AC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002526 .total_size = 1024,
2527 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00002528 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00002529 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002530 .probe = probe_82802ab,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002531 .probe_timing = TIMING_IGNORED, /* routine does not use probe_timing (82802ab.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002532 .block_erasers =
2533 {
2534 {
2535 .eraseblocks = { {64 * 1024, 16} },
Sean Nelson28accc22010-03-19 18:47:06 +00002536 .block_erase = erase_block_82802ab,
Sean Nelson54596372010-01-09 05:30:14 +00002537 },
2538 },
Sean Nelson28accc22010-03-19 18:47:06 +00002539 .unlock = unlock_82802ab,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002540 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002541 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002542 },
2543
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002544 {
2545 .vendor = "Macronix",
2546 .name = "MX25L512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002547 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002548 .manufacture_id = MX_ID,
2549 .model_id = MX_25L512,
2550 .total_size = 64,
2551 .page_size = 256,
2552 .tested = TEST_UNTESTED,
2553 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002554 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002555 .block_erasers =
2556 {
2557 {
2558 .eraseblocks = { {4 * 1024, 16} },
2559 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002560 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002561 .eraseblocks = { {64 * 1024, 1} },
2562 .block_erase = spi_block_erase_52,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002563 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002564 .eraseblocks = { {64 * 1024, 1} },
2565 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002566 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002567 .eraseblocks = { {64 * 1024, 1} },
2568 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002569 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002570 .eraseblocks = { {64 * 1024, 1} },
2571 .block_erase = spi_block_erase_c7,
2572 },
2573 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002574 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002575 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002576 },
2577
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002578 {
2579 .vendor = "Macronix",
2580 .name = "MX25L1005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002581 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002582 .manufacture_id = MX_ID,
2583 .model_id = MX_25L1005,
2584 .total_size = 128,
2585 .page_size = 256,
2586 .tested = TEST_UNTESTED,
2587 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002588 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002589 .block_erasers =
2590 {
2591 {
2592 .eraseblocks = { {4 * 1024, 32} },
2593 .block_erase = spi_block_erase_20,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002594 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002595 .eraseblocks = { {64 * 1024, 2} },
2596 .block_erase = spi_block_erase_d8,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002597 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002598 .eraseblocks = { {128 * 1024, 1} },
2599 .block_erase = spi_block_erase_60,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002600 }, {
Carl-Daniel Hailfingerf38431a2009-09-05 02:30:58 +00002601 .eraseblocks = { {128 * 1024, 1} },
2602 .block_erase = spi_block_erase_c7,
2603 },
2604 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002605 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002606 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002607 },
2608
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002609 {
2610 .vendor = "Macronix",
2611 .name = "MX25L2005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002612 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002613 .manufacture_id = MX_ID,
2614 .model_id = MX_25L2005,
2615 .total_size = 256,
2616 .page_size = 256,
2617 .tested = TEST_UNTESTED,
2618 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002619 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002620 .block_erasers =
2621 {
2622 {
2623 .eraseblocks = { {4 * 1024, 64} },
2624 .block_erase = spi_block_erase_20,
2625 }, {
2626 .eraseblocks = { {64 * 1024, 4} },
2627 .block_erase = spi_block_erase_52,
2628 }, {
2629 .eraseblocks = { {64 * 1024, 4} },
2630 .block_erase = spi_block_erase_d8,
2631 }, {
2632 .eraseblocks = { {256 * 1024, 1} },
2633 .block_erase = spi_block_erase_60,
2634 }, {
2635 .eraseblocks = { {256 * 1024, 1} },
2636 .block_erase = spi_block_erase_c7,
2637 },
2638 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002639 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002640 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002641 },
2642
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002643 {
2644 .vendor = "Macronix",
2645 .name = "MX25L4005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002646 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002647 .manufacture_id = MX_ID,
2648 .model_id = MX_25L4005,
2649 .total_size = 512,
2650 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002651 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002652 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002653 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002654 .block_erasers =
2655 {
2656 {
2657 .eraseblocks = { {4 * 1024, 128} },
2658 .block_erase = spi_block_erase_20,
2659 }, {
2660 .eraseblocks = { {64 * 1024, 8} },
2661 .block_erase = spi_block_erase_52,
2662 }, {
2663 .eraseblocks = { {64 * 1024, 8} },
2664 .block_erase = spi_block_erase_d8,
2665 }, {
2666 .eraseblocks = { {512 * 1024, 1} },
2667 .block_erase = spi_block_erase_60,
2668 }, {
2669 .eraseblocks = { {512 * 1024, 1} },
2670 .block_erase = spi_block_erase_c7,
2671 },
2672 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002673 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002674 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002675 },
2676
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002677 {
2678 .vendor = "Macronix",
2679 .name = "MX25L8005",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002680 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002681 .manufacture_id = MX_ID,
2682 .model_id = MX_25L8005,
2683 .total_size = 1024,
2684 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002685 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002686 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002687 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002688 .block_erasers =
2689 {
2690 {
2691 .eraseblocks = { {4 * 1024, 256} },
2692 .block_erase = spi_block_erase_20,
2693 }, {
2694 .eraseblocks = { {64 * 1024, 16} },
2695 .block_erase = spi_block_erase_52,
2696 }, {
2697 .eraseblocks = { {64 * 1024, 16} },
2698 .block_erase = spi_block_erase_d8,
2699 }, {
2700 .eraseblocks = { {1024 * 1024, 1} },
2701 .block_erase = spi_block_erase_60,
2702 }, {
2703 .eraseblocks = { {1024 * 1024, 1} },
2704 .block_erase = spi_block_erase_c7,
2705 },
2706 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002707 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002708 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002709 },
2710
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002711 {
2712 .vendor = "Macronix",
2713 .name = "MX25L1605",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002714 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002715 .manufacture_id = MX_ID,
2716 .model_id = MX_25L1605,
2717 .total_size = 2048,
2718 .page_size = 256,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002719 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002720 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002721 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfinger40107122009-10-01 13:15:01 +00002722 .block_erasers =
2723 {
2724 {
2725 .eraseblocks = { {4 * 1024, 512} },
2726 .block_erase = spi_block_erase_20, /* This erase function has 64k blocksize for eLiteFlash */
2727 }, {
2728 .eraseblocks = { {64 * 1024, 32} }, /* Not supported in MX25L1605 (eLiteFlash) and MX25L1605D */
2729 .block_erase = spi_block_erase_52,
2730 }, {
2731 .eraseblocks = { {64 * 1024, 32} },
2732 .block_erase = spi_block_erase_d8,
2733 }, {
2734 .eraseblocks = { {2 * 1024 * 1024, 1} },
2735 .block_erase = spi_block_erase_60,
2736 }, {
2737 .eraseblocks = { {2 * 1024 * 1024, 1} },
2738 .block_erase = spi_block_erase_c7,
2739 },
2740 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002741 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002742 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002743 },
2744
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002745 {
2746 .vendor = "Macronix",
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002747 .name = "MX25L1635D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002748 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002749 .manufacture_id = MX_ID,
2750 .model_id = MX_25L1635D,
2751 .total_size = 2048,
2752 .page_size = 256,
2753 .tested = TEST_UNTESTED,
2754 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002755 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002756 .block_erasers =
2757 {
2758 {
2759 .eraseblocks = { {4 * 1024, 512} },
2760 .block_erase = spi_block_erase_20,
2761 }, {
2762 .eraseblocks = { {64 * 1024, 32} },
2763 .block_erase = spi_block_erase_d8,
2764 }, {
2765 .eraseblocks = { {2 * 1024 * 1024, 1} },
2766 .block_erase = spi_block_erase_60,
2767 }, {
2768 .eraseblocks = { {2 * 1024 * 1024, 1} },
2769 .block_erase = spi_block_erase_c7,
2770 }
2771 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002772 .write = spi_chip_write_256,
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002773 .read = spi_chip_read,
2774 },
Stephan Guillouxfd315502009-04-20 22:54:13 +00002775
Stephan Guillouxf5c70902009-04-19 23:04:00 +00002776 {
2777 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002778 .name = "MX25L3205",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002779 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002780 .manufacture_id = MX_ID,
2781 .model_id = MX_25L3205,
2782 .total_size = 4096,
2783 .page_size = 256,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002784 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002785 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002786 .probe_timing = TIMING_ZERO,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002787 .block_erasers =
2788 {
2789 {
2790 .eraseblocks = { {4 * 1024, 1024} },
2791 .block_erase = spi_block_erase_20,
2792 }, {
2793 .eraseblocks = { {4 * 1024, 1024} },
2794 .block_erase = spi_block_erase_d8,
2795 }, {
2796 .eraseblocks = { {4 * 1024 * 1024, 1} },
2797 .block_erase = spi_block_erase_60,
2798 }, {
2799 .eraseblocks = { {4 * 1024 * 1024, 1} },
2800 .block_erase = spi_block_erase_c7,
2801 },
2802 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002803 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002804 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002805 },
2806
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002807 {
2808 .vendor = "Macronix",
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002809 .name = "MX25L3235D",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002810 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002811 .manufacture_id = MX_ID,
2812 .model_id = MX_25L3235D,
2813 .total_size = 4096,
2814 .page_size = 256,
2815 .tested = TEST_UNTESTED,
2816 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002817 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002818 .block_erasers =
2819 {
2820 {
2821 .eraseblocks = { {4 * 1024, 1024} },
2822 .block_erase = spi_block_erase_20,
2823 }, {
2824 .eraseblocks = { {64 * 1024, 64} },
2825 .block_erase = spi_block_erase_d8,
2826 }, {
2827 .eraseblocks = { {4 * 1024 * 1024, 1} },
2828 .block_erase = spi_block_erase_60,
2829 }, {
2830 .eraseblocks = { {4 * 1024 * 1024, 1} },
2831 .block_erase = spi_block_erase_c7,
2832 }
2833 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002834 .write = spi_chip_write_256,
Stephan Guilloux70ea9a32009-04-23 22:51:56 +00002835 .read = spi_chip_read,
2836 },
2837
2838 {
2839 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002840 .name = "MX25L6405",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002841 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002842 .manufacture_id = MX_ID,
2843 .model_id = MX_25L6405,
2844 .total_size = 8192,
2845 .page_size = 256,
Carl-Daniel Hailfinger452b3e32009-06-22 11:14:43 +00002846 .tested = TEST_OK_PROBE,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002847 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002848 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002849 .block_erasers =
2850 {
2851 {
2852 .eraseblocks = { {64 * 1024, 128} },
2853 .block_erase = spi_block_erase_20,
2854 }, {
2855 .eraseblocks = { {64 * 1024, 128} },
2856 .block_erase = spi_block_erase_d8,
2857 }, {
2858 .eraseblocks = { {8 * 1024 * 1024, 1} },
2859 .block_erase = spi_block_erase_60,
2860 }, {
2861 .eraseblocks = { {8 * 1024 * 1024, 1} },
2862 .block_erase = spi_block_erase_c7,
2863 }
2864 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002865 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002866 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00002867 },
2868
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002869 {
2870 .vendor = "Macronix",
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002871 .name = "MX25L12805",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00002872 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002873 .manufacture_id = MX_ID,
2874 .model_id = MX_25L12805,
2875 .total_size = 16384,
2876 .page_size = 256,
2877 .tested = TEST_UNTESTED,
2878 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00002879 .probe_timing = TIMING_ZERO,
Sean Nelson54596372010-01-09 05:30:14 +00002880 .block_erasers =
2881 {
2882 {
2883 .eraseblocks = { {4 * 1024, 4096} },
2884 .block_erase = spi_block_erase_20,
2885 }, {
2886 .eraseblocks = { {64 * 1024, 256} },
2887 .block_erase = spi_block_erase_d8,
2888 }, {
2889 .eraseblocks = { {16 * 1024 * 1024, 1} },
2890 .block_erase = spi_block_erase_60,
2891 }, {
2892 .eraseblocks = { {16 * 1024 * 1024, 1} },
2893 .block_erase = spi_block_erase_c7,
2894 }
2895 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00002896 .write = spi_chip_write_256,
Stephan Guilloux2f132fe2009-04-21 01:47:16 +00002897 .read = spi_chip_read,
2898 },
2899
2900 {
2901 .vendor = "Macronix",
Mark Panajotovic502a9132009-08-24 01:42:24 +00002902 .name = "MX29F001B",
2903 .bustype = CHIP_BUSTYPE_PARALLEL,
2904 .manufacture_id = MX_ID,
2905 .model_id = MX_29F001B,
2906 .total_size = 128,
2907 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002908 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2909 .tested = TEST_UNTESTED,
2910 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002911 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002912 .block_erasers =
2913 {
2914 {
2915 .eraseblocks = {
2916 {8 * 1024, 1},
2917 {4 * 1024, 2},
2918 {8 * 1024, 2},
2919 {32 * 1024, 1},
2920 {64 * 1024, 1},
2921 },
Sean Nelson35727f72010-01-28 23:55:12 +00002922 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002923 }, {
2924 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002925 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002926 }
2927 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002928 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002929 .read = read_memmapped,
2930 },
2931
2932 {
2933 .vendor = "Macronix",
2934 .name = "MX29F001T",
2935 .bustype = CHIP_BUSTYPE_PARALLEL,
2936 .manufacture_id = MX_ID,
2937 .model_id = MX_29F001T,
2938 .total_size = 128,
2939 .page_size = 32 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002940 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
2941 .tested = TEST_UNTESTED,
2942 .probe = probe_jedec,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002943 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00002944 .block_erasers =
2945 {
2946 {
2947 .eraseblocks = {
2948 {64 * 1024, 1},
2949 {32 * 1024, 1},
2950 {8 * 1024, 2},
2951 {4 * 1024, 2},
2952 {8 * 1024, 1},
2953 },
Sean Nelson35727f72010-01-28 23:55:12 +00002954 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002955 }, {
2956 .eraseblocks = { {128 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002957 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00002958 }
2959 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002960 .write = write_jedec_1,
Mark Panajotovic502a9132009-08-24 01:42:24 +00002961 .read = read_memmapped,
2962 },
2963
2964 {
2965 .vendor = "Macronix",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002966 .name = "MX29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00002967 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002968 .manufacture_id = MX_ID,
2969 .model_id = MX_29F002B,
2970 .total_size = 256,
2971 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00002972 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002973 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00002974 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00002975 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00002976 .block_erasers =
2977 {
2978 {
2979 .eraseblocks = {
2980 {16 * 1024, 1},
2981 {8 * 1024, 2},
2982 {32 * 1024, 1},
2983 {64 * 1024, 3},
2984 },
Sean Nelson35727f72010-01-28 23:55:12 +00002985 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002986 }, {
2987 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00002988 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00002989 },
2990 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00002991 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00002992 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00002993 },
2994
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002995 {
2996 .vendor = "Macronix",
2997 .name = "MX29F002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00002998 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00002999 .manufacture_id = MX_ID,
3000 .model_id = MX_29F002T,
3001 .total_size = 256,
3002 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003003 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003004 .tested = TEST_OK_PRW,
Sean Nelson35727f72010-01-28 23:55:12 +00003005 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003006 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson6b11ad22009-12-23 17:05:59 +00003007 .block_erasers =
3008 {
3009 {
3010 .eraseblocks = {
3011 {64 * 1024, 3},
3012 {32 * 1024, 1},
3013 {8 * 1024, 2},
3014 {16 * 1024, 1},
3015 },
Sean Nelson35727f72010-01-28 23:55:12 +00003016 .block_erase = erase_sector_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003017 }, {
3018 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003019 .block_erase = erase_chip_block_jedec,
Sean Nelson6b11ad22009-12-23 17:05:59 +00003020 },
3021 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003022 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003023 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003024 },
3025
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003026 {
3027 .vendor = "Macronix",
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003028 .name = "MX29LV040",
Urja Rannikko038a3122009-06-28 19:19:25 +00003029 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003030 .manufacture_id = MX_ID,
Carl-Daniel Hailfinger350a0c32009-07-24 13:59:27 +00003031 .model_id = MX_29LV040,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003032 .total_size = 512,
3033 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003034 .feature_bits = FEATURE_ADDR_2AA | FEATURE_SHORT_RESET,
3035 .tested = TEST_UNTESTED,
3036 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003037 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
Sean Nelson54596372010-01-09 05:30:14 +00003038 .block_erasers =
3039 {
3040 {
3041 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00003042 .block_erase = erase_sector_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003043 }, {
3044 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003045 .block_erase = erase_chip_block_jedec,
Sean Nelson54596372010-01-09 05:30:14 +00003046 },
3047 },
Michael Karcher1c296ca2009-11-27 17:49:42 +00003048 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003049 .read = read_memmapped,
Carl-Daniel Hailfinger7de86392008-12-10 10:32:05 +00003050 },
3051
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003052 {
3053 .vendor = "Numonyx",
3054 .name = "M25PE10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003055 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003056 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003057 .model_id = ST_M25PE10,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003058 .total_size = 128,
3059 .page_size = 256,
3060 .tested = TEST_UNTESTED,
3061 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003062 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003063 .block_erasers =
3064 {
3065 {
3066 .eraseblocks = { {4 * 1024, 32} },
3067 .block_erase = spi_block_erase_20,
3068 }, {
3069 .eraseblocks = { {64 * 1024, 2} },
3070 .block_erase = spi_block_erase_d8,
3071 }, {
3072 .eraseblocks = { {128 * 1024, 1} },
3073 .block_erase = spi_block_erase_c7,
3074 }
3075 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003076 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003077 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003078 },
3079
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003080 {
3081 .vendor = "Numonyx",
3082 .name = "M25PE20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003083 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003084 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003085 .model_id = ST_M25PE20,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003086 .total_size = 256,
3087 .page_size = 256,
3088 .tested = TEST_UNTESTED,
3089 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003090 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003091 .block_erasers =
3092 {
3093 {
3094 .eraseblocks = { {4 * 1024, 64} },
3095 .block_erase = spi_block_erase_20,
3096 }, {
3097 .eraseblocks = { {64 * 1024, 4} },
3098 .block_erase = spi_block_erase_d8,
3099 }, {
3100 .eraseblocks = { {256 * 1024, 1} },
3101 .block_erase = spi_block_erase_c7,
3102 }
3103 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003104 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003105 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003106 },
3107
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003108 {
3109 .vendor = "Numonyx",
3110 .name = "M25PE40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003111 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003112 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003113 .model_id = ST_M25PE40,
Sean Nelson5643c072010-01-19 03:23:07 +00003114 .total_size = 512,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003115 .page_size = 256,
3116 .tested = TEST_UNTESTED,
3117 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003118 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003119 .block_erasers =
3120 {
3121 {
3122 .eraseblocks = { {4 * 1024, 128} },
3123 .block_erase = spi_block_erase_20,
3124 }, {
3125 .eraseblocks = { {64 * 1024, 8} },
3126 .block_erase = spi_block_erase_d8,
3127 }, {
3128 .eraseblocks = { {512 * 1024, 1} },
3129 .block_erase = spi_block_erase_c7,
3130 }
3131 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003132 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003133 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003134 },
3135
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003136 {
3137 .vendor = "Numonyx",
3138 .name = "M25PE80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003139 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003140 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003141 .model_id = ST_M25PE80,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003142 .total_size = 1024,
3143 .page_size = 256,
3144 .tested = TEST_OK_PREW,
3145 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003146 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003147 .block_erasers =
3148 {
3149 {
3150 .eraseblocks = { {4 * 1024, 256} },
3151 .block_erase = spi_block_erase_20,
3152 }, {
3153 .eraseblocks = { {64 * 1024, 16} },
3154 .block_erase = spi_block_erase_d8,
3155 }, {
3156 .eraseblocks = { {1024 * 1024, 1} },
3157 .block_erase = spi_block_erase_c7,
3158 }
3159 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003160 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003161 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003162 },
3163
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003164 {
3165 .vendor = "Numonyx",
3166 .name = "M25PE16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003167 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003168 .manufacture_id = ST_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003169 .model_id = ST_M25PE16,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003170 .total_size = 2048,
3171 .page_size = 256,
3172 .tested = TEST_UNTESTED,
3173 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003174 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003175 .block_erasers =
3176 {
3177 {
3178 .eraseblocks = { {4 * 1024, 512} },
3179 .block_erase = spi_block_erase_20,
3180 }, {
3181 .eraseblocks = { {64 * 1024, 32} },
3182 .block_erase = spi_block_erase_d8,
3183 }, {
3184 .eraseblocks = { {2 * 1024 * 1024, 1} },
3185 .block_erase = spi_block_erase_c7,
3186 }
3187 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003188 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003189 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003190 },
3191
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003192 {
3193 .vendor = "PMC",
3194 .name = "Pm25LV010",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003195 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003196 .manufacture_id = PMC_ID,
3197 .model_id = PMC_25LV010,
3198 .total_size = 128,
3199 .page_size = 256,
3200 .tested = TEST_UNTESTED,
3201 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003202 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003203 .block_erasers =
3204 {
3205 {
3206 .eraseblocks = { {4 * 1024, 32} },
3207 .block_erase = spi_block_erase_d7,
3208 }, {
3209 .eraseblocks = { {32 * 1024, 4} },
3210 .block_erase = spi_block_erase_d8,
3211 }, {
3212 .eraseblocks = { {128 * 1024, 1} },
3213 .block_erase = spi_block_erase_c7,
3214 }
3215 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003216 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003217 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003218 },
3219
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003220 {
3221 .vendor = "PMC",
3222 .name = "Pm25LV016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003223 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003224 .manufacture_id = PMC_ID,
3225 .model_id = PMC_25LV016B,
3226 .total_size = 2048,
3227 .page_size = 256,
3228 .tested = TEST_UNTESTED,
3229 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003230 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003231 .block_erasers =
3232 {
3233 {
3234 .eraseblocks = { {4 * 1024, 512} },
3235 .block_erase = spi_block_erase_d7,
3236 }, {
3237 .eraseblocks = { {4 * 1024, 512} },
3238 .block_erase = spi_block_erase_20,
3239 }, {
3240 .eraseblocks = { {64 * 1024, 32} },
3241 .block_erase = spi_block_erase_d8,
3242 }, {
3243 .eraseblocks = { {2 * 1024 * 1024, 1} },
3244 .block_erase = spi_block_erase_60,
3245 }, {
3246 .eraseblocks = { {2 * 1024 * 1024, 1} },
3247 .block_erase = spi_block_erase_c7,
3248 }
3249 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003250 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003251 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003252 },
3253
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003254 {
3255 .vendor = "PMC",
3256 .name = "Pm25LV020",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003257 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003258 .manufacture_id = PMC_ID,
3259 .model_id = PMC_25LV020,
3260 .total_size = 256,
3261 .page_size = 256,
3262 .tested = TEST_UNTESTED,
3263 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003264 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003265 .block_erasers =
3266 {
3267 {
3268 .eraseblocks = { {4 * 1024, 64} },
3269 .block_erase = spi_block_erase_d7,
3270 }, {
3271 .eraseblocks = { {64 * 1024, 4} },
3272 .block_erase = spi_block_erase_d8,
3273 }, {
3274 .eraseblocks = { {256 * 1024, 1} },
3275 .block_erase = spi_block_erase_c7,
3276 }
3277 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003278 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003279 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003280 },
3281
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003282 {
3283 .vendor = "PMC",
3284 .name = "Pm25LV040",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003285 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003286 .manufacture_id = PMC_ID,
3287 .model_id = PMC_25LV040,
3288 .total_size = 512,
3289 .page_size = 256,
3290 .tested = TEST_UNTESTED,
3291 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003292 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003293 .block_erasers =
3294 {
3295 {
3296 .eraseblocks = { {4 * 1024, 128} },
3297 .block_erase = spi_block_erase_d7,
3298 }, {
3299 .eraseblocks = { {64 * 1024, 8} },
3300 .block_erase = spi_block_erase_d8,
3301 }, {
3302 .eraseblocks = { {512 * 1024, 1} },
3303 .block_erase = spi_block_erase_c7,
3304 }
3305 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003306 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003307 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003308 },
3309
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003310 {
3311 .vendor = "PMC",
3312 .name = "Pm25LV080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003313 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003314 .manufacture_id = PMC_ID,
3315 .model_id = PMC_25LV080B,
3316 .total_size = 1024,
3317 .page_size = 256,
3318 .tested = TEST_UNTESTED,
3319 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003320 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003321 .block_erasers =
3322 {
3323 {
3324 .eraseblocks = { {4 * 1024, 256} },
3325 .block_erase = spi_block_erase_d7,
3326 }, {
3327 .eraseblocks = { {4 * 1024, 256} },
3328 .block_erase = spi_block_erase_20,
3329 }, {
3330 .eraseblocks = { {64 * 1024, 16} },
3331 .block_erase = spi_block_erase_d8,
3332 }, {
3333 .eraseblocks = { {1024 * 1024, 1} },
3334 .block_erase = spi_block_erase_60,
3335 }, {
3336 .eraseblocks = { {1024 * 1024, 1} },
3337 .block_erase = spi_block_erase_c7,
3338 }
3339 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003340 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003341 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003342 },
3343
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003344 {
3345 .vendor = "PMC",
3346 .name = "Pm25LV512",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003347 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003348 .manufacture_id = PMC_ID,
3349 .model_id = PMC_25LV512,
3350 .total_size = 64,
3351 .page_size = 256,
3352 .tested = TEST_UNTESTED,
3353 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003354 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003355 .block_erasers =
3356 {
3357 {
3358 .eraseblocks = { {4 * 1024, 16} },
3359 .block_erase = spi_block_erase_d7,
3360 }, {
3361 .eraseblocks = { {32 * 1024, 2} },
3362 .block_erase = spi_block_erase_d8,
3363 }, {
3364 .eraseblocks = { {64 * 1024, 1} },
3365 .block_erase = spi_block_erase_c7,
3366 }
3367 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003368 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003369 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003370 },
3371
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003372 {
3373 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003374 .name = "Pm29F002T",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003375 .bustype = CHIP_BUSTYPE_PARALLEL,
3376 .manufacture_id = PMC_ID_NOPREFIX,
3377 .model_id = PMC_29F002T,
3378 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003379 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003380 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3381 .tested = TEST_UNTESTED,
3382 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003383 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003384 .block_erasers =
3385 {
3386 {
3387 .eraseblocks = {
3388 {128 * 1024, 1},
3389 {96 * 1024, 1},
3390 {8 * 1024, 2},
3391 {16 * 1024, 1},
3392 },
Sean Nelson35727f72010-01-28 23:55:12 +00003393 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003394 }, {
3395 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003396 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003397 },
3398 },
Sean Nelson35727f72010-01-28 23:55:12 +00003399 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003400 .read = read_memmapped,
3401 },
3402
3403 {
3404 .vendor = "PMC",
Sean Nelson72a9a022009-12-22 22:15:33 +00003405 .name = "Pm29F002B",
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003406 .bustype = CHIP_BUSTYPE_PARALLEL,
3407 .manufacture_id = PMC_ID_NOPREFIX,
3408 .model_id = PMC_29F002B,
3409 .total_size = 256,
Sean Nelson72a9a022009-12-22 22:15:33 +00003410 .page_size = 8 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003411 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003412 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00003413 .probe = probe_jedec,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003414 .probe_timing = TIMING_FIXME,
Sean Nelson72a9a022009-12-22 22:15:33 +00003415 .block_erasers =
3416 {
3417 {
3418 .eraseblocks = {
3419 {16 * 1024, 1},
3420 {8 * 1024, 2},
3421 {96 * 1024, 1},
3422 {128 * 1024, 1},
3423 },
Sean Nelson35727f72010-01-28 23:55:12 +00003424 .block_erase = erase_sector_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003425 }, {
3426 .eraseblocks = { {256 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00003427 .block_erase = erase_chip_block_jedec,
Sean Nelson72a9a022009-12-22 22:15:33 +00003428 },
3429 },
Sean Nelson35727f72010-01-28 23:55:12 +00003430 .write = write_jedec_1,
Uwe Hermannf983d9f2009-06-14 21:53:26 +00003431 .read = read_memmapped,
3432 },
3433
3434 {
3435 .vendor = "PMC",
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003436 .name = "Pm39LV010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003437 .bustype = CHIP_BUSTYPE_PARALLEL,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003438 .manufacture_id = PMC_ID_NOPREFIX,
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003439 .model_id = PMC_39F010, /* Pm39LV010 and Pm39F010 have identical IDs but different voltage */
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003440 .total_size = 128,
3441 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00003442 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00003443 .tested = TEST_OK_PREW,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003444 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003445 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson5643c072010-01-19 03:23:07 +00003446 .block_erasers =
3447 {
3448 {
3449 .eraseblocks = { {4 * 1024, 32} },
3450 .block_erase = erase_sector_jedec,
3451 }, {
3452 .eraseblocks = { {64 * 1024, 2} },
3453 .block_erase = erase_block_jedec,
3454 }, {
3455 .eraseblocks = { {128 * 1024, 1} },
3456 .block_erase = erase_chip_block_jedec,
3457 }
3458 },
Sean Nelson35727f72010-01-28 23:55:12 +00003459 .write = write_jedec_1,
Rudolf Marek50fdf3b2009-05-17 17:02:07 +00003460 .read = read_memmapped,
3461 },
3462
3463 {
3464 .vendor = "PMC",
Anders Juel Jensendfdc56f2010-03-27 23:25:14 +00003465 .name = "Pm39LV020",
3466 .bustype = CHIP_BUSTYPE_PARALLEL,
3467 .manufacture_id = PMC_ID_NOPREFIX,
3468 .model_id = PMC_39LV020,
3469 .total_size = 256,
3470 .page_size = 4096,
3471 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3472 .tested = TEST_UNTESTED,
3473 .probe = probe_jedec,
3474 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3475 .block_erasers =
3476 {
3477 {
3478 .eraseblocks = { {4 * 1024, 64} },
3479 .block_erase = erase_sector_jedec,
3480 }, {
3481 .eraseblocks = { {64 * 1024, 4} },
3482 .block_erase = erase_block_jedec,
3483 }, {
3484 .eraseblocks = { {256 * 1024, 1} },
3485 .block_erase = erase_chip_block_jedec,
3486 }
3487 },
3488 .write = write_jedec_1,
3489 .read = read_memmapped,
3490 },
3491
3492 {
3493 .vendor = "PMC",
3494 .name = "Pm39LV040",
3495 .bustype = CHIP_BUSTYPE_PARALLEL,
3496 .manufacture_id = PMC_ID_NOPREFIX,
3497 .model_id = PMC_39LV040,
3498 .total_size = 512,
3499 .page_size = 4096,
3500 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
3501 .tested = TEST_UNTESTED,
3502 .probe = probe_jedec,
3503 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
3504 .block_erasers =
3505 {
3506 {
3507 .eraseblocks = { {4 * 1024, 128} },
3508 .block_erase = erase_sector_jedec,
3509 }, {
3510 .eraseblocks = { {64 * 1024, 8} },
3511 .block_erase = erase_block_jedec,
3512 }, {
3513 .eraseblocks = { {512 * 1024, 1} },
3514 .block_erase = erase_chip_block_jedec,
3515 }
3516 },
3517 .write = write_jedec_1,
3518 .read = read_memmapped,
3519 },
3520
3521 {
3522 .vendor = "PMC",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003523 .name = "Pm49FL002",
Sean Nelson35727f72010-01-28 23:55:12 +00003524 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003525 .manufacture_id = PMC_ID_NOPREFIX,
3526 .model_id = PMC_49FL002,
3527 .total_size = 256,
3528 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003529 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Russ Dill8c7c4682010-03-09 16:53:06 +00003530 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003531 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003532 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003533 .block_erasers =
3534 {
3535 {
3536 .eraseblocks = { {4 * 1024, 64} },
3537 .block_erase = erase_sector_jedec,
3538 }, {
3539 .eraseblocks = { {16 * 1024, 16} },
3540 .block_erase = erase_block_jedec,
3541 }, {
3542 .eraseblocks = { {256 * 1024, 1} },
3543 .block_erase = erase_chip_block_jedec,
3544 }
3545 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003546 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003547 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003548 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003549 },
3550
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003551 {
3552 .vendor = "PMC",
3553 .name = "Pm49FL004",
Sean Nelson35727f72010-01-28 23:55:12 +00003554 .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH, /* A/A Mux*/
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003555 .manufacture_id = PMC_ID_NOPREFIX,
3556 .model_id = PMC_49FL004,
3557 .total_size = 512,
3558 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00003559 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00003560 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00003561 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003562 .probe_timing = TIMING_ZERO, /* routine is wrapper to probe_jedec (pm49fl00x.c) */
Sean Nelson5643c072010-01-19 03:23:07 +00003563 .block_erasers =
3564 {
3565 {
3566 .eraseblocks = { {4 * 1024, 128} },
3567 .block_erase = erase_sector_jedec,
3568 }, {
3569 .eraseblocks = { {64 * 1024, 8} },
3570 .block_erase = erase_block_jedec,
3571 }, {
3572 .eraseblocks = { {512 * 1024, 1} },
3573 .block_erase = erase_chip_block_jedec,
3574 }
3575 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00003576 .unlock = unlock_49fl00x,
Sean Nelson36172342010-02-27 18:01:15 +00003577 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003578 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003579 },
3580
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003581 {
Sean Nelsond70b09c2009-11-24 02:11:08 +00003582 .vendor = "Sanyo",
3583 .name = "LF25FW203A",
3584 .bustype = CHIP_BUSTYPE_SPI,
3585 .manufacture_id = SANYO_ID,
3586 .model_id = SANYO_LE25FW203A,
3587 .total_size = 2048,
3588 .page_size = 256,
3589 .tested = TEST_UNTESTED,
3590 .probe = probe_spi_rdid,
3591 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003592 .block_erasers =
3593 {
3594 {
3595 .eraseblocks = { {64 * 1024, 32} },
3596 .block_erase = spi_block_erase_d8,
3597 }, {
3598 .eraseblocks = { {2 * 1024 * 1024, 1} },
3599 .block_erase = spi_block_erase_c7,
3600 }
3601 },
Sean Nelsond70b09c2009-11-24 02:11:08 +00003602 .write = spi_chip_write_256,
3603 .read = spi_chip_read,
3604 },
3605
3606 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003607 .vendor = "Sharp",
3608 .name = "LHF00L04",
Urja Rannikko038a3122009-06-28 19:19:25 +00003609 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003610 .manufacture_id = SHARP_ID,
3611 .model_id = SHARP_LHF00L04,
3612 .total_size = 1024,
3613 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003614 .feature_bits = FEATURE_EITHER_RESET | FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003615 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003616 .probe = probe_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003617 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003618 .block_erasers =
3619 {
3620 {
3621 .eraseblocks = {
3622 {64 * 1024, 15},
3623 {8 * 1024, 8}
3624 },
Sean Nelson28accc22010-03-19 18:47:06 +00003625 .block_erase = erase_block_82802ab,
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003626 }, {
3627 .eraseblocks = {
3628 {1024 * 1024, 1}
3629 },
Sean Nelson51c83fb2010-01-20 20:55:53 +00003630 .block_erase = NULL, /* 30 D0, only in A/A mux mode */
Carl-Daniel Hailfingeraca1dce2010-01-07 21:23:45 +00003631 },
3632 },
Sean Nelson28accc22010-03-19 18:47:06 +00003633 .unlock = unlock_82802ab,
3634 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003635 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003636 },
3637
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003638 {
3639 .vendor = "Spansion",
Michael Karcher23ff4602010-01-12 23:29:30 +00003640 .name = "S25FL008A",
3641 .bustype = CHIP_BUSTYPE_SPI,
3642 .manufacture_id = SPANSION_ID,
3643 .model_id = SPANSION_S25FL008A,
3644 .total_size = 1024,
3645 .page_size = 256,
3646 .tested = TEST_OK_PREW,
3647 .probe = probe_spi_rdid,
3648 .probe_timing = TIMING_ZERO,
Michael Karcher23ff4602010-01-12 23:29:30 +00003649 .block_erasers =
3650 {
3651 {
3652 .eraseblocks = { {64 * 1024, 16} },
3653 .block_erase = spi_block_erase_d8,
3654 }, {
3655 .eraseblocks = { {1024 * 1024, 1} },
3656 .block_erase = spi_block_erase_c7,
3657 }
3658 },
3659 .write = spi_chip_write_256,
3660 .read = spi_chip_read,
3661 },
3662
3663 {
3664 .vendor = "Spansion",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003665 .name = "S25FL016A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003666 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003667 .manufacture_id = SPANSION_ID,
3668 .model_id = SPANSION_S25FL016A,
3669 .total_size = 2048,
3670 .page_size = 256,
Sean Nelson5643c072010-01-19 03:23:07 +00003671 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003672 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003673 .probe_timing = TIMING_ZERO,
Sean Nelson5643c072010-01-19 03:23:07 +00003674 .block_erasers =
3675 {
3676 {
3677 .eraseblocks = { {64 * 1024, 32} },
3678 .block_erase = spi_block_erase_d8,
3679 }, {
3680 .eraseblocks = { {2 * 1024 * 1024, 1} },
3681 .block_erase = spi_block_erase_c7,
3682 }
3683 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003684 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003685 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003686 },
3687
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003688 {
3689 .vendor = "SST",
3690 .name = "SST25VF016B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003691 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003692 .manufacture_id = SST_ID,
3693 .model_id = SST_25VF016B,
3694 .total_size = 2048,
3695 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003696 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003697 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003698 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003699 .block_erasers =
3700 {
3701 {
3702 .eraseblocks = { {4 * 1024, 512} },
3703 .block_erase = spi_block_erase_20,
3704 }, {
3705 .eraseblocks = { {32 * 1024, 64} },
3706 .block_erase = spi_block_erase_52,
3707 }, {
3708 .eraseblocks = { {64 * 1024, 32} },
3709 .block_erase = spi_block_erase_d8,
3710 }, {
3711 .eraseblocks = { {2 * 1024 * 1024, 1} },
3712 .block_erase = spi_block_erase_60,
3713 }, {
3714 .eraseblocks = { {2 * 1024 * 1024, 1} },
3715 .block_erase = spi_block_erase_c7,
3716 },
3717 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003718 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003719 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003720 },
3721
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003722 {
3723 .vendor = "SST",
3724 .name = "SST25VF032B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003725 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003726 .manufacture_id = SST_ID,
3727 .model_id = SST_25VF032B,
3728 .total_size = 4096,
3729 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003730 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003731 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003732 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003733 .block_erasers =
3734 {
3735 {
3736 .eraseblocks = { {4 * 1024, 1024} },
3737 .block_erase = spi_block_erase_20,
3738 }, {
3739 .eraseblocks = { {32 * 1024, 128} },
3740 .block_erase = spi_block_erase_52,
3741 }, {
3742 .eraseblocks = { {64 * 1024, 64} },
3743 .block_erase = spi_block_erase_d8,
3744 }, {
3745 .eraseblocks = { {4 * 1024 * 1024, 1} },
3746 .block_erase = spi_block_erase_60,
3747 }, {
3748 .eraseblocks = { {4 * 1024 * 1024, 1} },
3749 .block_erase = spi_block_erase_c7,
3750 },
3751 },
3752 .write = spi_chip_write_1,
3753 .read = spi_chip_read,
3754 },
3755
3756 {
3757 .vendor = "SST",
3758 .name = "SST25VF040.REMS",
3759 .bustype = CHIP_BUSTYPE_SPI,
3760 .manufacture_id = SST_ID,
3761 .model_id = SST_25VF040_REMS,
3762 .total_size = 512,
3763 .page_size = 256,
3764 .tested = TEST_OK_PR,
3765 .probe = probe_spi_rems,
3766 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003767 .block_erasers =
3768 {
3769 {
3770 .eraseblocks = { {4 * 1024, 128} },
3771 .block_erase = spi_block_erase_20,
3772 }, {
3773 .eraseblocks = { {32 * 1024, 16} },
3774 .block_erase = spi_block_erase_52,
3775 }, {
3776 .eraseblocks = { {512 * 1024, 1} },
3777 .block_erase = spi_block_erase_60,
3778 },
3779 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003780 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003781 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003782 },
3783
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003784 {
3785 .vendor = "SST",
3786 .name = "SST25VF040B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003787 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003788 .manufacture_id = SST_ID,
3789 .model_id = SST_25VF040B,
3790 .total_size = 512,
3791 .page_size = 256,
3792 .tested = TEST_UNTESTED,
3793 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003794 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003795 .block_erasers =
3796 {
3797 {
3798 .eraseblocks = { {4 * 1024, 128} },
3799 .block_erase = spi_block_erase_20,
3800 }, {
3801 .eraseblocks = { {32 * 1024, 16} },
3802 .block_erase = spi_block_erase_52,
3803 }, {
3804 .eraseblocks = { {64 * 1024, 8} },
3805 .block_erase = spi_block_erase_d8,
3806 }, {
3807 .eraseblocks = { {512 * 1024, 1} },
3808 .block_erase = spi_block_erase_60,
3809 }, {
3810 .eraseblocks = { {512 * 1024, 1} },
3811 .block_erase = spi_block_erase_c7,
3812 },
3813 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003814 .write = spi_chip_write_1,
Zheng Bao0677dff2009-02-25 08:07:33 +00003815 .read = spi_chip_read,
3816 },
3817
3818 {
3819 .vendor = "SST",
Peter Stugefd9217d2009-01-26 03:37:40 +00003820 .name = "SST25VF040B.REMS",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003821 .bustype = CHIP_BUSTYPE_SPI,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003822 .manufacture_id = SST_ID,
3823 .model_id = SST_25VF040B_REMS,
Peter Stugefd9217d2009-01-26 03:37:40 +00003824 .total_size = 512,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003825 .page_size = 256,
Peter Stugefd9217d2009-01-26 03:37:40 +00003826 .tested = TEST_OK_PR,
3827 .probe = probe_spi_rems,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003828 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003829 .block_erasers =
3830 {
3831 {
3832 .eraseblocks = { {4 * 1024, 128} },
3833 .block_erase = spi_block_erase_20,
3834 }, {
3835 .eraseblocks = { {32 * 1024, 16} },
3836 .block_erase = spi_block_erase_52,
3837 }, {
3838 .eraseblocks = { {64 * 1024, 8} },
3839 .block_erase = spi_block_erase_d8,
3840 }, {
3841 .eraseblocks = { {512 * 1024, 1} },
3842 .block_erase = spi_block_erase_60,
3843 }, {
3844 .eraseblocks = { {512 * 1024, 1} },
3845 .block_erase = spi_block_erase_c7,
3846 },
3847 },
Carl-Daniel Hailfinger93bb3752009-05-13 22:19:12 +00003848 .write = spi_chip_write_1,
Peter Stugefd9217d2009-01-26 03:37:40 +00003849 .read = spi_chip_read,
3850 },
3851
3852 {
3853 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003854 .name = "SST25VF080B",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00003855 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003856 .manufacture_id = SST_ID,
3857 .model_id = SST_25VF080B,
3858 .total_size = 1024,
3859 .page_size = 256,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003860 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003861 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00003862 .probe_timing = TIMING_ZERO,
Carl-Daniel Hailfingerbbfeb702009-12-23 12:16:47 +00003863 .block_erasers =
3864 {
3865 {
3866 .eraseblocks = { {4 * 1024, 256} },
3867 .block_erase = spi_block_erase_20,
3868 }, {
3869 .eraseblocks = { {32 * 1024, 32} },
3870 .block_erase = spi_block_erase_52,
3871 }, {
3872 .eraseblocks = { {64 * 1024, 16} },
3873 .block_erase = spi_block_erase_d8,
3874 }, {
3875 .eraseblocks = { {1024 * 1024, 1} },
3876 .block_erase = spi_block_erase_60,
3877 }, {
3878 .eraseblocks = { {1024 * 1024, 1} },
3879 .block_erase = spi_block_erase_c7,
3880 },
3881 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00003882 .write = spi_chip_write_1,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003883 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00003884 },
3885
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003886 {
3887 .vendor = "SST",
3888 .name = "SST28SF040A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003889 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003890 .manufacture_id = SST_ID,
3891 .model_id = SST_28SF040,
3892 .total_size = 512,
3893 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00003894 .feature_bits = 0,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003895 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00003896 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00003897 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst28sf040.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00003898 .block_erasers =
3899 {
3900 {
3901 .eraseblocks = { {128, 4096} },
3902 .block_erase = erase_sector_28sf040,
3903 }, {
3904 .eraseblocks = { {512 * 1024, 1} },
3905 .block_erase = erase_chip_28sf040,
3906 }
3907 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003908 .write = write_28sf040,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003909 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003910 },
3911
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003912 {
3913 .vendor = "SST",
3914 .name = "SST29EE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003915 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003916 .manufacture_id = SST_ID,
3917 .model_id = SST_29EE010,
3918 .total_size = 128,
3919 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003920 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00003921 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003922 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003923 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003924 .block_erasers =
3925 {
3926 {
3927 .eraseblocks = { {128 * 1024, 1} },
3928 .block_erase = erase_chip_block_jedec,
3929 }
3930 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003931 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003932 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003933 },
3934
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003935 {
3936 .vendor = "SST",
3937 .name = "SST29LE010",
Urja Rannikko038a3122009-06-28 19:19:25 +00003938 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003939 .manufacture_id = SST_ID,
3940 .model_id = SST_29LE010,
3941 .total_size = 128,
3942 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003943 .feature_bits = FEATURE_LONG_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003944 .tested = TEST_UNTESTED,
3945 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003946 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003947 .block_erasers =
3948 {
3949 {
3950 .eraseblocks = { {128 * 1024, 1} },
3951 .block_erase = erase_chip_block_jedec,
3952 }
3953 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003954 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003955 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003956 },
3957
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003958 {
3959 .vendor = "SST",
3960 .name = "SST29EE020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00003961 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003962 .manufacture_id = SST_ID,
3963 .model_id = SST_29EE020A,
3964 .total_size = 256,
3965 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003966 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00003967 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003968 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00003969 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003970 .block_erasers =
3971 {
3972 {
3973 .eraseblocks = { {256 * 1024, 1} },
3974 .block_erase = erase_chip_block_jedec,
3975 }
3976 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003977 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00003978 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00003979 },
3980
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003981 {
3982 .vendor = "SST",
3983 .name = "SST29LE020",
Urja Rannikko038a3122009-06-28 19:19:25 +00003984 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003985 .manufacture_id = SST_ID,
3986 .model_id = SST_29LE020,
3987 .total_size = 256,
3988 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00003989 .feature_bits = FEATURE_LONG_RESET,
Michael Karcher98eff462010-03-24 22:55:56 +00003990 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00003991 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00003992 .probe_timing = 10,
Sean Nelson51c83fb2010-01-20 20:55:53 +00003993 .block_erasers =
3994 {
3995 {
3996 .eraseblocks = { {256 * 1024, 1} },
3997 .block_erase = erase_chip_block_jedec,
3998 }
3999 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004000 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004001 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004002 },
4003
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004004 {
4005 .vendor = "SST",
Uwe Hermann48da3f92010-01-23 15:15:19 +00004006 .name = "SST39SF512",
4007 .bustype = CHIP_BUSTYPE_PARALLEL,
4008 .manufacture_id = SST_ID,
4009 .model_id = SST_39SF512,
4010 .total_size = 64,
4011 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004012 .feature_bits = FEATURE_EITHER_RESET,
4013 .tested = TEST_UNTESTED,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004014 .probe = probe_jedec,
4015 .probe_timing = 1, /* 150 ns */
Uwe Hermann48da3f92010-01-23 15:15:19 +00004016 .block_erasers =
4017 {
4018 {
4019 .eraseblocks = { {4 * 1024, 16} },
4020 .block_erase = erase_sector_jedec,
4021 }, {
4022 .eraseblocks = { {64 * 1024, 1} },
4023 .block_erase = erase_chip_block_jedec,
4024 }
4025 },
Sean Nelson35727f72010-01-28 23:55:12 +00004026 .write = write_jedec_1,
Uwe Hermann48da3f92010-01-23 15:15:19 +00004027 .read = read_memmapped,
4028 },
4029
4030 {
4031 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004032 .name = "SST39SF010A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004033 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004034 .manufacture_id = SST_ID,
4035 .model_id = SST_39SF010,
4036 .total_size = 128,
4037 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004038 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004039 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004040 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004041 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004042 .block_erasers =
4043 {
4044 {
4045 .eraseblocks = { {4 * 1024, 32} },
4046 .block_erase = erase_sector_jedec,
4047 }, {
4048 .eraseblocks = { {128 * 1024, 1} },
4049 .block_erase = erase_chip_block_jedec,
4050 }
4051 },
Sean Nelson35727f72010-01-28 23:55:12 +00004052 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004053 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004054 },
4055
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004056 {
4057 .vendor = "SST",
4058 .name = "SST39SF020A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004059 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004060 .manufacture_id = SST_ID,
4061 .model_id = SST_39SF020,
4062 .total_size = 256,
4063 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004064 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00004065 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004066 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004067 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004068 .block_erasers =
4069 {
4070 {
4071 .eraseblocks = { {4 * 1024, 64} },
4072 .block_erase = erase_sector_jedec,
4073 }, {
4074 .eraseblocks = { {256 * 1024, 1} },
4075 .block_erase = erase_chip_block_jedec,
4076 }
4077 },
Sean Nelson35727f72010-01-28 23:55:12 +00004078 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004079 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004080 },
4081
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004082 {
4083 .vendor = "SST",
4084 .name = "SST39SF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004085 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004086 .manufacture_id = SST_ID,
4087 .model_id = SST_39SF040,
4088 .total_size = 512,
4089 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004090 .feature_bits = FEATURE_EITHER_RESET,
4091 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004092 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004093 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004094 .block_erasers =
4095 {
4096 {
4097 .eraseblocks = { {4 * 1024, 128} },
4098 .block_erase = erase_sector_jedec,
4099 }, {
4100 .eraseblocks = { {512 * 1024, 1} },
4101 .block_erase = erase_chip_block_jedec,
4102 }
4103 },
Sean Nelson35727f72010-01-28 23:55:12 +00004104 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004105 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004106 },
4107
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004108 {
4109 .vendor = "SST",
4110 .name = "SST39VF512",
Urja Rannikko038a3122009-06-28 19:19:25 +00004111 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004112 .manufacture_id = SST_ID,
4113 .model_id = SST_39VF512,
4114 .total_size = 64,
4115 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004116 .feature_bits = FEATURE_EITHER_RESET,
4117 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004118 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004119 .probe_timing = 1, /* 150 ns*/
Sean Nelson51c83fb2010-01-20 20:55:53 +00004120 .block_erasers =
4121 {
4122 {
4123 .eraseblocks = { {4 * 1024, 16} },
4124 .block_erase = erase_sector_jedec,
4125 }, {
4126 .eraseblocks = { {64 * 1024, 1} },
4127 .block_erase = erase_chip_block_jedec,
4128 }
4129 },
Sean Nelson35727f72010-01-28 23:55:12 +00004130 .write = write_jedec_1,
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 = "SST39VF010",
Urja Rannikko038a3122009-06-28 19:19:25 +00004137 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004138 .manufacture_id = SST_ID,
4139 .model_id = SST_39VF010,
4140 .total_size = 128,
4141 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004142 .feature_bits = FEATURE_EITHER_RESET,
4143 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004144 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004145 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004146 .block_erasers =
4147 {
4148 {
4149 .eraseblocks = { {4 * 1024, 32} },
4150 .block_erase = erase_sector_jedec,
4151 }, {
4152 .eraseblocks = { {128 * 1024, 1} },
4153 .block_erase = erase_chip_block_jedec,
4154 }
4155 },
Sean Nelson35727f72010-01-28 23:55:12 +00004156 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004157 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004158 },
4159
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004160 {
4161 .vendor = "SST",
4162 .name = "SST39VF020",
Urja Rannikko038a3122009-06-28 19:19:25 +00004163 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004164 .manufacture_id = SST_ID,
4165 .model_id = SST_39VF020,
4166 .total_size = 256,
4167 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004168 .feature_bits = FEATURE_EITHER_RESET,
4169 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004170 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004171 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004172 .block_erasers =
4173 {
4174 {
4175 .eraseblocks = { {4 * 1024, 64} },
4176 .block_erase = erase_sector_jedec,
4177 }, {
4178 .eraseblocks = { {256 * 1024, 1} },
4179 .block_erase = erase_chip_block_jedec,
4180 }
4181 },
Sean Nelson35727f72010-01-28 23:55:12 +00004182 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004183 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004184 },
4185
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004186 {
4187 .vendor = "SST",
4188 .name = "SST39VF040",
Urja Rannikko038a3122009-06-28 19:19:25 +00004189 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004190 .manufacture_id = SST_ID,
4191 .model_id = SST_39VF040,
4192 .total_size = 512,
4193 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004194 .feature_bits = FEATURE_EITHER_RESET,
4195 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004196 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004197 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004198 .block_erasers =
4199 {
4200 {
4201 .eraseblocks = { {4 * 1024, 128} },
4202 .block_erase = erase_sector_jedec,
4203 }, {
4204 .eraseblocks = { {512 * 1024, 1} },
4205 .block_erase = erase_chip_block_jedec,
4206 }
4207 },
Sean Nelson35727f72010-01-28 23:55:12 +00004208 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004209 .read = read_memmapped,
Carl-Daniel Hailfinger90eff152008-12-08 23:51:45 +00004210 },
FENG yu ningff692fb2008-12-08 18:15:10 +00004211
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004212 {
4213 .vendor = "SST",
Peter Stuge8440cc02009-01-25 23:55:12 +00004214 .name = "SST39VF080",
Urja Rannikko038a3122009-06-28 19:19:25 +00004215 .bustype = CHIP_BUSTYPE_PARALLEL,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004216 .manufacture_id = SST_ID,
4217 .model_id = SST_39VF080,
Peter Stuge8440cc02009-01-25 23:55:12 +00004218 .total_size = 1024,
4219 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004220 .feature_bits = FEATURE_EITHER_RESET,
Peter Stuge8440cc02009-01-25 23:55:12 +00004221 .tested = TEST_UNTESTED,
4222 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004223 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004224 .block_erasers =
4225 {
4226 {
4227 .eraseblocks = { {4 * 1024, 256} },
4228 .block_erase = erase_sector_jedec,
4229 }, {
4230 .eraseblocks = { {64 * 1024, 16} },
4231 .block_erase = erase_block_jedec,
4232 }, {
4233 .eraseblocks = { {1024 * 1024, 1} },
4234 .block_erase = erase_chip_block_jedec,
4235 }
4236 },
Sean Nelson35727f72010-01-28 23:55:12 +00004237 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004238 .read = read_memmapped,
Peter Stuge8440cc02009-01-25 23:55:12 +00004239 },
4240
4241 {
4242 .vendor = "SST",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004243 .name = "SST49LF002A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004244 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004245 .manufacture_id = SST_ID,
4246 .model_id = SST_49LF002A,
4247 .total_size = 256,
4248 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004249 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004250 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004251 .probe = probe_jedec,
4252 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004253 .block_erasers =
4254 {
4255 {
4256 .eraseblocks = { {4 * 1024, 64} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004257 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004258 }, {
4259 .eraseblocks = { {16 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004260 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004261 }, {
4262 .eraseblocks = { {256 * 1024, 1} },
4263 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4264 }
4265 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004266 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004267 .unlock = unlock_sst_fwhub,
4268 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004269 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004270 },
4271
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004272 {
4273 .vendor = "SST",
4274 .name = "SST49LF003A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004275 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004276 .manufacture_id = SST_ID,
4277 .model_id = SST_49LF003A,
4278 .total_size = 384,
4279 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004280 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Peter Lemenkov45835c42009-09-25 01:09:18 +00004281 .tested = TEST_OK_PR,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004282 .probe = probe_jedec,
4283 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004284 .block_erasers =
4285 {
4286 {
4287 .eraseblocks = { {4 * 1024, 96} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004288 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004289 }, {
4290 .eraseblocks = { {64 * 1024, 6} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004291 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004292 }, {
4293 .eraseblocks = { {384 * 1024, 1} },
4294 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4295 }
4296 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004297 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004298 .unlock = unlock_sst_fwhub,
4299 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004300 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004301 },
4302
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004303 {
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004304 /* Contrary to the data sheet, TBL# on the SST49LF004B affects the top 128kB (instead of 64kB)
4305 * and is only honored for 64k block erase, but not 4k sector erase.
4306 */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004307 .vendor = "SST",
4308 .name = "SST49LF004A/B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004309 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004310 .manufacture_id = SST_ID,
4311 .model_id = SST_49LF004A,
4312 .total_size = 512,
4313 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004314 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004315 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004316 .probe = probe_jedec,
4317 .probe_timing = 1, /* 150 ns */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004318 .block_erasers =
4319 {
4320 {
4321 .eraseblocks = { {4 * 1024, 128} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004322 .block_erase = erase_sector_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004323 }, {
4324 .eraseblocks = { {64 * 1024, 8} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004325 .block_erase = erase_block_jedec,
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004326 }, {
4327 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson51c83fb2010-01-20 20:55:53 +00004328 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
Carl-Daniel Hailfingera06287c2009-09-23 22:01:33 +00004329 },
4330 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004331 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004332 .unlock = unlock_sst_fwhub,
4333 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004334 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004335 },
4336
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004337 {
4338 .vendor = "SST",
4339 .name = "SST49LF004C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004340 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004341 .manufacture_id = SST_ID,
4342 .model_id = SST_49LF004C,
4343 .total_size = 512,
4344 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004345 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004346 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004347 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004348 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004349 .block_erasers =
4350 {
4351 {
4352 .eraseblocks = { {4 * 1024, 128} },
4353 .block_erase = erase_sector_49lfxxxc,
4354 }, {
4355 .eraseblocks = {
4356 {64 * 1024, 7},
4357 {32 * 1024, 1},
4358 {8 * 1024, 2},
4359 {16 * 1024, 1},
4360 },
Sean Nelson69e58112010-03-23 17:10:28 +00004361 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004362 }
4363 },
Sean Nelson69e58112010-03-23 17:10:28 +00004364 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004365 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004366 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004367 },
4368
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004369 {
4370 .vendor = "SST",
4371 .name = "SST49LF008A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004372 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004373 .manufacture_id = SST_ID,
4374 .model_id = SST_49LF008A,
4375 .total_size = 1024,
4376 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004377 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004378 .tested = TEST_OK_PREW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004379 .probe = probe_jedec,
4380 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004381 .block_erasers =
4382 {
4383 {
4384 .eraseblocks = { {4 * 1024, 256} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004385 .block_erase = erase_sector_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004386 }, {
4387 .eraseblocks = { {64 * 1024, 16} },
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004388 .block_erase = erase_block_jedec,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004389 }, {
4390 .eraseblocks = { {1024 * 1024, 1} },
4391 .block_erase = NULL, /* AA 55 80 AA 55 10, only in A/A mux mode */
4392 }
4393 },
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004394 .printlock = printlock_sst_fwhub,
Sean Nelsonccf7a2a2010-03-16 03:09:10 +00004395 .unlock = unlock_sst_fwhub,
4396 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004397 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004398 },
4399
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004400 {
4401 .vendor = "SST",
4402 .name = "SST49LF008C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004403 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004404 .manufacture_id = SST_ID,
4405 .model_id = SST_49LF008C,
4406 .total_size = 1024,
4407 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004408 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004409 .tested = TEST_UNTESTED,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004410 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004411 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004412 .block_erasers =
4413 {
4414 {
4415 .eraseblocks = { {4 * 1024, 256} },
4416 .block_erase = erase_sector_49lfxxxc,
4417 }, {
4418 .eraseblocks = {
4419 {64 * 1024, 15},
4420 {32 * 1024, 1},
4421 {8 * 1024, 2},
4422 {16 * 1024, 1},
4423 },
Sean Nelson69e58112010-03-23 17:10:28 +00004424 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004425 }
4426 },
Sean Nelson69e58112010-03-23 17:10:28 +00004427 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004428 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004429 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004430 },
4431
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004432 {
4433 .vendor = "SST",
4434 .name = "SST49LF016C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004435 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004436 .manufacture_id = SST_ID,
4437 .model_id = SST_49LF016C,
4438 .total_size = 2048,
4439 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004440 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004441 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004442 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004443 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004444 .block_erasers =
4445 {
4446 {
4447 .eraseblocks = { {4 * 1024, 512} },
4448 .block_erase = erase_sector_49lfxxxc,
4449 }, {
4450 .eraseblocks = {
4451 {64 * 1024, 31},
4452 {32 * 1024, 1},
4453 {8 * 1024, 2},
4454 {16 * 1024, 1},
4455 },
Sean Nelson69e58112010-03-23 17:10:28 +00004456 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004457 }
4458 },
Sean Nelson69e58112010-03-23 17:10:28 +00004459 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004460 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004461 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004462 },
4463
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004464 {
4465 .vendor = "SST",
4466 .name = "SST49LF020",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004467 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004468 .manufacture_id = SST_ID,
4469 .model_id = SST_49LF020,
4470 .total_size = 256,
4471 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004472 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004473 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004474 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004475 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004476 .block_erasers =
4477 {
4478 {
4479 .eraseblocks = { {4 * 1024, 64} },
4480 .block_erase = erase_sector_jedec,
4481 }, {
4482 .eraseblocks = { {16 * 1024, 16} },
4483 .block_erase = erase_block_jedec,
4484 }, {
4485 .eraseblocks = { {256 * 1024, 1} },
4486 .block_erase = NULL,
4487 }
4488 },
Sean Nelson35727f72010-01-28 23:55:12 +00004489 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004490 .read = read_memmapped,
Sven Schnellec208dfb2009-01-07 12:35:09 +00004491 },
4492
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004493 {
4494 .vendor = "SST",
4495 .name = "SST49LF020A",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004496 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004497 .manufacture_id = SST_ID,
4498 .model_id = SST_49LF020A,
4499 .total_size = 256,
Carl-Daniel Hailfingerda654322009-07-23 01:44:38 +00004500 .page_size = 4 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004501 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004502 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004503 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004504 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004505 .block_erasers =
4506 {
4507 {
4508 .eraseblocks = { {4 * 1024, 64} },
4509 .block_erase = erase_sector_jedec,
4510 }, {
4511 .eraseblocks = { {16 * 1024, 16} },
4512 .block_erase = erase_block_jedec,
4513 }, {
4514 .eraseblocks = { {256 * 1024, 1} },
4515 .block_erase = NULL,
4516 }
4517 },
Sean Nelson35727f72010-01-28 23:55:12 +00004518 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004519 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004520 },
4521
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004522 {
4523 .vendor = "SST",
4524 .name = "SST49LF040",
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004525 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004526 .manufacture_id = SST_ID,
4527 .model_id = SST_49LF040,
4528 .total_size = 512,
4529 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004530 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00004531 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004532 .probe = probe_jedec,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00004533 .probe_timing = 1, /* 150 ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004534 .block_erasers =
4535 {
4536 {
4537 .eraseblocks = { {4 * 1024, 128} },
4538 .block_erase = erase_sector_jedec,
4539 }, {
4540 .eraseblocks = { {64 * 1024, 8} },
4541 .block_erase = erase_block_jedec,
4542 }, {
4543 .eraseblocks = { {512 * 1024, 1} },
4544 .block_erase = NULL,
4545 }
4546 },
Sean Nelson35727f72010-01-28 23:55:12 +00004547 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004548 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004549 },
4550
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004551 {
4552 .vendor = "SST",
4553 .name = "SST49LF040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004554 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004555 .manufacture_id = SST_ID,
4556 .model_id = SST_49LF040B,
4557 .total_size = 512,
4558 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004559 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004560 .tested = TEST_OK_PR,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004561 .probe = probe_jedec,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004562 .probe_timing = 1, /* 150ns */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004563 .block_erasers =
4564 {
4565 {
4566 .eraseblocks = { {4 * 1024, 128} },
4567 .block_erase = erase_sector_jedec,
4568 }, {
4569 .eraseblocks = { {64 * 1024, 8} },
4570 .block_erase = erase_block_jedec,
4571 }, {
4572 .eraseblocks = { {512 * 1024, 1} },
4573 .block_erase = NULL,
4574 }
4575 },
Sean Nelson35727f72010-01-28 23:55:12 +00004576 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004577 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004578 },
4579
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004580 {
4581 .vendor = "SST",
4582 .name = "SST49LF080A",
Urja Rannikko038a3122009-06-28 19:19:25 +00004583 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004584 .manufacture_id = SST_ID,
Urja Rannikko038a3122009-06-28 19:19:25 +00004585 .model_id = SST_49LF080A,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004586 .total_size = 1024,
4587 .page_size = 4096,
Sean Nelson35727f72010-01-28 23:55:12 +00004588 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00004589 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004590 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004591 .probe_timing = TIMING_FIXME,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004592 .block_erasers =
4593 {
4594 {
4595 .eraseblocks = { {4 * 1024, 256} },
4596 .block_erase = erase_sector_jedec,
4597 }, {
4598 .eraseblocks = { {64 * 1024, 16} },
4599 .block_erase = erase_block_jedec,
4600 }, {
4601 .eraseblocks = { {1024 * 1024, 1} },
4602 .block_erase = NULL,
4603 }
4604 },
Sean Nelson35727f72010-01-28 23:55:12 +00004605 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004606 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004607 },
4608
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004609 {
4610 .vendor = "SST",
4611 .name = "SST49LF160C",
Urja Rannikko038a3122009-06-28 19:19:25 +00004612 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004613 .manufacture_id = SST_ID,
4614 .model_id = SST_49LF160C,
4615 .total_size = 2048,
4616 .page_size = 4 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004617 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004618 .tested = TEST_OK_PRW,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00004619 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00004620 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson51c83fb2010-01-20 20:55:53 +00004621 .block_erasers =
4622 {
4623 {
4624 .eraseblocks = { {4 * 1024, 512} },
4625 .block_erase = erase_sector_49lfxxxc,
4626 }, {
4627 .eraseblocks = {
4628 {64 * 1024, 31},
4629 {32 * 1024, 1},
4630 {8 * 1024, 2},
4631 {16 * 1024, 1},
4632 },
Sean Nelson69e58112010-03-23 17:10:28 +00004633 .block_erase = erase_block_82802ab,
Sean Nelson51c83fb2010-01-20 20:55:53 +00004634 }
4635 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00004636 .unlock = unlock_49lfxxxc,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004637 .write = write_49lfxxxc,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004638 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004639 },
4640
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004641 {
4642 .vendor = "ST",
4643 .name = "M25P05-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004644 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004645 .manufacture_id = ST_ID,
4646 .model_id = ST_M25P05A,
4647 .total_size = 64,
4648 .page_size = 256,
4649 .tested = TEST_UNTESTED,
4650 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004651 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004652 .block_erasers =
4653 {
4654 {
4655 .eraseblocks = { {32 * 1024, 2} },
4656 .block_erase = spi_block_erase_d8,
4657 }, {
4658 .eraseblocks = { {64 * 1024, 1} },
4659 .block_erase = spi_block_erase_c7,
4660 }
4661 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004662 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004663 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004664 },
4665
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004666 /* The ST M25P05 is a bit of a problem. It has the same ID as the
4667 * ST M25P05-A in RES mode, but supports only 128 byte writes instead
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004668 * of 256 byte writes. We rely heavily on the fact that probe_spi_res1
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004669 * only is successful if RDID does not work.
4670 */
4671 {
4672 .vendor = "ST",
4673 .name = "M25P05.RES",
4674 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004675 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004676 .model_id = ST_M25P05_RES,
4677 .total_size = 64,
4678 .page_size = 256,
4679 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004680 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004681 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004682 .block_erasers =
4683 {
4684 {
4685 .eraseblocks = { {32 * 1024, 2} },
4686 .block_erase = spi_block_erase_d8,
4687 }, {
4688 .eraseblocks = { {64 * 1024, 1} },
4689 .block_erase = spi_block_erase_c7,
4690 }
4691 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004692 .write = spi_chip_write_1, /* 128 */
4693 .read = spi_chip_read,
4694 },
4695
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004696 {
4697 .vendor = "ST",
4698 .name = "M25P10-A",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004699 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004700 .manufacture_id = ST_ID,
4701 .model_id = ST_M25P10A,
4702 .total_size = 128,
4703 .page_size = 256,
4704 .tested = TEST_UNTESTED,
4705 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004706 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004707 .block_erasers =
4708 {
4709 {
4710 .eraseblocks = { {32 * 1024, 4} },
4711 .block_erase = spi_block_erase_d8,
4712 }, {
4713 .eraseblocks = { {128 * 1024, 1} },
4714 .block_erase = spi_block_erase_c7,
4715 }
4716 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004717 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004718 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004719 },
4720
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004721 /* The ST M25P10 has the same problem as the M25P05. */
4722 {
4723 .vendor = "ST",
4724 .name = "M25P10.RES",
4725 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004726 .manufacture_id = 0, /* Not used. */
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004727 .model_id = ST_M25P10_RES,
4728 .total_size = 128,
4729 .page_size = 256,
4730 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004731 .probe = probe_spi_res1,
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004732 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004733 .block_erasers =
4734 {
4735 {
4736 .eraseblocks = { {32 * 1024, 4} },
4737 .block_erase = spi_block_erase_d8,
4738 }, {
4739 .eraseblocks = { {128 * 1024, 1} },
4740 .block_erase = spi_block_erase_c7,
4741 }
4742 },
Carl-Daniel Hailfinger32961be2009-07-23 01:40:20 +00004743 .write = spi_chip_write_1, /* 128 */
4744 .read = spi_chip_read,
4745 },
4746
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004747 {
4748 .vendor = "ST",
4749 .name = "M25P20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004750 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004751 .manufacture_id = ST_ID,
4752 .model_id = ST_M25P20,
4753 .total_size = 256,
4754 .page_size = 256,
4755 .tested = TEST_UNTESTED,
4756 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004757 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004758 .block_erasers =
4759 {
4760 {
4761 .eraseblocks = { {64 * 1024, 4} },
4762 .block_erase = spi_block_erase_d8,
4763 }, {
4764 .eraseblocks = { {256 * 1024, 1} },
4765 .block_erase = spi_block_erase_c7,
4766 }
4767 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004768 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004769 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004770 },
4771
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004772 {
4773 .vendor = "ST",
4774 .name = "M25P40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004775 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004776 .manufacture_id = ST_ID,
4777 .model_id = ST_M25P40,
4778 .total_size = 512,
4779 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004780 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004781 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004782 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004783 .block_erasers =
4784 {
4785 {
4786 .eraseblocks = { {64 * 1024, 8} },
4787 .block_erase = spi_block_erase_d8,
4788 }, {
4789 .eraseblocks = { {512 * 1024, 1} },
4790 .block_erase = spi_block_erase_c7,
4791 }
4792 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004793 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004794 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004795 },
4796
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004797 {
4798 .vendor = "ST",
4799 .name = "M25P40-old",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004800 .bustype = CHIP_BUSTYPE_SPI,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004801 .manufacture_id = 0, /* Not used. */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004802 .model_id = ST_M25P40_RES,
4803 .total_size = 512,
4804 .page_size = 256,
4805 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingerdc1cda12010-05-28 17:07:57 +00004806 .probe = probe_spi_res1,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004807 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004808 .block_erasers =
4809 {
4810 {
4811 .eraseblocks = { {64 * 1024, 8} },
4812 .block_erase = spi_block_erase_d8,
4813 }, {
4814 .eraseblocks = { {512 * 1024, 1} },
4815 .block_erase = spi_block_erase_c7,
4816 }
4817 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004818 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004819 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004820 },
4821
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004822 {
4823 .vendor = "ST",
4824 .name = "M25P80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004825 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004826 .manufacture_id = ST_ID,
4827 .model_id = ST_M25P80,
4828 .total_size = 1024,
4829 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004830 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004831 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004832 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004833 .block_erasers =
4834 {
4835 {
4836 .eraseblocks = { {64 * 1024, 16} },
4837 .block_erase = spi_block_erase_d8,
4838 }, {
4839 .eraseblocks = { {1024 * 1024, 1} },
4840 .block_erase = spi_block_erase_c7,
4841 }
4842 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004843 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004844 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004845 },
4846
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004847 {
4848 .vendor = "ST",
4849 .name = "M25P16",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004850 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004851 .manufacture_id = ST_ID,
4852 .model_id = ST_M25P16,
4853 .total_size = 2048,
4854 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004855 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004856 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004857 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004858 .block_erasers =
4859 {
4860 {
4861 .eraseblocks = { {64 * 1024, 32} },
4862 .block_erase = spi_block_erase_d8,
4863 }, {
4864 .eraseblocks = { {2 * 1024 * 1024, 1} },
4865 .block_erase = spi_block_erase_c7,
4866 }
4867 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004868 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004869 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004870 },
4871
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004872 {
4873 .vendor = "ST",
4874 .name = "M25P32",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004875 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004876 .manufacture_id = ST_ID,
4877 .model_id = ST_M25P32,
4878 .total_size = 4096,
4879 .page_size = 256,
Sean Nelson56358aa2010-01-19 16:08:51 +00004880 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004881 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004882 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004883 .block_erasers =
4884 {
4885 {
4886 .eraseblocks = { {64 * 1024, 64} },
4887 .block_erase = spi_block_erase_d8,
4888 }, {
4889 .eraseblocks = { {4 * 1024 * 1024, 1} },
4890 .block_erase = spi_block_erase_c7,
4891 }
4892 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004893 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004894 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004895 },
4896
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004897 {
4898 .vendor = "ST",
4899 .name = "M25P64",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004900 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004901 .manufacture_id = ST_ID,
4902 .model_id = ST_M25P64,
4903 .total_size = 8192,
4904 .page_size = 256,
4905 .tested = TEST_UNTESTED,
4906 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004907 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004908 .block_erasers =
4909 {
4910 {
4911 .eraseblocks = { {64 * 1024, 128} },
4912 .block_erase = spi_block_erase_d8,
4913 }, {
4914 .eraseblocks = { {8 * 1024 * 1024, 1} },
4915 .block_erase = spi_block_erase_c7,
4916 }
4917 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004918 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004919 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004920 },
4921
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004922 {
4923 .vendor = "ST",
4924 .name = "M25P128",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00004925 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004926 .manufacture_id = ST_ID,
4927 .model_id = ST_M25P128,
4928 .total_size = 16384,
4929 .page_size = 256,
4930 .tested = TEST_UNTESTED,
4931 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00004932 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00004933 .block_erasers =
4934 {
4935 {
4936 .eraseblocks = { {256 * 1024, 64} },
4937 .block_erase = spi_block_erase_d8,
4938 }, {
4939 .eraseblocks = { {16 * 1024 * 1024, 1} },
4940 .block_erase = spi_block_erase_c7,
4941 }
4942 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00004943 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004944 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00004945 },
4946
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004947 {
4948 .vendor = "ST",
4949 .name = "M29F002B",
Urja Rannikko038a3122009-06-28 19:19:25 +00004950 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004951 .manufacture_id = ST_ID,
4952 .model_id = ST_M29F002B,
4953 .total_size = 256,
4954 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004955 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004956 .tested = TEST_UNTESTED,
4957 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004958 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004959 .block_erasers =
4960 {
4961 {
4962 .eraseblocks = {
4963 {16 * 1024, 1},
4964 {8 * 1024, 2},
4965 {32 * 1024, 1},
4966 {64 * 1024, 3},
4967 },
4968 .block_erase = erase_sector_jedec,
4969 }, {
4970 .eraseblocks = { {256 * 1024, 1} },
4971 .block_erase = erase_chip_block_jedec,
4972 }
4973 },
Sean Nelson35727f72010-01-28 23:55:12 +00004974 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00004975 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00004976 },
4977
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004978 {
4979 .vendor = "ST",
4980 .name = "M29F002T/NT",
Urja Rannikko038a3122009-06-28 19:19:25 +00004981 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004982 .manufacture_id = ST_ID,
4983 .model_id = ST_M29F002T,
4984 .total_size = 256,
4985 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00004986 .feature_bits = FEATURE_ADDR_AAA | FEATURE_EITHER_RESET,
4987 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00004988 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00004989 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00004990 .block_erasers =
4991 {
4992 {
4993 .eraseblocks = {
4994 {64 * 1024, 3},
4995 {32 * 1024, 1},
4996 {8 * 1024, 2},
4997 {16 * 1024, 1},
4998 },
4999 .block_erase = erase_sector_jedec,
5000 }, {
5001 .eraseblocks = { {256 * 1024, 1} },
5002 .block_erase = erase_chip_block_jedec,
5003 }
5004 },
Sean Nelson35727f72010-01-28 23:55:12 +00005005 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005006 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005007 },
5008
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005009 {
5010 .vendor = "ST",
5011 .name = "M29F040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005012 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005013 .manufacture_id = ST_ID,
5014 .model_id = ST_M29F040B,
5015 .total_size = 512,
5016 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005017 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5018 .tested = TEST_UNTESTED,
5019 .probe = probe_jedec,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005020 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (am29f040b.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005021 .block_erasers =
5022 {
5023 {
5024 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson35727f72010-01-28 23:55:12 +00005025 .block_erase = erase_sector_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005026 }, {
5027 .eraseblocks = { {512 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005028 .block_erase = erase_chip_block_jedec,
Sean Nelson56358aa2010-01-19 16:08:51 +00005029 }
5030 },
Sean Nelson35727f72010-01-28 23:55:12 +00005031 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005032 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005033 },
5034
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005035 {
Sean Nelson35727f72010-01-28 23:55:12 +00005036 /* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005037 .vendor = "ST",
5038 .name = "M29F400BT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005039 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005040 .manufacture_id = ST_ID,
5041 .model_id = ST_M29F400BT,
5042 .total_size = 512,
5043 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005044 .feature_bits = FEATURE_ADDR_SHIFTED | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005045 .tested = TEST_UNTESTED,
5046 .probe = probe_m29f400bt,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005047 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (m29f400bt.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005048 .block_erasers =
5049 {
5050 {
5051 .eraseblocks = {
5052 {64 * 1024, 7},
5053 {32 * 1024, 1},
5054 {8 * 1024, 2},
5055 {16 * 1024, 1},
5056 },
5057 .block_erase = block_erase_m29f400bt,
5058 }, {
5059 .eraseblocks = { {512 * 1024, 1} },
5060 .block_erase = block_erase_chip_m29f400bt,
5061 }
5062 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005063 .write = write_coreboot_m29f400bt,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005064 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005065 },
5066
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005067 {
5068 .vendor = "ST",
5069 .name = "M29W010B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005070 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005071 .manufacture_id = ST_ID,
5072 .model_id = ST_M29W010B,
5073 .total_size = 128,
5074 .page_size = 16 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005075 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005076 .tested = TEST_UNTESTED,
5077 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005078 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005079 .block_erasers =
5080 {
5081 {
5082 .eraseblocks = { {16 * 1024, 8}, },
5083 .block_erase = erase_sector_jedec,
5084 }, {
5085 .eraseblocks = { {128 * 1024, 1} },
5086 .block_erase = erase_chip_block_jedec,
5087 }
5088 },
Sean Nelson35727f72010-01-28 23:55:12 +00005089 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005090 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005091 },
5092
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005093 {
5094 .vendor = "ST",
5095 .name = "M29W040B",
Urja Rannikko038a3122009-06-28 19:19:25 +00005096 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005097 .manufacture_id = ST_ID,
5098 .model_id = ST_M29W040B,
5099 .total_size = 512,
5100 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00005101 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005102 .tested = TEST_UNTESTED,
5103 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005104 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005105 .block_erasers =
5106 {
5107 {
5108 .eraseblocks = { {64 * 1024, 8}, },
5109 .block_erase = erase_sector_jedec,
5110 }, {
5111 .eraseblocks = { {512 * 1024, 1} },
5112 .block_erase = erase_chip_block_jedec,
5113 }
5114 },
Sean Nelson35727f72010-01-28 23:55:12 +00005115 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005116 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005117 },
5118
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005119 {
5120 .vendor = "ST",
5121 .name = "M29W512B",
5122 .bustype = CHIP_BUSTYPE_PARALLEL,
5123 .manufacture_id = ST_ID,
5124 .model_id = ST_M29W512B,
5125 .total_size = 64,
5126 .page_size = 64 * 1024,
5127 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
5128 .tested = TEST_OK_PREW,
5129 .probe = probe_jedec,
5130 .probe_timing = TIMING_ZERO,
Jeffrey A. Kentba7c9222010-02-01 05:49:46 +00005131 .block_erasers =
5132 {
5133 {
5134 .eraseblocks = { {64 * 1024, 1} },
5135 .block_erase = erase_chip_block_jedec,
5136 }
5137 },
5138 .write = write_jedec_1,
5139 .read = read_memmapped,
5140 },
5141
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005142 {
5143 .vendor = "ST",
5144 .name = "M50FLW040A",
Sean Nelson35727f72010-01-28 23:55:12 +00005145 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005146 .manufacture_id = ST_ID,
5147 .model_id = ST_M50FLW040A,
5148 .total_size = 512,
5149 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005150 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005151 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005152 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005153 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005154 .block_erasers =
5155 {
5156 {
Sean Nelson329bde72010-01-19 16:39:19 +00005157 .eraseblocks = {
5158 {4 * 1024, 16}, /* sector */
5159 {64 * 1024, 5}, /* block */
5160 {4 * 1024, 16}, /* sector */
5161 {4 * 1024, 16}, /* sector */
5162 },
5163 .block_erase = NULL,
5164 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005165 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005166 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005167 }, {
5168 .eraseblocks = { {512 * 1024, 1} },
5169 .block_erase = erase_chip_stm50flw0x0x,
5170 }
5171 },
Sean Nelson28accc22010-03-19 18:47:06 +00005172 .unlock = unlock_stm50flw0x0x,
5173 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005174 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005175 },
5176
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005177 {
5178 .vendor = "ST",
5179 .name = "M50FLW040B",
Sean Nelson35727f72010-01-28 23:55:12 +00005180 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005181 .manufacture_id = ST_ID,
5182 .model_id = ST_M50FLW040B,
5183 .total_size = 512,
5184 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005185 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005186 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005187 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005188 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005189 .block_erasers =
5190 {
5191 {
Sean Nelson329bde72010-01-19 16:39:19 +00005192 .eraseblocks = {
5193 {4 * 1024, 16}, /* sector */
5194 {4 * 1024, 16}, /* sector */
5195 {64 * 1024, 5}, /* block */
5196 {4 * 1024, 16}, /* sector */
5197 },
5198 .block_erase = NULL,
5199 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005200 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005201 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005202 }, {
5203 .eraseblocks = { {512 * 1024, 1} },
5204 .block_erase = erase_chip_stm50flw0x0x,
5205 }
5206 },
Sean Nelson28accc22010-03-19 18:47:06 +00005207 .unlock = unlock_stm50flw0x0x,
5208 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005209 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005210 },
5211
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005212 {
5213 .vendor = "ST",
5214 .name = "M50FLW080A",
Sean Nelson35727f72010-01-28 23:55:12 +00005215 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005216 .manufacture_id = ST_ID,
5217 .model_id = ST_M50FLW080A,
5218 .total_size = 1024,
5219 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005220 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson35727f72010-01-28 23:55:12 +00005221 .tested = TEST_UNTESTED,
5222 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005223 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005224 .block_erasers =
5225 {
5226 {
Sean Nelson329bde72010-01-19 16:39:19 +00005227 .eraseblocks = {
5228 {4 * 1024, 16}, /* sector */
5229 {64 * 1024, 13}, /* block */
5230 {4 * 1024, 16}, /* sector */
5231 {4 * 1024, 16}, /* sector */
5232 },
5233 .block_erase = NULL,
5234 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005235 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005236 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005237 }, {
5238 .eraseblocks = { {1024 * 1024, 1} },
5239 .block_erase = erase_chip_stm50flw0x0x,
5240 }
5241 },
Sean Nelson28accc22010-03-19 18:47:06 +00005242 .unlock = unlock_stm50flw0x0x,
5243 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005244 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005245 },
5246
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005247 {
5248 .vendor = "ST",
5249 .name = "M50FLW080B",
Sean Nelson35727f72010-01-28 23:55:12 +00005250 .bustype = CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005251 .manufacture_id = ST_ID,
5252 .model_id = ST_M50FLW080B,
5253 .total_size = 1024,
5254 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005255 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005256 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005257 .probe = probe_82802ab,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00005258 .probe_timing = TIMING_FIXME,
Sean Nelson56358aa2010-01-19 16:08:51 +00005259 .block_erasers =
5260 {
5261 {
Sean Nelson329bde72010-01-19 16:39:19 +00005262 .eraseblocks = {
5263 {4 * 1024, 16}, /* sector */
5264 {4 * 1024, 16}, /* sector */
5265 {64 * 1024, 13}, /* block */
5266 {4 * 1024, 16}, /* sector */
5267 },
5268 .block_erase = NULL,
5269 }, {
Sean Nelson56358aa2010-01-19 16:08:51 +00005270 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005271 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005272 }, {
5273 .eraseblocks = { {1024 * 1024, 1} },
5274 .block_erase = erase_chip_stm50flw0x0x,
5275 }
5276 },
Sean Nelson28accc22010-03-19 18:47:06 +00005277 .unlock = unlock_stm50flw0x0x,
5278 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005279 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005280 },
5281
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005282 {
5283 .vendor = "ST",
5284 .name = "M50FW002",
Urja Rannikko038a3122009-06-28 19:19:25 +00005285 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005286 .manufacture_id = ST_ID,
5287 .model_id = ST_M50FW002,
5288 .total_size = 256,
5289 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005290 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005291 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005292 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005293 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (sst49lfxxxc.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005294 .block_erasers =
5295 {
5296 {
5297 .eraseblocks = {
5298 {64 * 1024, 3},
5299 {32 * 1024, 1},
5300 {8 * 1024, 2},
5301 {16 * 1024, 1},
5302 },
Sean Nelson28accc22010-03-19 18:47:06 +00005303 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005304 }, {
5305 .eraseblocks = { {256 * 1024, 1} },
5306 .block_erase = erase_chip_stm50flw0x0x,
5307 }
5308 },
Sean Nelson28accc22010-03-19 18:47:06 +00005309 .unlock = unlock_stm50flw0x0x,
5310 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005311 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005312 },
5313
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005314 {
5315 .vendor = "ST",
5316 .name = "M50FW016",
Urja Rannikko038a3122009-06-28 19:19:25 +00005317 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005318 .manufacture_id = ST_ID,
5319 .model_id = ST_M50FW016,
5320 .total_size = 2048,
5321 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005322 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005323 .tested = TEST_UNTESTED,
5324 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005325 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005326 .block_erasers =
5327 {
5328 {
5329 .eraseblocks = { {64 * 1024, 32}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005330 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005331 }, {
5332 .eraseblocks = { {2 * 1024 * 1024, 1} },
5333 .block_erase = erase_chip_stm50flw0x0x,
5334 }
5335 },
Sean Nelson28accc22010-03-19 18:47:06 +00005336 .unlock = unlock_stm50flw0x0x,
5337 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005338 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005339 },
5340
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005341 {
5342 .vendor = "ST",
5343 .name = "M50FW040",
Urja Rannikko038a3122009-06-28 19:19:25 +00005344 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005345 .manufacture_id = ST_ID,
5346 .model_id = ST_M50FW040,
5347 .total_size = 512,
5348 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005349 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005350 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005351 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005352 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005353 .block_erasers =
5354 {
5355 {
5356 .eraseblocks = { {64 * 1024, 8}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005357 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005358 }, {
5359 .eraseblocks = { {512 * 1024, 1} },
5360 .block_erase = erase_chip_stm50flw0x0x,
5361 }
5362 },
Sean Nelson28accc22010-03-19 18:47:06 +00005363 .unlock = unlock_stm50flw0x0x,
5364 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005365 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005366 },
5367
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005368 {
5369 .vendor = "ST",
5370 .name = "M50FW080",
Urja Rannikko038a3122009-06-28 19:19:25 +00005371 .bustype = CHIP_BUSTYPE_FWH, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005372 .manufacture_id = ST_ID,
5373 .model_id = ST_M50FW080,
5374 .total_size = 1024,
5375 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005376 .feature_bits = FEATURE_REGISTERMAP,
Sean Nelson28accc22010-03-19 18:47:06 +00005377 .tested = TEST_OK_PR,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005378 .probe = probe_82802ab,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005379 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (82802ab.c) */
Sean Nelson56358aa2010-01-19 16:08:51 +00005380 .block_erasers =
5381 {
5382 {
5383 .eraseblocks = { {64 * 1024, 16}, },
Sean Nelson28accc22010-03-19 18:47:06 +00005384 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005385 }, {
5386 .eraseblocks = { {1024 * 1024, 1} },
5387 .block_erase = erase_chip_stm50flw0x0x,
5388 }
5389 },
Sean Nelson28accc22010-03-19 18:47:06 +00005390 .unlock = unlock_stm50flw0x0x,
5391 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005392 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005393 },
5394
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005395 {
5396 .vendor = "ST",
5397 .name = "M50LPW116",
Urja Rannikko038a3122009-06-28 19:19:25 +00005398 .bustype = CHIP_BUSTYPE_LPC, /* A/A Mux */
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005399 .manufacture_id = ST_ID,
5400 .model_id = ST_M50LPW116,
5401 .total_size = 2048,
5402 .page_size = 64 * 1024,
Carl-Daniel Hailfinger81449a22010-03-15 03:48:42 +00005403 .feature_bits = FEATURE_REGISTERMAP,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005404 .tested = TEST_UNTESTED,
Sean Nelson35727f72010-01-28 23:55:12 +00005405 .probe = probe_82802ab,
Udu Ogahc04ee222009-09-05 01:31:32 +00005406 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005407 .block_erasers =
5408 {
5409 {
5410 .eraseblocks = {
5411 {4 * 1024, 16},
5412 {64 * 1024, 30},
5413 {32 * 1024, 1},
5414 {8 * 1024, 2},
5415 {16 * 1024, 1},
5416 },
Sean Nelson28accc22010-03-19 18:47:06 +00005417 .block_erase = erase_block_82802ab,
Sean Nelson56358aa2010-01-19 16:08:51 +00005418 }, {
5419 .eraseblocks = { {2 * 1024 * 1024, 1} },
Sean Nelson35727f72010-01-28 23:55:12 +00005420 .block_erase = erase_chip_stm50flw0x0x,
Sean Nelson56358aa2010-01-19 16:08:51 +00005421 }
5422 },
Sean Nelson28accc22010-03-19 18:47:06 +00005423 .unlock = unlock_stm50flw0x0x,
5424 .write = write_82802ab,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005425 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005426 },
5427
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005428 {
5429 .vendor = "SyncMOS",
5430 .name = "S29C31004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005431 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005432 .manufacture_id = SYNCMOS_ID,
5433 .model_id = S29C31004T,
5434 .total_size = 512,
5435 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005436 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005437 .tested = TEST_UNTESTED,
5438 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005439 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005440 .block_erasers =
5441 {
5442 {
5443 .eraseblocks = { {1 * 1024, 512} },
5444 .block_erase = erase_sector_jedec,
5445 }, {
5446 .eraseblocks = { {512 * 1024, 1} },
5447 .block_erase = erase_chip_block_jedec,
5448 },
5449 },
Sean Nelson35727f72010-01-28 23:55:12 +00005450 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005451 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005452 },
5453
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005454 {
5455 .vendor = "SyncMOS",
5456 .name = "S29C51001T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005457 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005458 .manufacture_id = SYNCMOS_ID,
5459 .model_id = S29C51001T,
5460 .total_size = 128,
5461 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005462 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005463 .tested = TEST_UNTESTED,
5464 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005465 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005466 .block_erasers =
5467 {
5468 {
5469 .eraseblocks = { {512, 256} },
5470 .block_erase = erase_sector_jedec,
5471 }, {
5472 .eraseblocks = { {128 * 1024, 1} },
5473 .block_erase = erase_chip_block_jedec,
5474 },
5475 },
Sean Nelson35727f72010-01-28 23:55:12 +00005476 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005477 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005478 },
5479
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005480 {
5481 .vendor = "SyncMOS",
5482 .name = "S29C51002T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005483 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005484 .manufacture_id = SYNCMOS_ID,
5485 .model_id = S29C51002T,
5486 .total_size = 256,
5487 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005488 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005489 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005490 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005491 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005492 .block_erasers =
5493 {
5494 {
5495 .eraseblocks = { {512, 512} },
5496 .block_erase = erase_sector_jedec,
5497 }, {
5498 .eraseblocks = { {256 * 1024, 1} },
5499 .block_erase = erase_chip_block_jedec,
5500 },
5501 },
Sean Nelson35727f72010-01-28 23:55:12 +00005502 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005503 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005504 },
5505
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005506 {
5507 .vendor = "SyncMOS",
5508 .name = "S29C51004T",
Urja Rannikko038a3122009-06-28 19:19:25 +00005509 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005510 .manufacture_id = SYNCMOS_ID,
5511 .model_id = S29C51004T,
5512 .total_size = 512,
5513 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005514 .feature_bits = FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005515 .tested = TEST_UNTESTED,
5516 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005517 .probe_timing = TIMING_ZERO,
Sean Nelson56358aa2010-01-19 16:08:51 +00005518 .block_erasers =
5519 {
5520 {
Sean Nelson012a31e2010-01-19 20:23:26 +00005521 .eraseblocks = { {1 * 1024, 512} },
Sean Nelson56358aa2010-01-19 16:08:51 +00005522 .block_erase = erase_sector_jedec,
5523 }, {
5524 .eraseblocks = { {512 * 1024, 1} },
5525 .block_erase = erase_chip_block_jedec,
5526 },
5527 },
Sean Nelson35727f72010-01-28 23:55:12 +00005528 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005529 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005530 },
5531
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005532 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005533 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005534 .name = "TMS29F002RB",
Urja Rannikko038a3122009-06-28 19:19:25 +00005535 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005536 .manufacture_id = TI_OLD_ID,
5537 .model_id = TI_TMS29F002RB,
5538 .total_size = 256,
5539 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005540 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005541 .tested = TEST_UNTESTED,
5542 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005543 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005544 .block_erasers =
5545 {
5546 {
5547 .eraseblocks = {
5548 {16 * 1024, 1},
5549 {8 * 1024, 2},
5550 {32 * 1024, 1},
5551 {64 * 1024, 3},
5552 },
5553 .block_erase = erase_sector_jedec,
5554 }, {
5555 .eraseblocks = { {256 * 1024, 1} },
5556 .block_erase = erase_chip_block_jedec,
5557 },
5558 },
Sean Nelson35727f72010-01-28 23:55:12 +00005559 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005560 .read = read_memmapped,
5561 },
5562
5563 {
Uwe Hermanna106d152009-05-27 23:17:40 +00005564 .vendor = "TI",
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005565 .name = "TMS29F002RT",
Urja Rannikko038a3122009-06-28 19:19:25 +00005566 .bustype = CHIP_BUSTYPE_PARALLEL,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005567 .manufacture_id = TI_OLD_ID,
5568 .model_id = TI_TMS29F002RT,
5569 .total_size = 256,
5570 .page_size = 16384, /* Non-uniform sectors */
Sean Nelson35727f72010-01-28 23:55:12 +00005571 .feature_bits = FEATURE_ADDR_2AA | FEATURE_EITHER_RESET,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005572 .tested = TEST_UNTESTED,
5573 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005574 .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
Sean Nelson56358aa2010-01-19 16:08:51 +00005575 .block_erasers =
5576 {
5577 {
5578 .eraseblocks = {
5579 {64 * 1024, 3},
5580 {32 * 1024, 1},
5581 {8 * 1024, 2},
5582 {16 * 1024, 1},
5583 },
5584 .block_erase = erase_sector_jedec,
5585 }, {
5586 .eraseblocks = { {256 * 1024, 1} },
5587 .block_erase = erase_chip_block_jedec,
5588 },
5589 },
Sean Nelson35727f72010-01-28 23:55:12 +00005590 .write = write_jedec_1,
Carl-Daniel Hailfinger09b4fb72009-05-26 21:26:23 +00005591 .read = read_memmapped,
5592 },
5593
5594 {
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005595 .vendor = "Winbond",
Rudolf Marekce1c7982010-04-20 19:34:31 +00005596 .name = "W25Q80",
5597 .bustype = CHIP_BUSTYPE_SPI,
5598 .manufacture_id = WINBOND_NEX_ID,
5599 .model_id = W_25Q80,
5600 .total_size = 1024,
5601 .page_size = 256,
5602 .tested = TEST_UNTESTED,
5603 .probe = probe_spi_rdid,
5604 .probe_timing = TIMING_ZERO,
5605 .block_erasers =
5606 {
5607 {
5608 .eraseblocks = { {4 * 1024, 256} },
5609 .block_erase = spi_block_erase_20,
5610 }, {
5611 .eraseblocks = { {32 * 1024, 32} },
5612 .block_erase = spi_block_erase_52,
5613 }, {
5614 .eraseblocks = { {64 * 1024, 16} },
5615 .block_erase = spi_block_erase_d8,
5616 }, {
5617 .eraseblocks = { {1024 * 1024, 1} },
5618 .block_erase = spi_block_erase_60,
5619 }, {
5620 .eraseblocks = { {1024 * 1024, 1} },
5621 .block_erase = spi_block_erase_c7,
5622 }
5623 },
5624 .write = spi_chip_write_256,
5625 .read = spi_chip_read,
5626 },
5627
5628 {
5629 .vendor = "Winbond",
5630 .name = "W25Q16",
5631 .bustype = CHIP_BUSTYPE_SPI,
5632 .manufacture_id = WINBOND_NEX_ID,
5633 .model_id = W_25Q16,
5634 .total_size = 2048,
5635 .page_size = 256,
5636 .tested = TEST_UNTESTED,
5637 .probe = probe_spi_rdid,
5638 .probe_timing = TIMING_ZERO,
5639 .block_erasers =
5640 {
5641 {
5642 .eraseblocks = { {4 * 1024, 512} },
5643 .block_erase = spi_block_erase_20,
5644 }, {
5645 .eraseblocks = { {32 * 1024, 64} },
5646 .block_erase = spi_block_erase_52,
5647 }, {
5648 .eraseblocks = { {64 * 1024, 32} },
5649 .block_erase = spi_block_erase_d8,
5650 }, {
5651 .eraseblocks = { {2 * 1024 * 1024, 1} },
5652 .block_erase = spi_block_erase_60,
5653 }, {
5654 .eraseblocks = { {2 * 1024 * 1024, 1} },
5655 .block_erase = spi_block_erase_c7,
5656 }
5657 },
5658 .write = spi_chip_write_256,
5659 .read = spi_chip_read,
5660 },
5661
5662 {
5663 .vendor = "Winbond",
5664 .name = "W25Q32",
5665 .bustype = CHIP_BUSTYPE_SPI,
5666 .manufacture_id = WINBOND_NEX_ID,
5667 .model_id = W_25Q32,
5668 .total_size = 4096,
5669 .page_size = 256,
5670 .tested = TEST_UNTESTED,
5671 .probe = probe_spi_rdid,
5672 .probe_timing = TIMING_ZERO,
5673 .block_erasers =
5674 {
5675 {
5676 .eraseblocks = { {4 * 1024, 1024} },
5677 .block_erase = spi_block_erase_20,
5678 }, {
5679 .eraseblocks = { {32 * 1024, 128} },
5680 .block_erase = spi_block_erase_52,
5681 }, {
5682 .eraseblocks = { {64 * 1024, 64} },
5683 .block_erase = spi_block_erase_d8,
5684 }, {
5685 .eraseblocks = { {4 * 1024 * 1024, 1} },
5686 .block_erase = spi_block_erase_60,
5687 }, {
5688 .eraseblocks = { {4 * 1024 * 1024, 1} },
5689 .block_erase = spi_block_erase_c7,
5690 }
5691 },
5692 .write = spi_chip_write_256,
5693 .read = spi_chip_read,
5694 },
5695
5696 {
5697 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005698 .name = "W25x10",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005699 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005700 .manufacture_id = WINBOND_NEX_ID,
5701 .model_id = W_25X10,
5702 .total_size = 128,
5703 .page_size = 256,
5704 .tested = TEST_UNTESTED,
5705 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005706 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005707 .block_erasers =
5708 {
5709 {
5710 .eraseblocks = { {4 * 1024, 32} },
5711 .block_erase = spi_block_erase_20,
5712 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005713 .eraseblocks = { {64 * 1024, 2} },
5714 .block_erase = spi_block_erase_d8,
5715 }, {
5716 .eraseblocks = { {128 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005717 .block_erase = spi_block_erase_c7,
5718 }
5719 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005720 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005721 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005722 },
5723
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005724 {
5725 .vendor = "Winbond",
5726 .name = "W25x20",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005727 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005728 .manufacture_id = WINBOND_NEX_ID,
5729 .model_id = W_25X20,
5730 .total_size = 256,
5731 .page_size = 256,
5732 .tested = TEST_UNTESTED,
5733 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005734 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005735 .block_erasers =
5736 {
5737 {
5738 .eraseblocks = { {4 * 1024, 64} },
5739 .block_erase = spi_block_erase_20,
5740 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005741 .eraseblocks = { {64 * 1024, 4} },
5742 .block_erase = spi_block_erase_d8,
5743 }, {
5744 .eraseblocks = { {256 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005745 .block_erase = spi_block_erase_c7,
5746 }
5747 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005748 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005749 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005750 },
5751
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005752 {
5753 .vendor = "Winbond",
5754 .name = "W25x40",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005755 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005756 .manufacture_id = WINBOND_NEX_ID,
5757 .model_id = W_25X40,
5758 .total_size = 512,
5759 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005760 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005761 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005762 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005763 .block_erasers =
5764 {
5765 {
5766 .eraseblocks = { {4 * 1024, 128} },
5767 .block_erase = spi_block_erase_20,
5768 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005769 .eraseblocks = { {64 * 1024, 8} },
5770 .block_erase = spi_block_erase_d8,
5771 }, {
5772 .eraseblocks = { {512 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005773 .block_erase = spi_block_erase_c7,
5774 }
5775 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005776 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005777 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005778 },
5779
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005780 {
5781 .vendor = "Winbond",
5782 .name = "W25x80",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00005783 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005784 .manufacture_id = WINBOND_NEX_ID,
5785 .model_id = W_25X80,
5786 .total_size = 1024,
5787 .page_size = 256,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005788 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005789 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00005790 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005791 .block_erasers =
5792 {
5793 {
5794 .eraseblocks = { {4 * 1024, 256} },
5795 .block_erase = spi_block_erase_20,
5796 }, {
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005797 .eraseblocks = { {64 * 1024, 16} },
5798 .block_erase = spi_block_erase_d8,
5799 }, {
5800 .eraseblocks = { {1024 * 1024, 1} },
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005801 .block_erase = spi_block_erase_c7,
5802 }
5803 },
Carl-Daniel Hailfinger8d497012009-05-09 02:34:18 +00005804 .write = spi_chip_write_256,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005805 .read = spi_chip_read,
FENG yu ningff692fb2008-12-08 18:15:10 +00005806 },
5807
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005808 {
5809 .vendor = "Winbond",
Hector Martina721ae22009-07-11 19:39:11 +00005810 .name = "W25x16",
5811 .bustype = CHIP_BUSTYPE_SPI,
5812 .manufacture_id = WINBOND_NEX_ID,
5813 .model_id = W_25X16,
5814 .total_size = 2048,
5815 .page_size = 256,
5816 .tested = TEST_OK_PR,
5817 .probe = probe_spi_rdid,
5818 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005819 .block_erasers =
5820 {
5821 {
5822 .eraseblocks = { {4 * 1024, 512} },
5823 .block_erase = spi_block_erase_20,
5824 }, {
5825 .eraseblocks = { {32 * 1024, 64} },
5826 .block_erase = spi_block_erase_52,
5827 }, {
5828 .eraseblocks = { {64 * 1024, 32} },
5829 .block_erase = spi_block_erase_d8,
5830 }, {
5831 .eraseblocks = { {2 * 1024 * 1024, 1} },
5832 .block_erase = spi_block_erase_60,
5833 }, {
5834 .eraseblocks = { {2 * 1024 * 1024, 1} },
5835 .block_erase = spi_block_erase_c7,
5836 }
5837 },
Hector Martina721ae22009-07-11 19:39:11 +00005838 .write = spi_chip_write_256,
5839 .read = spi_chip_read,
5840 },
5841
5842 {
5843 .vendor = "Winbond",
Zheng Bao1db2b752009-11-26 11:05:01 +00005844 .name = "W25x32",
5845 .bustype = CHIP_BUSTYPE_SPI,
5846 .manufacture_id = WINBOND_NEX_ID,
5847 .model_id = W_25X32,
5848 .total_size = 4096,
5849 .page_size = 256,
5850 .tested = TEST_OK_PROBE,
5851 .probe = probe_spi_rdid,
5852 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005853 .block_erasers =
5854 {
5855 {
5856 .eraseblocks = { {4 * 1024, 1024} },
5857 .block_erase = spi_block_erase_20,
5858 }, {
5859 .eraseblocks = { {32 * 1024, 128} },
5860 .block_erase = spi_block_erase_52,
5861 }, {
5862 .eraseblocks = { {64 * 1024, 64} },
5863 .block_erase = spi_block_erase_d8,
5864 }, {
5865 .eraseblocks = { {4 * 1024 * 1024, 1} },
5866 .block_erase = spi_block_erase_60,
5867 }, {
5868 .eraseblocks = { {4 * 1024 * 1024, 1} },
5869 .block_erase = spi_block_erase_c7,
5870 }
5871 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005872 .write = spi_chip_write_256,
5873 .read = spi_chip_read,
5874 },
5875
5876 {
5877 .vendor = "Winbond",
5878 .name = "W25x64",
5879 .bustype = CHIP_BUSTYPE_SPI,
5880 .manufacture_id = WINBOND_NEX_ID,
5881 .model_id = W_25X64,
5882 .total_size = 8192,
5883 .page_size = 256,
5884 .tested = TEST_UNTESTED,
5885 .probe = probe_spi_rdid,
5886 .probe_timing = TIMING_ZERO,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005887 .block_erasers =
5888 {
5889 {
5890 .eraseblocks = { {4 * 1024, 2048} },
5891 .block_erase = spi_block_erase_20,
5892 }, {
5893 .eraseblocks = { {32 * 1024, 256} },
5894 .block_erase = spi_block_erase_52,
5895 }, {
5896 .eraseblocks = { {64 * 1024, 128} },
5897 .block_erase = spi_block_erase_d8,
5898 }, {
5899 .eraseblocks = { {8 * 1024 * 1024, 1} },
5900 .block_erase = spi_block_erase_60,
5901 }, {
5902 .eraseblocks = { {8 * 1024 * 1024, 1} },
5903 .block_erase = spi_block_erase_c7,
5904 }
5905 },
Zheng Bao1db2b752009-11-26 11:05:01 +00005906 .write = spi_chip_write_256,
5907 .read = spi_chip_read,
5908 },
5909
5910 {
5911 .vendor = "Winbond",
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005912 .name = "W29C011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005913 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005914 .manufacture_id = WINBOND_ID,
5915 .model_id = W_29C011,
5916 .total_size = 128,
5917 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005918 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00005919 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005920 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00005921 .probe_timing = 10, /* used datasheet for the W29C011A */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005922 .block_erasers =
5923 {
5924 {
5925 .eraseblocks = { {128 * 1024, 1} },
5926 .block_erase = erase_chip_block_jedec,
5927 }
5928 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005929 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005930 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005931 },
5932
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005933 {
5934 .vendor = "Winbond",
5935 .name = "W29C020C",
Urja Rannikko161b8852009-06-05 08:47:37 +00005936 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005937 .manufacture_id = WINBOND_ID,
5938 .model_id = W_29C020C,
5939 .total_size = 256,
5940 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005941 .feature_bits = FEATURE_LONG_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00005942 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005943 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005944 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005945 .block_erasers =
5946 {
5947 {
5948 .eraseblocks = { {256 * 1024, 1} },
5949 .block_erase = erase_chip_block_jedec,
5950 }
5951 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005952 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005953 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005954 },
5955
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005956 {
5957 .vendor = "Winbond",
5958 .name = "W29C040P",
Urja Rannikko161b8852009-06-05 08:47:37 +00005959 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005960 .manufacture_id = WINBOND_ID,
5961 .model_id = W_29C040P,
5962 .total_size = 512,
5963 .page_size = 256,
Sean Nelson35727f72010-01-28 23:55:12 +00005964 .feature_bits = FEATURE_LONG_RESET,
5965 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005966 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00005967 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005968 .block_erasers =
5969 {
5970 {
5971 .eraseblocks = { {512 * 1024, 1} },
5972 .block_erase = erase_chip_block_jedec,
5973 }
5974 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005975 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005976 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00005977 },
5978
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005979 {
5980 .vendor = "Winbond",
5981 .name = "W29EE011",
Urja Rannikko038a3122009-06-28 19:19:25 +00005982 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005983 .manufacture_id = WINBOND_ID,
5984 .model_id = W_29C011,
5985 .total_size = 128,
5986 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00005987 .feature_bits = FEATURE_LONG_RESET,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005988 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005989 .probe = probe_w29ee011,
Maciej Pijankac6e11112009-06-03 14:46:22 +00005990 .probe_timing = TIMING_IGNORED, /* routine don't use probe_timing (w29ee011.c) */
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00005991 .block_erasers =
5992 {
5993 {
5994 .eraseblocks = { {128 * 1024, 1} },
5995 .block_erase = erase_chip_block_jedec,
5996 }
5997 },
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00005998 .write = write_jedec,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00005999 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006000 },
6001
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006002 {
6003 .vendor = "Winbond",
6004 .name = "W39V040A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006005 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006006 .manufacture_id = WINBOND_ID,
6007 .model_id = W_39V040A,
6008 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006009 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006010 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcher3355f062010-03-24 22:56:23 +00006011 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006012 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006013 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006014 .block_erasers =
6015 {
6016 {
6017 .eraseblocks = { {64 * 1024, 8} },
6018 .block_erase = erase_sector_jedec,
6019 }, {
6020 .eraseblocks = { {512 * 1024, 1} },
6021 .block_erase = erase_chip_block_jedec,
6022 }
6023 },
Sean Nelson35727f72010-01-28 23:55:12 +00006024 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006025 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006026 },
6027
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006028 {
6029 .vendor = "Winbond",
6030 .name = "W39V040B",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006031 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006032 .manufacture_id = WINBOND_ID,
6033 .model_id = W_39V040B,
6034 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006035 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006036 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann8d341b52010-05-25 23:27:44 +00006037 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006038 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006039 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006040 .block_erasers =
6041 {
6042 {
6043 .eraseblocks = { {64 * 1024, 8} },
6044 .block_erase = erase_sector_jedec,
6045 }, {
6046 .eraseblocks = { {512 * 1024, 1} },
6047 .block_erase = erase_chip_block_jedec,
6048 }
6049 },
Sean Nelson35727f72010-01-28 23:55:12 +00006050 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006051 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006052 },
6053
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006054 {
6055 .vendor = "Winbond",
6056 .name = "W39V040C",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006057 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006058 .manufacture_id = WINBOND_ID,
Mateusz Murawskie33890d2009-06-12 11:45:10 +00006059 .model_id = W_39V040C,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006060 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006061 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006062 .feature_bits = FEATURE_EITHER_RESET,
6063 .tested = TEST_UNTESTED,
6064 .probe = probe_jedec,
Carl-Daniel Hailfinger08fa2f32010-01-10 01:34:00 +00006065 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006066 .block_erasers =
6067 {
6068 {
6069 .eraseblocks = { {64 * 1024, 8} },
6070 .block_erase = erase_sector_jedec,
6071 }, {
6072 .eraseblocks = { {512 * 1024, 1} },
6073 .block_erase = erase_chip_block_jedec,
6074 }
6075 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006076 .printlock = printlock_w39v040c,
Sean Nelson35727f72010-01-28 23:55:12 +00006077 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006078 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006079 },
6080
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006081 {
6082 .vendor = "Winbond",
6083 .name = "W39V040FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006084 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006085 .manufacture_id = WINBOND_ID,
6086 .model_id = W_39V040FA,
6087 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006088 .page_size = 64 * 1024,
Michael Karcherc9b63412010-05-30 16:55:18 +00006089 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermann41787602010-05-30 17:50:16 +00006090 .tested = TEST_OK_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006091 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006092 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006093 .block_erasers =
6094 {
6095 {
6096 .eraseblocks = { {4 * 1024, 128} },
6097 .block_erase = erase_block_jedec,
6098 }, {
6099 .eraseblocks = { {64 * 1024, 8} },
6100 .block_erase = erase_sector_jedec,
6101 }, {
6102 .eraseblocks = { {512 * 1024, 1} },
6103 .block_erase = erase_chip_block_jedec,
6104 }
6105 },
Michael Karcherc9b63412010-05-30 16:55:18 +00006106 .printlock = printlock_sst_fwhub,
6107 .unlock = unlock_sst_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006108 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006109 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006110 },
6111
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006112 {
6113 .vendor = "Winbond",
6114 .name = "W39V080A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006115 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006116 .manufacture_id = WINBOND_ID,
6117 .model_id = W_39V080A,
6118 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006119 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006120 .feature_bits = FEATURE_EITHER_RESET,
6121 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006122 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006123 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006124 .block_erasers =
6125 {
6126 {
6127 .eraseblocks = { {64 * 1024, 16} },
6128 .block_erase = erase_sector_jedec,
6129 }, {
6130 .eraseblocks = { {1024 * 1024, 1} },
6131 .block_erase = erase_chip_block_jedec,
6132 }
6133 },
Sean Nelson35727f72010-01-28 23:55:12 +00006134 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006135 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006136 },
6137
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006138 {
6139 .vendor = "Winbond",
6140 .name = "W49F002U",
Urja Rannikko038a3122009-06-28 19:19:25 +00006141 .bustype = CHIP_BUSTYPE_PARALLEL,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006142 .manufacture_id = WINBOND_ID,
6143 .model_id = W_49F002U,
6144 .total_size = 256,
6145 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006146 .feature_bits = FEATURE_EITHER_RESET,
Uwe Hermann60939692010-03-17 00:05:59 +00006147 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006148 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006149 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006150 .block_erasers =
6151 {
6152 {
6153 .eraseblocks = {
6154 {128 * 1024, 1},
6155 {96 * 1024, 1},
6156 {8 * 1024, 2},
6157 {16 * 1024, 1},
6158 },
6159 .block_erase = erase_sector_jedec,
6160 }, {
6161 .eraseblocks = { {256 * 1024, 1} },
6162 .block_erase = erase_chip_block_jedec,
6163 }
6164 },
Sean Nelson35727f72010-01-28 23:55:12 +00006165 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006166 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006167 },
6168
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006169 {
6170 .vendor = "Winbond",
6171 .name = "W49V002A",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006172 .bustype = CHIP_BUSTYPE_LPC,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006173 .manufacture_id = WINBOND_ID,
6174 .model_id = W_49V002A,
6175 .total_size = 256,
6176 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006177 .feature_bits = FEATURE_EITHER_RESET,
6178 .tested = TEST_UNTESTED,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006179 .probe = probe_jedec,
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006180 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006181 .block_erasers =
6182 {
6183 {
6184 .eraseblocks = {
6185 {64 * 1024, 3},
6186 {32 * 1024, 1},
6187 {8 * 1024, 2},
6188 {16 * 1024, 1},
6189 },
6190 .block_erase = erase_sector_jedec,
6191 }, {
6192 .eraseblocks = { {256 * 1024, 1} },
6193 .block_erase = erase_chip_block_jedec,
6194 }
6195 },
Sean Nelson35727f72010-01-28 23:55:12 +00006196 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006197 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006198 },
6199
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006200 {
6201 .vendor = "Winbond",
6202 .name = "W49V002FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006203 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006204 .manufacture_id = WINBOND_ID,
6205 .model_id = W_49V002FA,
6206 .total_size = 256,
6207 .page_size = 128,
Sean Nelson35727f72010-01-28 23:55:12 +00006208 .feature_bits = FEATURE_EITHER_RESET,
Michael Karcherb90c2212010-03-24 22:56:14 +00006209 .tested = TEST_OK_PRW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006210 .probe = probe_jedec,
Udu Ogahc04ee222009-09-05 01:31:32 +00006211 .probe_timing = 10,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006212 .block_erasers =
6213 {
6214 {
6215 .eraseblocks = {
6216 {64 * 1024, 3},
6217 {32 * 1024, 1},
6218 {8 * 1024, 2},
6219 {16 * 1024, 1},
6220 },
6221 .block_erase = erase_sector_jedec,
6222 }, {
6223 .eraseblocks = { {256 * 1024, 1} },
6224 .block_erase = erase_chip_block_jedec,
6225 }
6226 },
Sean Nelson35727f72010-01-28 23:55:12 +00006227 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006228 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006229 },
6230
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006231 {
6232 .vendor = "Winbond",
6233 .name = "W39V080FA",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006234 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006235 .manufacture_id = WINBOND_ID,
6236 .model_id = W_39V080FA,
6237 .total_size = 1024,
Sean Nelson72a9a022009-12-22 22:15:33 +00006238 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006239 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Uwe Hermannea5425b2010-05-30 17:00:19 +00006240 .tested = TEST_OK_PREW,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006241 .probe = probe_jedec,
6242 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006243 .block_erasers =
6244 {
6245 {
6246 .eraseblocks = { {64 * 1024, 16}, },
6247 .block_erase = erase_sector_jedec,
6248 }, {
6249 .eraseblocks = { {1024 * 1024, 1} },
6250 .block_erase = erase_chip_block_jedec,
6251 }
6252 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006253 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006254 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006255 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006256 },
6257
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006258 {
6259 .vendor = "Winbond",
6260 .name = "W39V080FA (dual mode)",
Mateusz Murawski8b2f46b2009-06-12 21:29:36 +00006261 .bustype = CHIP_BUSTYPE_FWH,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006262 .manufacture_id = WINBOND_ID,
6263 .model_id = W_39V080FA_DM,
6264 .total_size = 512,
Sean Nelson72a9a022009-12-22 22:15:33 +00006265 .page_size = 64 * 1024,
Sean Nelson35727f72010-01-28 23:55:12 +00006266 .feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006267 .tested = TEST_UNTESTED,
Carl-Daniel Hailfingere9404662010-01-09 02:24:17 +00006268 .probe = probe_jedec,
6269 .probe_timing = TIMING_FIXME,
Sean Nelsoncfc35cd2010-01-19 03:24:55 +00006270 .block_erasers =
6271 {
6272 {
6273 .eraseblocks = { {64 * 1024, 8}, },
6274 .block_erase = erase_sector_jedec,
6275 }, {
6276 .eraseblocks = { {512 * 1024, 1} },
6277 .block_erase = erase_chip_block_jedec,
6278 }
6279 },
Sean Nelson6e0b9122010-02-19 00:52:10 +00006280 .unlock = unlock_winbond_fwhub,
Sean Nelson35727f72010-01-28 23:55:12 +00006281 .write = write_jedec_1,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006282 .read = read_memmapped,
FENG yu ningff692fb2008-12-08 18:15:10 +00006283 },
6284
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006285 {
6286 .vendor = "Atmel",
6287 .name = "unknown Atmel SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006288 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006289 .manufacture_id = ATMEL_ID,
6290 .model_id = GENERIC_DEVICE_ID,
6291 .total_size = 0,
6292 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006293 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006294 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006295 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006296 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006297 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006298 },
6299
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006300 {
6301 .vendor = "EON",
6302 .name = "unknown EON SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006303 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006304 .manufacture_id = EON_ID_NOPREFIX,
6305 .model_id = GENERIC_DEVICE_ID,
6306 .total_size = 0,
6307 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006308 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006309 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006310 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006311 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006312 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006313 },
6314
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006315 {
6316 .vendor = "Macronix",
6317 .name = "unknown Macronix SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006318 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006319 .manufacture_id = MX_ID,
6320 .model_id = GENERIC_DEVICE_ID,
6321 .total_size = 0,
6322 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006323 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006324 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006325 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006326 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006327 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006328 },
6329
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006330 {
6331 .vendor = "PMC",
6332 .name = "unknown PMC SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006333 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006334 .manufacture_id = PMC_ID,
6335 .model_id = GENERIC_DEVICE_ID,
6336 .total_size = 0,
6337 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006338 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006339 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006340 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006341 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006342 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006343 },
6344
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006345 {
6346 .vendor = "SST",
6347 .name = "unknown SST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006348 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006349 .manufacture_id = SST_ID,
6350 .model_id = GENERIC_DEVICE_ID,
6351 .total_size = 0,
6352 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006353 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006354 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006355 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006356 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006357 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006358 },
6359
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006360 {
6361 .vendor = "ST",
6362 .name = "unknown ST SPI chip",
Carl-Daniel Hailfinger1dfe0ff2009-05-31 17:57:34 +00006363 .bustype = CHIP_BUSTYPE_SPI,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006364 .manufacture_id = ST_ID,
6365 .model_id = GENERIC_DEVICE_ID,
6366 .total_size = 0,
6367 .page_size = 256,
Carl-Daniel Hailfinger42882fd2009-04-22 13:33:43 +00006368 .tested = TEST_BAD_PREW,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006369 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger2bc020b2009-06-05 13:46:17 +00006370 .probe_timing = TIMING_ZERO,
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006371 .write = NULL,
Carl-Daniel Hailfinger03b4e712009-05-08 12:49:03 +00006372 .read = NULL,
FENG yu ningff692fb2008-12-08 18:15:10 +00006373 },
Uwe Hermannfc425e82008-03-16 02:06:25 +00006374
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006375 {
Sean Nelson118e1d62009-11-24 02:08:11 +00006376 .vendor = "Sanyo",
6377 .name = "unknown Sanyo SPI chip",
6378 .bustype = CHIP_BUSTYPE_SPI,
6379 .manufacture_id = SANYO_ID,
6380 .model_id = GENERIC_DEVICE_ID,
6381 .total_size = 0,
6382 .page_size = 256,
6383 .tested = TEST_BAD_PREW,
6384 .probe = probe_spi_rdid,
6385 .probe_timing = TIMING_ZERO,
Sean Nelson118e1d62009-11-24 02:08:11 +00006386 .write = NULL,
6387 .read = NULL,
6388 },
6389
6390 {
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006391 .vendor = "Generic",
6392 .name = "unknown SPI chip (RDID)",
6393 .bustype = CHIP_BUSTYPE_SPI,
6394 .manufacture_id = GENERIC_MANUF_ID,
6395 .model_id = GENERIC_DEVICE_ID,
6396 .total_size = 0,
6397 .page_size = 256,
6398 .tested = TEST_BAD_PREW,
6399 .probe = probe_spi_rdid,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006400 .write = NULL,
6401 },
6402 {
6403 .vendor = "Generic",
6404 .name = "unknown SPI chip (REMS)",
6405 .bustype = CHIP_BUSTYPE_SPI,
6406 .manufacture_id = GENERIC_MANUF_ID,
6407 .model_id = GENERIC_DEVICE_ID,
6408 .total_size = 0,
6409 .page_size = 256,
6410 .tested = TEST_BAD_PREW,
6411 .probe = probe_spi_rems,
Carl-Daniel Hailfinger01d49ed2009-11-20 01:12:45 +00006412 .write = NULL,
6413 },
6414
Stephan Guilloux5c5b5252009-01-08 03:40:17 +00006415 { NULL }
Stephan Guilloux72cf5652009-04-21 01:46:07 +00006416};